Embed the full Atomiser pipeline, transcription, subtitles, clips, reframing, dubbing, TTS and audio enhancement, inside your own product. Fully white-label: your users never see us.
Free sandbox: 500 test credits, 30 days, no card. In production with platform partners today.
Hosting platforms, directories, and networks. Give every creator on your platform automatic clips, transcripts, and show notes the moment they publish.
Editors, DAMs, and content suites. Embed transcription, dubbing, captions, and reframing behind your own UI instead of building an AI pipeline.
High-volume repurposing pipelines: long-form in, clips + captions + posts out, metered per job and billed on one invoice.
Fill the form below. A human (not a bot) replies within one business day. We'll scope which tools fit and sanity-check volume.
You get an at_test_ key with 500 test credits for 30 days. The full production pipeline, no card, no commitment. Integrate end-to-end, then evaluate output quality yourself.
Switch to an at_live_ key scoped to your tools. Per-tool, per-unit pricing agreed up front, monthly invoicing, no seat fees. You pay for jobs that complete, never for failures.
Sales-led onboarding. Tell us about your platform and we'll get you a sandbox key.
POST a media URL (or text for TTS) with the tool you want. You get a job ID back instantly, processing is async.
Your job runs on the same production pipeline that powers Atomiser. We notify your webhook_url when done, or poll the job.
Completed jobs return a signed result URL (24h expiry) plus structured data like transcripts, clip metadata, and credits charged.
Every request carries your API key as a Bearer token. Keys are scoped to an environment and to a specific set of tools, test keys (at_test_…) and live keys (at_live_…) are fully separated.
curl https://api.atomiser.ai/v1/tools \
-H "Authorization: Bearer at_test_xxxxxxxxxxxxxxxx"Keys are shown once at creation. Store them server-side only, never in client code.
Create a transcription job:
curl -X POST https://api.atomiser.ai/v1/jobs \
-H "Authorization: Bearer $ATOMISER_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: episode-42-transcribe" \
-d '{
"tool": "transcription",
"input_url": "https://cdn.you.com/episode-42.mp3",
"options": { "language": "auto" },
"end_user_ref": "user_4821",
"webhook_url": "https://api.you.com/hooks/atomiser"
}'{
"job": {
"id": "job_9f2k...",
"tool": "transcription",
"status": "queued",
"created_at": "2026-09-26T10:15:00Z",
"credits_charged": null,
"result": null
}
}Then poll (or wait for your webhook):
curl https://api.atomiser.ai/v1/jobs/job_9f2k... \
-H "Authorization: Bearer $ATOMISER_API_KEY"
# → { "job": { "status": "completed",
# "units": 42.5, "unit": "minute", "credits_charged": 47,
# "result": { "url": "https://…signed-24h…", "data": { "text": "…" } } } }Full details: webhook payload + verification, idempotency semantics, per-tool result shapes, billing rules: integration guide · OpenAPI spec · API Terms
| Method | Path | Description |
|---|---|---|
| GET | /v1/tools | Your key’s enabled tools + rate card |
| POST | /v1/jobs | Create an async processing job |
| GET | /v1/jobs/:id | Job status + signed result URL |
| GET | /v1/jobs | List / search jobs (filters + pagination) |
| POST | /v1/jobs/:id/cancel | Cancel a queued/running job, never billed |
| POST | /v1/jobs/:id/retry | Retry a failed/cancelled job, returns a new job |
| GET | /v1/api-usage | Metering: totals, per-tool, per-end-user |
| GET | /v1/voices | TTS voice catalogue |
Each API key is enabled for a specific toolset. Per-tool rates are set on your rate card during onboarding, GET /v1/tools always returns the live rates for your key.
Accurate transcripts with word-level timestamps
billed per media minute
Burned-in animated captions (14 styles, 20+ languages)
billed per media minute
AI-extracted short clips with virality scoring
billed per media minute
Auto-reframe to 9:16 / 1:1 / 4:5 with speaker tracking
billed per media minute
Studio-quality cleanup: noise, level, clarity
billed per media minute
Format conversion (mp3, wav, aac, ogg, mp4, …)
billed per media minute
Voice-preserved dubbing into 30+ languages
billed per output minute
Natural narration from text, 40+ voices
billed per 1k characters
Transcript into posts, threads, blogs, show notes
billed per generated asset
Podcast/YouTube name ideas with live availability checks
billed per request
SEO-structured show/episode descriptions
billed per request
Schedule/publish to users’ connected social accounts
billed per destination
Pass webhook_url on job creation and we POST a signed callback on job.completed / job.failed / job.cancelled. Verify the X-Signature header (HMAC-SHA256 of the raw body, hex-encoded) with your webhook secret. Retries use exponential backoff.
const crypto = require('crypto');
function verify(rawBody, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}Send an Idempotency-Key header. Retries within 24h return the same job, safe to retry on timeouts.
Redis-backed limits per key. X-RateLimit-Remaining / X-RateLimit-Reset headers on every response.
GET /v1/api-usage breaks credits down per tool and per end_user_ref, reconcile against your own plans.
| Code | HTTP | Resolution |
|---|---|---|
| unauthorized | 401 | Missing, invalid, or revoked API key, check the Bearer header. |
| unknown_tool / invalid_input / invalid_options | 400 | Request body issue, see the message field; it names the missing field. |
| tool_not_allowed | 403 | Tool not enabled on this key, ask us to extend the scope. |
| job_not_found | 404 | Bad job id, or the job belongs to a different organization. |
| job_not_cancellable / job_not_retryable | 409 | Job is already terminal or past the point of cancellation. |
| rate_limit_exceeded | 429 | Respect Retry-After; watch X-RateLimit-* headers on every response. |
Your at_test_ key runs the same production pipeline against a separate test credit pool, onboarding includes a complimentary allocation so you can integrate end-to-end before switching to at_live_. Failed and cancelled jobs are never billed.
Yes. Generate a presigned GET URL on your side (S3, GCS, R2, CloudFront, all work) and pass it as input_url. We never see your storage credentials.
Call POST /v1/jobs/:id/cancel, the job is marked cancelled, never billed, and a job.cancelled webhook confirms it.
No expiry trap, every GET /v1/jobs/:id returns a freshly signed URL valid for 24h. Download and re-host for long-term storage.
Failed and cancelled jobs are never billed, no usage event is recorded, and any credits the pipeline already deducted are refunded automatically. You only pay the API rate on completed jobs.
Almost anything public: YouTube/Vimeo/Rumble/X/TikTok links, direct media files (mp4, mp3, wav, mov, ogg…), and presigned S3/GCS/R2/CDN URLs. Private or internal-network hosts are rejected for security.
Pass your internal user ID as end_user_ref on every job, then read GET /v1/api-usage, the by_end_user breakdown tells you exactly what each of your users consumed. We meter; you bill them however you like.
Yes. A machine-readable OpenAPI 3.0 spec at atomiser.ai/partner-api.openapi.yaml (import into Postman or generate a typed client with openapi-generator) and a full integration guide at atomiser.ai/partner-api-guide.md covering webhooks, idempotency, billing rules, and every tool's result shape.
Result URLs, errors, and metadata never expose Atomiser or upstream provider names. Your end users see your product; the entire AI supply chain stays invisible.