Character Swap API
Regenerate
POST /v1/character-swap/{id}/regenerate — re-run a swap from its stored source
Endpoint
POST /v1/character-swap/{id}/regenerateRe-runs the swap from the stored source. The original link is never re-downloaded — social CDN URLs die within hours, and the mirrored copy does not.
curl -s -X POST "https://api.goodtake.ai/v1/character-swap/$ID/regenerate" \
-H "Authorization: Bearer $GOODTAKE_API_KEY" | jq .Response — 202 Accepted
Same job envelope as create, except estimated_cost is exact — the stored
source's duration is already known:
{
"id": "1f7b2c40-8e55-4b21-9f03-77a1d0c4e902",
"status": "pending",
"character_id": "9d2f6a3e-4c11-4a90-b1d7-2f8e6a4c0b11",
"model": "dreamina-seedance-2-5-260628",
"estimated_cost": 542,
"with_audio": true,
"resolution": "1080p",
"poll_url": "/public/v1/character-swap/1f7b2c40-8e55-4b21-9f03-77a1d0c4e902"
}A regenerate is billed as a new generation at the same rate as the original run.
Unlike create, this endpoint is synchronous about its failure modes — the
interesting ones are real status codes rather than a polled failed state.
Errors
| Status | Meaning |
|---|---|
401 | Missing or invalid API key |
402 | Insufficient credits |
404 | Unknown swap id, or one belonging to another organization |
409 | A run for this swap is already open. Enforced by the database, never by a read-then-write check, so two concurrent regenerates can never both bill you. |
422 | The stored source is unusable (ingest failed, or the source or character sheet was rejected by the content-safety filter) — create a new swap |