Ssemble API
Endpoints

Get Status

Check the processing status of a short creation request.

GET /shorts/:id/status

Returns the current processing status and progress of a short creation request. Use this endpoint to poll for completion after submitting a request via POST /shorts/create.


Path parameters

ParameterTypeDescription
idstringThe request ID returned from POST /shorts/create. Must be a valid 24-character hex string.

Request

curl -H "X-API-Key: sk_ssemble_your_key" \
  https://aiclipping.ssemble.com/api/v1/shorts/665a1b2c3d4e5f6a7b8c9d0e/status

Response

While processing

{
  "data": {
    "_id": "665a1b2c3d4e5f6a7b8c9d0e",
    "status": "processing",
    "step": "finding_highlights",
    "stepMessage": "Finding interesting segments...",
    "progress": 60,
    "userEmail": "user@example.com",
    "isDemo": false
  }
}

When failed

{
  "data": {
    "_id": "665a1b2c3d4e5f6a7b8c9d0e",
    "status": "failed",
    "step": "failed",
    "stepMessage": "Processing failed",
    "progress": 0,
    "userEmail": "user@example.com",
    "failureReason": "Video download failed",
    "isDemo": false
  }
}

Response fields

FieldTypeDescription
_idstringThe request ID (same as the requestId from create response)
statusstringCurrent processing status (see Status values below)
stepstringThe specific processing step currently being executed (see Processing steps below)
stepMessagestringA human-readable description of the current processing step. Display this to your users for a detailed progress indicator.
progressnumberProcessing progress percentage (0–100). Reaches 100 when status is completed.
userEmailstringEmail of the account that created the request
failureReasonstringOnly present when status is failed. Describes what went wrong.
isDemobooleanWhether this was a demo request

Note: The failureReason field is only included in the response when the status is failed. For all other statuses (queued, processing, completed, cancelled), this field is absent from the response.


Status values

The status field transitions through these states during processing:

StatusProgressDescription
queued0Request is waiting in the processing queue. A processing slot will be assigned shortly.
processing1–99Video is actively being processed — downloading, transcribing, generating captions, rendering clips.
completed100All shorts have been generated successfully. Retrieve results with GET /shorts/:id.
failedvariesProcessing encountered an error. The failureReason field describes what went wrong.
cancelledvariesRequest was cancelled by the user or via DELETE /shorts/:id.

Processing steps

The step field provides granular detail about what is currently happening during processing. Use the stepMessage field to display a human-readable label to your users.

stepstepMessageprogressDescription
queuedWaiting in queue...0Request is waiting for a processing slot.
fetching_videoFetching video...20Downloading the source video from the provided URL.
transcribing_audioAnalyzing video...40Extracting and transcribing the audio track.
finding_highlightsFinding interesting segments...60AI is identifying the most engaging segments for shorts.
finalizingFinalizing data...80Generating final short video clips.
completedTask complete!100All shorts have been generated.
failedProcessing failed0An error occurred. Check failureReason for details.
cancelledRequest cancelled0The request was cancelled.

Status flow

queued → processing → completed
                   ↘ failed

Requests start in queued, transition to processing once a worker picks them up, and end in either completed or failed. A request can be cancelled at any point before completion.


Polling strategy

We recommend polling every 10 seconds until the status is a terminal state (completed, failed, or cancelled). Processing typically takes 5–30 minutes depending on:

  • Video length — longer source videos take more time to download and transcribe
  • Queue position — during peak hours, requests may wait longer in the queue
  • Options selected — overlays (game video, meme hooks) add rendering time
async function waitForCompletion(requestId, apiKey) {
  const POLL_INTERVAL = 10000; // 10 seconds
  const MAX_POLL_TIME = 45 * 60 * 1000; // 45 minutes max
  const startTime = Date.now();
 
  while (Date.now() - startTime < MAX_POLL_TIME) {
    const res = await fetch(
      `https://aiclipping.ssemble.com/api/v1/shorts/${requestId}/status`,
      { headers: { 'X-API-Key': apiKey } }
    );
    const { data } = await res.json();
 
    console.log(`${data.stepMessage} (${data.progress}%)`);
 
    switch (data.status) {
      case 'completed':
        return data;
      case 'failed':
        throw new Error(`Processing failed: ${data.failureReason}`);
      case 'cancelled':
        throw new Error('Request was cancelled');
      default:
        // Still queued or processing — wait and retry
        await new Promise(r => setTimeout(r, POLL_INTERVAL));
    }
  }
 
  throw new Error('Polling timed out after 45 minutes');
}

What to do with each status

StatusAction
queuedKeep polling. Your request is waiting for a processing slot.
processingKeep polling. Display stepMessage and progress to show detailed progress to your users.
completedStop polling. Call GET /shorts/:id to retrieve the generated short videos.
failedStop polling. Read failureReason for details. You can retry by creating a new request with the same parameters.
cancelledStop polling. The request was cancelled and no shorts were generated.

Polling best practices

  • Poll interval: 10 seconds is the recommended minimum. Polling more frequently wastes API calls and may trigger rate limits.
  • Timeout: Set a maximum polling duration (e.g., 45 minutes). If a request hasn't completed by then, it likely encountered an issue.
  • Show step details: Use stepMessage to display what the system is currently doing (e.g., "Analyzing video...") alongside the progress percentage.
  • Handle all terminal states: Always check for failed and cancelled in addition to completed.
  • Rate limits: Status polling uses the "status check" rate limiter. See Rate Limits for details.

Error responses

StatusCodeWhen
400invalid_requestInvalid request ID format (not a valid 24-character hex string)
401invalid_api_keyMissing or invalid API key
404resource_not_foundRequest not found or does not belong to your account
429rate_limit_exceededToo many status checks — reduce polling frequency

Common failure reasons

When a request fails, the failureReason field provides details. Common reasons include:

Failure reasonDescription
Video download failedThe YouTube URL is no longer available, or the file URL is unreachable
Transcription failedAudio quality was too low for accurate transcription
Processing timeoutThe video took too long to process (usually very long videos)
Internal errorAn unexpected server error — retry the request

If a request fails, you can retry by creating a new request with the same parameters. Failed requests still consume credits.

On this page

Ssemble Logo
Copyright © 2026 Ssemble Inc.
All rights reserved