GraphQL API

Transcoding

Submit content for processing and track transcode job status.

After uploading a video, submit it for transcoding to generate streaming manifests, downloads, thumbnails, and subtitles.

Submit for Processing

curl -X POST https://api.rad.live/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "query": "mutation { submitContentForProcessing(id: \"did:rad.live:content/feature/123\", input: { assetName: \"video.mp4\", layout: LANDSCAPE, enhance: false }) { content { id } job { id status progress } } }"
  }'
const response = await fetch('https://api.rad.live/graphql', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY',
  },
  body: JSON.stringify({
    query: `
      mutation {
        submitContentForProcessing(
          id: "did:rad.live:content/feature/123"
          input: {
            assetName: "video.mp4"
            layout: LANDSCAPE
            enhance: false
          }
        ) {
          content { id }
          job { id status progress }
        }
      }
    `,
  }),
});

const { data } = await response.json();
console.log(data.submitContentForProcessing.job.status); // QUEUED
response = requests.post(
    "https://api.rad.live/graphql",
    headers={
        "Content-Type": "application/json",
        "Authorization": "Bearer YOUR_API_KEY",
    },
    json={
        "query": """
        mutation {
          submitContentForProcessing(
            id: "did:rad.live:content/feature/123"
            input: {
              assetName: "video.mp4"
              layout: LANDSCAPE
              enhance: false
            }
          ) {
            content { id }
            job { id status progress }
          }
        }
        """
    },
)

job = response.json()["data"]["submitContentForProcessing"]["job"]
print(job["status"])  # QUEUED

ProcessingInput Fields

FieldTypeRequiredDescription
assetNameString!YesFilename of the uploaded asset
layoutContentLayoutNoLANDSCAPE, PORTRAIT, or VR
enhanceBooleanNoEnable AI upscaling + audio upmixing (Creator+)

TranscodeJob Status

StatusDescription
IDLECreated but not yet deployed
QUEUEDWaiting in the processing queue
TRANSCODINGActively processing (check progress 0-100)
COMPLETEFinished — outputAssets available
ERRORFailed — check error details
CANCELLEDCancelled by user
CANCELLINGCancel in progress

Status Lifecycle

IDLE → QUEUED → TRANSCODING → COMPLETE
                            → ERROR
                            → CANCELLED

Polling Job Status

transcodeJob and outputAssets live on the Content type, not on catalog Feature. Poll processing with channelDashboard (recent uploads include job status) or use waitForProcessing below for full Content fields when complete.

{
  channelDashboard {
    channel {
      id
      name
    }
    recentContent {
      id
      title
      processingStatus
      transcodeJob {
        id
        status
        progress
      }
    }
  }
}

To list catalog titles with Relay pagination, use me { channel { features(first: 10) { edges { node { id metadata { title } convertJobId } } } } } }convertJobId is the catalog link to processing; use dashboard or waitForProcessing for TranscodeJob and outputAssets.

Server-Side Waiting

Instead of client-side polling, use waitForProcessing:

mutation {
  waitForProcessing(input: {
    contentId: "did:rad.live:content/feature/123"
    timeoutSeconds: 300
  }) {
    status
    job { id status progress }
    content { outputAssets { video { hls } } }
  }
}

This blocks server-side until the job completes, errors, or times out (default 300 seconds).

Encoder Types

EncoderWhen UsedCapabilities
MEDIA_CONVERTStandard processingHLS, MP4, thumbnails, subtitles
RAD_ENCODERCreator+ or enhance: trueAll standard outputs + AI upscaling + surround audio

The encoder is selected automatically based on your subscription and the enhance flag.

transcodeJob and outputAssets on Content are null before processing starts. After submitContentForProcessing, transcodeJob becomes available. After processing completes, outputAssets becomes available.

Next steps

On this page