sync-api skill
Install this skill with npx skills add synchronicity-labs/skills --skill sync-api, or get every skill with the Claude Code plugin. See Agent skills.
What it does
sync-api helps your coding agent build sync. into your own app, backend, script or pipeline. It writes server-side code that uploads media, creates generations with idempotency keys, verifies webhooks, polls as a fallback, and handles errors and concurrency limits, using the REST API or the official Python (syncsdk) and TypeScript (@sync.so/sdk) SDKs.
When to reach for it
Try
- “Add an endpoint to my Express app that lipsyncs a video URL to an audio URL with sync.”
- “Write a Python script that dubs every video in ./in into Spanish”
- “Add a Next.js route that verifies sync. webhooks”
- “Our worker keeps getting 429 concurrency_limit_reached. What’s the right fix?”
What you need
- A sync. API key from sync.so/settings/api-keys, set as
SYNC_API_KEYon the server. See Authentication. - Python 3.8 or later, or Node 18 or later, for the SDKs.
Common questions
Why does the code save a key before calling the API?
POST /v2/generate accepts an Idempotency-Key. Created once per job and reused on every retry, it turns a retry after a timeout into a replay of the original generation instead of a second paid one. See Idempotent Requests.
Webhooks or polling?
Webhooks, verified with the Sync-Signature header, for production. A periodic poll catches deliveries your endpoint missed.
The SDK doesn't have a field the docs mention.
The SDKs can lag the API. The skill calls that endpoint over HTTP instead of forcing the types.
What should I do with a 429?
Wait the time the response gives you, retry with the same idempotency key, and keep at most your plan’s concurrency limit of jobs in flight with a queue on your side. See Concurrency & Rate Limits.
It’s working if
- The API key lives on the server, never in browser or mobile code.
- Every create carries an idempotency key that was stored before the call.
- The webhook handler checks the signature against the raw body before parsing it.

