Browse the API docs
Endpoint reference

Exports

The Crayo Exports API tracks renders queued from projects. Poll GET /v1/exports/{id} until status is completed or failed, or register an export.completed webhook and read the finished asset from its payload.

List exports

GET/v1/exports

Lists renders on the account, newest first, with their status and progress. Filter by project_id to see every render of one project.

Credits:
Free
Rate limit:
Polling tier, 2/s and 120/min

Parameters

NameInTypeRequiredDescription
project_idquerystringNoOnly return renders of this project.
limitqueryintegerNoExports per page. 1 to 100.default 25
offsetqueryintegerNoNumber of exports to skip.default 0

Request

curl
curl "https://api.crayo.ai/v1/exports?project_id=cm7x1k9r70004abcd" \
  -H "Authorization: Bearer $CRAYO_API_KEY"

Response

200 application/json
{
  "success": true,
  "total": 8,
  "hasMore": false,
  "exports": [
    {
      "id": "cm7x1kb2p0007abcd",
      "project_id": "cm7x1k9r70004abcd",
      "status": "processing",
      "progress": 62,
      "created_at": "2026-08-21T14:06:03.000Z"
    }
  ]
}

Errors

  • 401MISSING_API_KEYNo Authorization header was sent, or it does not carry a crayo_sk_ key.
  • 401UNAUTHORIZEDThe key sent is malformed, expired, or revoked.
  • 429RATE_LIMITEDOver the rate limit. Wait Retry-After seconds.
  • 500SERVER_ERRORSomething failed on our side. Retry with backoff.

Get export

GET/v1/exports/{id}

Returns one render. Status moves through queued, processing, and then completed or failed. Once it completes, the response also carries the finished video asset with a downloadable url.

  • Webhooks are the recommended way to learn that a render finished. Polling here is the fallback when you cannot receive one.
  • A failed export carries an error field with a plain-language reason. Credits stay spent.
Credits:
Free
Rate limit:
Polling tier, 2/s and 120/min

Parameters

NameInTypeRequiredDescription
idpathstringYesThe export id returned by POST /v1/projects/{id}/export.

Request

curl
curl "https://api.crayo.ai/v1/exports/cm7x1kb2p0007abcd" \
  -H "Authorization: Bearer $CRAYO_API_KEY"

Response

200 application/json
{
  "success": true,
  "export": {
    "id": "cm7x1kb2p0007abcd",
    "project_id": "cm7x1k9r70004abcd",
    "status": "completed",
    "progress": 100,
    "created_at": "2026-08-21T14:06:03.000Z"
  },
  "asset": {
    "id": "cm7x1kd440009abcd",
    "name": "Morning habits short",
    "key": "user-uploads/cm7x0v8qa0000abcd/3a7.../video.mp4",
    "url": "https://cdn-crayo.com/user-uploads/cm7x0v8qa0000abcd/3a7.../video.mp4",
    "type": "video",
    "category": "export",
    "length": 11.5,
    "size": 4823104,
    "width": 1080,
    "height": 1920,
    "createdAt": "2026-08-21T14:07:51.000Z"
  }
}

Errors

  • 401MISSING_API_KEYNo Authorization header was sent, or it does not carry a crayo_sk_ key.
  • 401UNAUTHORIZEDThe key sent is malformed, expired, or revoked.
  • 404NOT_FOUNDNo export with that id belongs to your account.
  • 429RATE_LIMITEDOver the rate limit. Wait Retry-After seconds.
  • 500SERVER_ERRORSomething failed on our side. Retry with backoff.
New to the Crayo API? See what it is forUse cases, pricing and the console walkthrough live on the API feature page.

FAQs

Frequent questions

Status moves through queued and processing, then ends as completed or failed. The progress field reports percent complete while it runs.

Once status is completed, GET /v1/exports/{id} also returns an asset object with a downloadable url, and the same asset lands in your library.

The export carries an error field with a plain-language reason. Credits charged when the render was queued stay spent.

Both export endpoints are in the polling tier: 2 requests per second and 120 per minute. Webhooks are the recommended way to learn that a render finished.

Still have questions?

Contact our 24/7 support team for any concerns or inquiries.

Get in touch