Archived docs Get your API Key
Get started
Tutorials
Guides
Reference
Help for coding agents
πŸ€– AI Assistant

Get movie status

GET https://api.json2video.com/v2/movies

Retrieves the status and metadata of a single project, or lists all projects for the authenticated account.

Request

Headers

Header Required Value
x-api-key yes API key issued from the dashboard.

Query parameters

Parameter Type Description
project string 16-character project identifier. When present, returns a single movie.
id string Alias for project.
format string simple leaves the movie's json out of the response. Use it when you only need the status: responses are smaller and faster.
date_start / from ISO-8601 List mode: start of date range. Default: first day of current month.
date_end / to ISO-8601 List mode: end of date range. Default: end of current day. Maximum range: 93 days.
limit integer List mode: maximum page size, 1–100. Default: 100. A page can hold fewer movies (see Pagination).
next_token string List mode: pagination cursor returned in the previous response.

Body

None.

Response

200 OK β€” single project

{
  "success": true,
  "movie": {
    "success": true,
    "status": "done",
    "message": "",
    "project": "JkGxEoPRF9EgRb32",
    "url": "https://assets.json2video.com/clients/xxxxxxxx/renders/2026-05-12-36066.mp4",
    "thumbnail": "https://assets.json2video.com/clients/xxxxxxxx/renders/2026-05-12-36066.jpg",
    "ass": "https://assets.json2video.com/clients/xxxxxxxx/renders/2026-05-12-36066.ass",
    "created_at": "2026-05-12T07:41:41.946Z",
    "ended_at": "2026-05-12T07:44:57.108Z",
    "duration": 108.2,
    "size": 6876189,
    "width": 1080,
    "height": 1920,
    "rendering_time": 195,
    "client-data": {},
    "consumed_credits": []
  },
  "remaining_quota": { "movies": 0, "drafts": 0, "time": 1807 }
}

200 OK β€” list of projects

{
  "success": true,
  "from": "2026-05-01T00:00:00.000Z",
  "to":   "2026-05-12T23:59:59.999Z",
  "count": 25,
  "limit": 100,
  "has_next": false,
  "has_prev": false,
  "next_token": null,
  "movies": [ { "...": "movie object as above" } ],
  "remaining_quota": { "time": 1807 }
}

Pagination

Keep requesting pages with the previous response's next_token until has_next is false. Do not stop because count is lower than limit: a page can hold fewer movies than limit while more exist.

That happens when the movies' json would make the response too large (about 5 MB). The page then ends early, has_next is true, and next_token continues right after the last movie returned, so every movie is listed exactly once. In the rare case that a single movie's json is too large to fit in a page on its own, that movie is listed without json; get it with ?project=.

If you don't need json, add format=simple: pages are much smaller and faster. Some older movies may still include json in list pages even with format=simple.

Status enum

Status Meaning
pending Job is queued. No worker has picked it up yet.
running Render is in progress.
done Render finished successfully. url is the final MP4.
error Render failed. message carries the reason.
timeout Computed client-side when status=running and created_at is older than 15 minutes. The server still keeps status=running internally; clients should treat timeout the same as a fatal error.

Movie object fields

