Streamlet Platform Documentation

RESTful API Reference

Use Streamlet directly over HTTP when you want full control over upload, processing, captions, storage, and backend workflows.

Authentication

Streamlet API-key routes require both the API key and the account number. These match the middleware already used in the main Streamlet backend.

x-streamlet-api-key and x-streamlet-account-number must be sent on every protected request.

Upload API

POST to /api-key/start-video-processing with multipart form data. Upload the source video, set the title, and optionally enable captions and original-file retention.

Create processing job

JavaScript

const formData = new FormData();
formData.append("video", fileInput.files[0]);
formData.append("videoTitle", "Launch Demo");
formData.append("saveOriginalFile", "true");
formData.append("autoAudioEnhancement", "true");
formData.append("enableCaption", "true");
formData.append("engCaption", "true");
formData.append("hindiCaption", "true");

const response = await fetch("https://api.streamlet.in/api-key/start-video-processing", {
  method: "POST",
  headers: {
    "x-streamlet-api-key": "sk_streamlet_live_xxxxxxxxxxxxxx",
    "x-streamlet-account-number": "681b58c58d8c0a55b7c64b2c"
  },
  body: formData
});

const data = await response.json();
console.log(data);

Queued upload response

JSON

{
  "success": true,
  "videoId": "Launch Demo-1775211037986",
  "userId": "681b58c58d8c0a55b7c64b2c",
  "status": "queued",
  "message": "Video uploaded and queued for processing",
  "statusUrl": "/video-processing-status/Launch%20Demo-1775211037986"
}

Status API

GET /api-key/video-processing-status/:videoId to fetch the current status for one video. Use the returned videoId from the upload response.

Get processing status

JavaScript

const response = await fetch(
  "https://api.streamlet.in/api-key/video-processing-status/your_video_id",
  {
    headers: {
      "x-streamlet-api-key": "sk_streamlet_live_xxxxxxxxxxxxxx",
      "x-streamlet-account-number": "681b58c58d8c0a55b7c64b2c"
    }
  }
);

const data = await response.json();
console.log(data);

Completed status response

JSON

{
  "success": true,
  "videoId": "Launch Demo-1775211037986",
  "userId": "681b58c58d8c0a55b7c64b2c",
  "videoTitle": "Launch Demo",
  "title": "Launch Demo",
  "visibility": "Private",
  "fileName": "product-demo.mp4",
  "fileSizeBytes": 6681892,
  "fileMimeType": "video/mp4",
  "status": "completed",
  "queuedAt": "2026-04-03T10:10:39.888Z",
  "keepOriginal": true,
  "autoAudioEnhancement": true,
  "generateCaptions": true,
  "captionLanguages": ["english", "hindi"],
  "originalVideoUrl": "https://cdn.streamlet.in/681b58c58d8c0a55b7c64b2c/video/Launch%20Demo-1775211037986/original/product-demo.mp4",
  "streamUrl": "https://cdn.streamlet.in/681b58c58d8c0a55b7c64b2c/video/Launch%20Demo-1775211037986/processed/master.m3u8",
  "thumbnail": "https://cdn.streamlet.in/681b58c58d8c0a55b7c64b2c/video/Launch%20Demo-1775211037986/processed/thumbnail.jpg",
  "audioPlaylistUrl": "https://cdn.streamlet.in/681b58c58d8c0a55b7c64b2c/video/Launch%20Demo-1775211037986/processed/vaudio/playlist.m3u8",
  "durationSeconds": 27.814286,
  "captions": {
    "en": "https://cdn.streamlet.in/681b58c58d8c0a55b7c64b2c/video/Launch%20Demo-1775211037986/processed/captions.en.vtt",
    "hi": "https://cdn.streamlet.in/681b58c58d8c0a55b7c64b2c/video/Launch%20Demo-1775211037986/processed/captions.hi.vtt"
  },
  "chapters": {
    "vtt": "https://cdn.streamlet.in/681b58c58d8c0a55b7c64b2c/video/Launch%20Demo-1775211037986/processed/chapters.vtt",
    "json": "https://cdn.streamlet.in/681b58c58d8c0a55b7c64b2c/video/Launch%20Demo-1775211037986/processed/chapters.json"
  },
  "completedAt": "2026-04-03T10:12:14.748Z"
}

Health API

GET /health to verify service uptime and queue visibility. This is useful for infrastructure checks before sending upload traffic.

curl "https://api.streamlet.in/health"