{"openapi":"3.1.0","info":{"title":"Remerged API","version":"1","description":"Make AI video from code, priced at cost: quote a job, make it, poll it, download it. 1 credit is 1 US cent. A job is charged when it is made, settled down to what it actually cost, and refunded in full if it fails. Keys are made on the account page. Guide: https://remerged.ai/developers."},"servers":[{"url":"https://remerged.ai/api/v1"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"An API key, rm_live_…, with the read and/or generate scope."}},"schemas":{"JobBody":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"maxLength":4000},"model":{"default":"seedance-2.5","type":"string","enum":["seedance-2.5","seedance-2.0","seedance-2.0-fast","seedance-2.0-mini","minimax-h3","ltx-2.5","wan-2.6"]},"durationS":{"type":"integer","minimum":4,"maximum":30},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:3","3:4","21:9","adaptive"]},"audio":{"default":true,"type":"boolean"},"mode":{"type":"string","description":"Render quality and optional upscale, e.g. 720p, 1080p or 480p-1080p (see /models). Omitted: the model's default."},"images":{"default":[],"maxItems":33,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^(uploads\\/[^/]+\\/[^/]+|character:[0-9a-f-]{36}|preset:asset-\\d{14}-[a-z0-9]{5})$"},"role":{"default":"reference","type":"string","enum":["reference","first_frame","last_frame","reference_video","reference_audio","upscale_source","character","costume"]},"seconds":{"type":"number","exclusiveMinimum":0,"maximum":3600},"tail":{"type":"boolean"}},"required":["key"]}},"seed":{"type":"integer","minimum":0,"maximum":2147483647},"cameraFixed":{"default":false,"type":"boolean"},"negativePrompt":{"type":"string","maxLength":500},"promptExpansion":{"type":"boolean"},"draft":{"type":"boolean"},"variations":{"default":1,"type":"integer","minimum":1,"maximum":4},"upscaleOnly":{"default":false,"type":"boolean"},"sourceDurationS":{"type":"number","exclusiveMinimum":0,"maximum":1200},"image_urls":{"default":[],"maxItems":30,"type":"array","items":{"anyOf":[{"type":"string"},{"type":"object","properties":{"url":{"type":"string"},"role":{"default":"reference","type":"string","enum":["reference","first_frame","last_frame"]}},"required":["url"]}]}},"webhook_url":{"type":"string","maxLength":2000}},"required":["prompt","durationS","aspect"]},"Job":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["queued","generating","upscaling","ready","failed"]},"kind":{"type":"string","description":"generate, upscale, extend or finish."},"prompt":{"type":"string"},"model":{"type":"string"},"mode":{"type":"string","description":"Render quality and any upscale, e.g. 720p or 480p-1080p."},"duration_s":{"type":"number"},"aspect":{"type":"string"},"quote_credits":{"type":"integer","description":"Credits charged for this job (1 credit = 1 US cent). Settled down to the actual cost; refunded in full on failure."},"video_url":{"type":["string","null"],"description":"Once ready: a link good for one hour. Ask again for a fresh one."},"poster_url":{"type":["string","null"]},"error":{"type":["string","null"],"description":"On failure, the sentence to show."},"failure":{"type":["object","null"],"properties":{"code":{"type":"string"},"retry":{"type":"string","enum":["change","later","now"]},"real_person":{"type":["string","null"]}}},"draft":{"type":"boolean"},"finish_by":{"type":["string","null"],"description":"A draft's last day to be finished at 1080p."},"created_at":{"type":"integer","description":"Epoch milliseconds."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}},"paths":{"/models":{"get":{"operationId":"listModels","summary":"Every model on sale: what it takes, its limits, and your price for five seconds.","responses":{"200":{"description":"The catalogue.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"No key, or not a valid one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}}}}},"/quote":{"post":{"operationId":"quote","summary":"What a job body would cost you, without making it. Read scope.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobBody"}}}},"responses":{"200":{"description":"The price.","content":{"application/json":{"schema":{"type":"object","properties":{"credits":{"type":"integer"},"usd":{"type":"number"},"per_video_credits":{"type":"integer"}}}}}},"400":{"description":"The request was refused; nothing was charged.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"401":{"description":"No key, or not a valid one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}}}}},"/jobs":{"post":{"operationId":"createJob","summary":"Make a video. Charged when made; refunded in full if it fails. Generate scope.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobBody"}}}},"responses":{"201":{"description":"Made; poll each id. credits is the total charged now.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"ids":{"type":"array","items":{"type":"string"}},"credits":{"type":"integer"}}}}}},"400":{"description":"The request was refused; nothing was charged.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"401":{"description":"No key, or not a valid one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"402":{"description":"Not enough credits (with topup_url).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"403":{"description":"The key lacks the scope, or the account is deactivated or frozen.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"429":{"description":"Over 60 requests a minute, or too many jobs in flight.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}}}},"get":{"operationId":"listJobs","summary":"Your recent jobs, newest first.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"Jobs.","content":{"application/json":{"schema":{"type":"object","properties":{"jobs":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}}}}}},"401":{"description":"No key, or not a valid one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}}}}},"/jobs/{id}":{"get":{"operationId":"getJob","summary":"A job's status, and once ready a video URL good for an hour.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The job.","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}}}}}},"401":{"description":"No key, or not a valid one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"404":{"description":"No such job on this account.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}}}}},"/jobs/{id}/finish":{"post":{"operationId":"finishDraft","summary":"Finish a Seedance 2.5 draft at 1080p: the same take, within seven days. Generate scope.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"},"webhook_url":{"type":"string"}}}}}},"responses":{"201":{"description":"The finishing job.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"The request was refused; nothing was charged.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"401":{"description":"No key, or not a valid one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"402":{"description":"Not enough credits (with topup_url).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"403":{"description":"The key lacks the scope, or the account is deactivated or frozen.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"429":{"description":"Over 60 requests a minute, or too many jobs in flight.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}}}}},"/uploads":{"post":{"operationId":"createUpload","summary":"A presigned PUT for an input file. PUT the bytes, then pass key in images[]. Generate scope.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["content_type","bytes"],"properties":{"content_type":{"type":"string","enum":["image/jpeg","image/png","image/webp","video/mp4","video/quicktime","audio/mpeg","audio/wav"]},"bytes":{"type":"integer","minimum":1}}}}}},"responses":{"200":{"description":"Where to PUT.","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"url":{"type":"string"},"method":{"type":"string"},"max_bytes":{"type":"integer"}}}}}},"400":{"description":"The request was refused; nothing was charged.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"401":{"description":"No key, or not a valid one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"402":{"description":"Not enough credits (with topup_url).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"403":{"description":"The key lacks the scope, or the account is deactivated or frozen.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}},"429":{"description":"Over 60 requests a minute, or too many jobs in flight.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}}}}},"/account":{"get":{"operationId":"getAccount","summary":"Balance, plan, limits and where to add credits.","responses":{"200":{"description":"The account.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"No key, or not a valid one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code, e.g. insufficient_credits, invalid, image_fetch, rate_limited."},"message":{"type":"string","description":"A sentence to show a person."},"topup_url":{"type":"string","description":"On 402 insufficient_credits: where the account holder adds credits."}}}}}}}}}}}