The Reely API
A talking-head video in, a Hebrew reel out: captions, an opening title, music and dead air removed, in every format. The price is known before anything is charged, and test keys are free.
- Base URL
- https://app.reely.co.il/api/v1
- Authentication
- Authorization: Bearer rly_…
- Money
- In agorot: 1320 is ₪13.20
Test keys and live keys
A test key (rly_test_…) is free: it renders a small watermarked reel without music, B-roll or narration, up to 20 renders a day. A live key (rly_live_…) spends your balance, at the same prices as the app.
A key is shown once, when it's made. Keep it in an environment variable, never in code or a browser. Make a key
Your first call
GET /v1/me returns the account behind the key. If it answers, you're connected.
Who am I
export REELY_API_KEY='rly_test_…'
curl 'https://app.reely.co.il/api/v1/me' \
-H "Authorization: Bearer $REELY_API_KEY"From a video to a reel
Upload the file
Ask for an upload URL, then
PUTthe file to it with the headers inheaders. Up to 500 MB of MP4, MOV or WebM. On a shaky connection,multipart: truereturns a URL for each 16 MB part.An upload URL
curl -X POST 'https://app.reely.co.il/api/v1/uploads' \ -H "Authorization: Bearer $REELY_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "filename": "talk.mp4", "size_bytes": 48213504, "content_type": "video/mp4" }'Send the file
curl -X PUT "$UPLOAD_URL" \ -H "Content-Type: video/mp4" \ --data-binary @talk.mp4Create the video
POST /v1/videoswith theupload_id. Reely checks the file, transcribes the Hebrew and suggests titles. It's free.A video from the upload
curl -X POST 'https://app.reely.co.il/api/v1/videos' \ -H "Authorization: Bearer $REELY_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "upload_id": "vid_8f14e45f-ceea-4e7a-9b1c-2f7a0c3d9e61" }'Wait until it's ready
Poll
GET /v1/videos/{video_id}every few seconds untilstatusisready. The transcript waits at/transcription.The video's state
curl 'https://app.reely.co.il/api/v1/videos/vid_8f14e45f-ceea-4e7a-9b1c-2f7a0c3d9e61' \ -H "Authorization: Bearer $REELY_API_KEY"Get the price
POST /v1/renders/estimatereturns the exact price, from the finished reel's length and the extras. Show it before going on.Estimate
curl -X POST 'https://app.reely.co.il/api/v1/renders/estimate' \ -H "Authorization: Bearer $REELY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "video_id": "vid_8f14e45f-ceea-4e7a-9b1c-2f7a0c3d9e61", "style": "karaoke", "extras": { "broll": { "on": true } } }'Render at that price
POST /v1/renderswith the estimate'sexpected_amount_agorotand anIdempotency-Key. The amount is held now, charged when the reel is done, and released if it fails. If the price changed meanwhile, nothing is charged and the answer is409 price-changedwith the new price.Render
curl -X POST 'https://app.reely.co.il/api/v1/renders' \ -H "Authorization: Bearer $REELY_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "video_id": "vid_8f14e45f-ceea-4e7a-9b1c-2f7a0c3d9e61", "expected_amount_agorot": 1320, "style": "karaoke", "hook": "שלוש טעויות שעולות לכם כסף", "extras": { "broll": { "on": true } } }'Download
Poll
GET /v1/renders/{render_id}untilstatusisdone, then downloaddownload_url./formatsmakes 4:5, 1:1, 16:9 and 4:3 for free, and/captions.srtreturns the captions.The render's state
curl 'https://app.reely.co.il/api/v1/renders/ren_c9f0f895-fb98-4b91-8f2e-6d1b7a3c4e52' \ -H "Authorization: Bearer $REELY_API_KEY"
Retries without double charges
Every call that makes something takes an Idempotency-Key: a unique string per request, such as a UUID. Rendering requires one. If the connection drops, send the same request with the same key: you get the first answer, and nothing is charged twice. The same key with a different request returns 422 idempotency-key-reused.
Errors
Every error is application/problem+json (RFC 9457): a stable type that links to its explanation, an English title, a Hebrew detail you can show your users, and a call_id to find in your call log. All errors (in Hebrew).
Rates, budgets and limits
- 120 calls a minute per key, 30 of them calls that spend. Every answer carries
RateLimit-Limit,RateLimit-RemainingandRateLimit-Reset; past the limit you get429withRetry-After. - A project has a monthly budget. You're notified at 80% and 100%, and once it's spent, calls that spend stop before anything is charged.
- A key can have a lifetime spending limit and an expiry. Rotating a key keeps the old one working for 24 hours, so you have time to switch.
Next
The reference lists every route and field (headings in Hebrew, fields in English), and openapi.json is the OpenAPI 3.1 document for generating a client.