Field Type Notes
success boolean true iff the render itself succeeded.
status string See status enum.
message string Error message when success=false; informational otherwise.
project string 16-character project ID.
url string|null Public URL of the rendered MP4. null until done, and again once the video file is gone.
thumbnail string|null Public URL of the movie thumbnail β€” a single frame taken 2 seconds in, or at the timecode set by the movie's thumbnail property. JPEG, or PNG for movies with a transparent background. null until done, and again once the file is gone.
ass string|boolean Public URL of the generated .ass subtitle file, if any; false if none.
created_at string ISO-8601 submission time.
ended_at string|null ISO-8601 completion time. null until done.
deleted_at string|null ISO-8601 time the video file was deleted through DELETE /v2/movies; null otherwise. The entry itself, including consumed_credits, is kept.
duration number Output duration in seconds.
size number Output size in bytes.
width / height integer Output pixel dimensions.
rendering_time integer|null Seconds between created_at and ended_at.
client-data object The client-data from the submitted Movie JSON, returned verbatim.
json string The movie's JSON, serialized as a string (for a movie created from a template, the JSON built from it). Left out with format=simple.
consumed_credits array Per-step credit consumption breakdown. Present for movies created after 2025-07-27.
apikey_id string|null Which credential created the movie: the ID of the API key (an identifier, never the key itself), primary for the primary API key, or session for the dashboard or the editor. null for movies created before 2026-10-02. Present only when the request is made with a session, the primary API key or an API key with the admin role.
destinations_result array|null Single-project responses only. What happened to each output destination of the movie β€” see Delivery results. null when nothing was delivered.

Delivery results

When the movie has output destinations (exports[].destinations[]: webhooks, FTP, SFTP, Amazon S3, email), a single-project response includes destinations_result, one entry per destination, in the order of the movie JSON. The list response (movies) does not include it.

{
  "destinations_result": [
    {
      "index": 0,
      "type": "ftp",
      "id": "media-server",
      "status": "error",
      "http_status": null,
      "attempts": 1,
      "message": "…",
      "duration_ms": 30112,
      "at": "2026-09-17T10:15:01.702Z"
    },
    {
      "index": 1,
      "type": "webhook",
      "id": null,
      "status": "ok",
      "http_status": 200,
      "attempts": 1,
      "message": "Delivered to https://example.com (HTTP 200).",
      "duration_ms": 412,
      "at": "2026-09-17T10:15:02.114Z"
    }
  ]
}
Field Type Notes
index integer|null Position in exports[0].destinations. null when the entry is about the export as a whole.
type string|null webhook, ftp, sftp, aws-s3, email, …
id string|null The connection ID, when the destination references one.
status string ok (delivered), error (not delivered) or skipped (nothing to do, for example an FTP upload for a render that produced no video, or a destination type that is not supported).
http_status integer|null Last HTTP status received (webhooks).
attempts integer Requests or connections made. 0 when nothing was attempted.
message string|null What happened, up to 300 characters. URLs appear as scheme and host only; passwords, URL paths and queries never appear.
duration_ms integer Time spent on this destination.
at string ISO-8601 time the destination finished.

The same results appear in the dashboard under Render logs β†’ the render β†’ Deliveries. Retry rules for webhooks: Webhooks β†’ Delivery and retries.

Errors

Status Message Cause
400 Project ID must be a 16-character string. Received ID: '…' (length: N) project / id is wrong shape.
400 Invalid start date date_start / from is not parseable.
400 Invalid end date date_end / to is not parseable.
400 Maximum date range is 3 months. Range exceeds 93 days.
400 Movie <project> not found. Check that the project ID was returned by POST /v2/movies with an API key of this same account. No movie with that ID exists under the account of the API key (or session) used. An ID created with another account's API key is not found either.
403 Invalid token Admin-only query parameter without a valid token.

A project ID that is not found returns 400 with success: false and the Movie <project> not found… message above. It is not a render failure: retrying with the same ID returns the same error, so polling loops should stop on it.

Examples

Poll a single project

curl --location --request GET \
  'https://api.json2video.com/v2/movies?project=JkGxEoPRF9EgRb32' \
  --header 'x-api-key: YOUR_API_KEY'

List the last 50 projects

curl --location --request GET \
  'https://api.json2video.com/v2/movies?limit=50&date_start=2026-04-12&date_end=2026-05-12' \
  --header 'x-api-key: YOUR_API_KEY'

Paginate

# First page
curl 'https://api.json2video.com/v2/movies?limit=100' -H 'x-api-key: …'
# Subsequent pages: pass the previous response's `next_token`
curl 'https://api.json2video.com/v2/movies?limit=100&next_token=AAA…' -H 'x-api-key: …'