API reference
Generate animated whiteboard explainer videos programmatically. One video costs one credit, the same balance you top up in the app.
Authentication
Create a key under Settings → API keys and send it as a bearer token. Keys look like rk_live_… and are shown only once.
Authorization: Bearer rk_live_your_key_hereBase URL: https://api.rekkaai.com
Endpoints
POST /v1/videos
style and format are required, so a video is never rendered in a look you did not choose. Use prompt to steer emphasis, audience, or tone, or to describe changes when re-rendering a topic. Control length with chapters (an exact count) or length (a rough size); both set how long, and therefore how much, the video costs.| Name | Type | Required | Description |
|---|---|---|---|
| topic | string | Required | A clear topic or question to explain (3-300 characters). |
| prompt | string | Optional | Optional creative direction (max 2000 characters). |
| chapters | integer | Optional | Exact number of chapters to plan (1-60). Each chapter is up to 100 seconds and about 1 credit. Takes precedence over length. |
| length | string | Optional | Rough length when chapters is not set: short, standard, or in_depth. Defaults to a short, focused video. |
| style | string | Required | Visual style: whiteboard, chalkboard, or crayon. |
| format | string | Required | Aspect ratio: square, landscape (3:2), or portrait (2:3). |
curl -X POST https://api.rekkaai.com/v1/videos \
-H "Authorization: Bearer rk_live_..." \
-H "Content-Type: application/json" \
-d '{"topic":"How do rainbows form?","style":"whiteboard","format":"landscape"}'Success response (201)
{
"id": "job_abc123",
"topic": "How do rainbows form?",
"status": "pending",
"videoUrl": null,
"createdAt": 1730000000000
}Errors for this endpoint
400: Missing topic, style, or format; topic/prompt exceed their length limits; style/format is not a valid option; or the body carries a field the endpoint does not accept. Unknown fields are rejected rather than ignored, so a typo never costs you a credit.
{ "error": "invalid_request", "details": { "fieldErrors": { "format": ["Required"] } } }401: Missing or invalid API key.
{ "error": "unauthorized" }402: Not enough credits to start a video.
{ "error": "insufficient_credits", "credits": 0 }GET /v1/videos/:id
status is done, videoUrl is the finished MP4: a private link you download with the same Authorization: Bearer header (opening it without the header returns 404). Statuses: pending, processing, done, error.| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Required | The job id returned by POST /v1/videos. |
curl https://api.rekkaai.com/v1/videos/JOB_ID \
-H "Authorization: Bearer rk_live_..."# once status is "done", download videoUrl with the same key
curl -L https://api.rekkaai.com/videos/JOB_ID/file \
-H "Authorization: Bearer rk_live_..." \
-o video.mp4Success response (200)
{
"id": "job_abc123",
"topic": "How do rainbows form?",
"status": "done",
"videoUrl": "https://api.rekkaai.com/videos/job_abc123/file",
"createdAt": 1730000000000
}Errors for this endpoint
401: Missing or invalid API key.
{ "error": "unauthorized" }404: No video with that id belongs to this account.
{ "error": "not_found" }GET /v1/credits
curl https://api.rekkaai.com/v1/credits -H "Authorization: Bearer rk_live_..."Success response (200)
{ "credits": 42 }Errors for this endpoint
401: Missing or invalid API key.
{ "error": "unauthorized" }Errors
| Code | Meaning | When it happens |
|---|---|---|
| 200 | OK | Successful GET request. |
| 201 | Created | Video job created successfully. |
| 400 | Bad Request | Request body failed validation (see details). |
| 401 | Unauthorized | Missing, malformed, or revoked API key. |
| 402 | Payment Required | Insufficient credits to start a video. |
| 404 | Not Found | The requested video doesn't exist or isn't yours. |
MCP server
rekka also speaks the Model Context Protocol, so agents (Claude, editors, etc.) can make videos directly. It's a streamable-HTTP MCP endpoint authenticated with the same API key.
generate_video
Create an animated hand-drawn explainer video about a topic. Costs at least 1 credit, and more for longer videos: about 1 credit per 100 seconds, billed by final length. Returns a jobId; poll get_video_status until status is 'done', then download the videoUrl it returns.
| Name | Type | Required | Description |
|---|---|---|---|
| topic | string | Required | A clear topic or question to explain. |
| prompt | string | Optional | Optional creative direction: emphasis, audience, tone, or changes from a previous take. |
| chapters | integer | Optional | Exact number of chapters to plan (1-60). Each chapter is up to 100 seconds and about 1 credit. Takes precedence over length. |
| length | string | Optional | Rough length when chapters is not set: short, standard, or in_depth. Defaults to a short, focused video. |
| style | string | Required | Visual style: whiteboard, chalkboard, or crayon. |
| format | string | Required | Aspect ratio: square, landscape (3:2), or portrait (2:3). |
get_video_status
Get the status of a video by jobId, or the caller's recent videos if omitted. When status is 'done', the response includes `videoUrl`, the finished MP4: download it with your API key as a Bearer token (it is a private link, not open to the public).
| Name | Type | Required | Description |
|---|---|---|---|
| jobId | string | Optional | Omit to list recent videos instead of one. |
get_credits
Get the caller's remaining video credits.
{
"mcpServers": {
"rekka": {
"type": "http",
"url": "https://api.rekkaai.com/mcp",
"headers": { "Authorization": "Bearer rk_live_..." }
}
}
}For clients that only speak stdio, bridge with npx mcp-remote https://api.rekkaai.com/mcp --header "Authorization: Bearer rk_live_...".
rekka