Skip to main content
GET
/
workflow-results
/
{taskId}
// Node.js (using fetch)
import fetch from "node-fetch";

const triggerId = "<TRIGGER_ID>";
const apiUrl = `https://api.joinoverlap.com/workflow-results/${triggerId}`;

const headers = {
  "Content-Type": "application/json",
  "Authorization": "Bearer YOUR_API_KEY"
};

fetch(apiUrl, {
  method: "GET",
  headers
})
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));

Endpoint

GET https://api.joinoverlap.com/workflow-results/{triggerId}
Use this endpoint to check the status of a workflow triggered via POST /trigger-template. We recommend polling this endpoint every 5–10 seconds until the workflow is complete. Use the provided renderedUrl as the base video on which you overlay the subtitles.

Authentication

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Path Parameters

ParameterDescription
triggerIdUnique identifier for the workflow run (returned from /trigger-template as triggerId)

Response Format

When workflow is still processing

{
  "status": string // Begins as 'Pending', then sends relevant updates such as "Learning". Finishes as "Completed" or "Error"
}

When workflow has completed successfully

{
  "status": "Completed",
  "clips": Clip[]
}

When workflow has failed

{
  "status": "Error"
}

// Node.js (using fetch)
import fetch from "node-fetch";

const triggerId = "<TRIGGER_ID>";
const apiUrl = `https://api.joinoverlap.com/workflow-results/${triggerId}`;

const headers = {
  "Content-Type": "application/json",
  "Authorization": "Bearer YOUR_API_KEY"
};

fetch(apiUrl, {
  method: "GET",
  headers
})
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));

Example Response (Completed)

{
    "clips": [
        {
            "aspectRatio": "16:9",
            "backgroundMusicOption": {
                "url": // URL to the music in the background
            },
            "bio": "Boston radio host Chuck Dolan lays down hilarious, rapid-fire etiquette for adults who dare show up to a Halloween costume party without actually wearing a costume.",
            "duration": 27.159999999999997,
            "endTimestamp": 88.5,
            "id": "8701c128-c078-4455-b1c0-830eed2007a1",
            "keywords": [
                "Halloween",
                "costume party",
                "etiquette",
                "radio rant",
                "Chuck Dolan",
                "party tips"
            ],
            "people": [
                "Chuck Dolan"
            ],
            "renderedUrl": // URL of the video rendered with everything except for subtitles. Use the render endpoint to receive burnt in subtitles. 
            "startTimestamp": 61.34,
            "subtitleId": true,
            "thumbnailURL": // Public URL of the video thumbnail
            "timestampBoundary": {
                "end": 30.0,
                "start": 30.0
            },
            "title": "Chuck Dolan’s No-Excuses Halloween Costume Rule",
            "titleText": "No Costume? No Candy, No Entry!",
            "videoHeight": 1080,
            "videoResolution": "1920x1080",
            "viralityScore": 72.4
        }
    ],
    "status": "Completed"
}

Clip Object

PropertyTypeDescription
idstringUnique identifier for the clip
titlestringHuman-readable clip title
biostringShort description or context
keywordsstring[]Keywords or tags associated with the clip
peoplestring[]Speakers or people detected in the clip
durationnumberDuration of the clip in seconds
startTimestampnumberStart timestamp in the original source video
endTimestampnumberEnd timestamp
aspectRatiostring"16:9" or "9:16"
renderedUrlstringPublic URL of the rendered clip (with no captions)
rawUrlstringRaw clip URL (no subtitles)
thumbnailUrlstringThumbnail image URL
transcriptUrlstringURL to the JSON transcript for the clip
viralityScorenumberScore estimating predicted performance
fpsnumberFrames per second of the clip

We recommend polling this endpoint using a backoff interval (5–10 seconds) until:
  • status === "Completed" → clips available
  • status === "Error" → retry or notify [email protected]

Render your final video

Use the Render endpoint to burn in your subtitles and any user changes