For platforms & plugins
Build on Contentine Analyze.
Three ways in, smallest first: a deep link that opens the app with a video pre-filled, a personal API key your code calls, and — for pilot partners — webhooks and background jobs. Every call runs as the key's owner, billed and saved exactly like the app.
Availability rolls out to plans in stages — tell us what you're building.
curl -X POST 'https://analyze.contentine.ai/api/partner-v1.php?action=lens-runs' \
-H 'Authorization: Bearer ct_live_…' \
-H 'Idempotency-Key: lesson-4821' \
-H 'Content-Type: application/json' \
-d '{"video_id":"dQw4w9WgXcQ","lens_id":"presentation-coach","detail":"standard"}'Smallest
Deep links
Send a user straight into an analysis with the video (and a lens) already filled in — one link from a course page, CMS or review tool. No key, no code.
Your code
API v1 (sync)
A personal API key calls the v1 endpoints: list lenses, estimate a run, run a lens, read an analysis, list history, pull captions. Billed to the key owner.
Pilot partners
Jobs & webhooks
Background teardown jobs and signed webhooks (a POST when a run finishes) turn on for pilot accounts once the server-side worker is enabled. Ask about the pilot.
1 · Deep links
Open the app with a video ready.
Link a user to Contentine Analyze with the video pre-filled — and, optionally, a lens pre-selected and your source tag for attribution.
https://analyze.contentine.ai/app/?page=analyze&url=<video URL or ID>&lens=<lens id>&src=<your platform>
url a YouTube URL or 11-character id · lens (optional) a lens id from ?action=lenses · src (optional) a short tag we attribute the visit to. The user signs in and the run is billed to their account — a deep link never spends your credits.
2 · Personal API keys
One key, scoped, billed to you.
Create a key in the app under Account → API keys (on eligible plans). A key is shown once, stored only as a hash, and carries scopes — lenses:read, analyses:read, captions:read, lens:run. Send it as a bearer token on every request:
Authorization: Bearer ct_live_…
Requests are rate-limited per key (per-minute and per-day, set by plan). A lens:run call is billed to the key owner exactly like a lens run in the app — same price and commission, refunded automatically if the run fails — and the result is saved to that account's library.
3 · API v1 endpoints
The synchronous surface.
Base: https://analyze.contentine.ai/api/partner-v1.php?action=<action>. JSON in, JSON out. All reads are scoped to the key owner's own data.
GET lenses
lenses:read — the lens catalog (metadata only): ids, names, what each lens reads.
POST estimate
What a run would cost before you commit — the same estimate the app shows, for a given video and lens/detail.
POST lens-runs
lens:run — run one lens on a video and get the structured result. Honours Idempotency-Key (header or body): a replay returns the stored result and never re-charges.
GET analyses
analyses:read — read one of your analyses by id, with its full structured report.
GET history
analyses:read — list the key owner's recent analyses (id, title, date) to page through the library.
GET captions
captions:read — the stored transcript of an analysis as SRT or VTT, cue-for-cue identical to the app's export.
Idempotency. Put a stable Idempotency-Key on every lens-runs POST (e.g. your lesson or job id). Retrying the same key returns the first result and is never billed twice — safe to retry on a network blip.
Recipes
No-code triggers.
WP Webhooks — analyse on lesson publish. Add an outgoing webhook that fires when a lesson (or post) is published, POSTing the lesson's video to the jobs endpoint with your key in the Authorization header. When the run finishes, our webhook calls you back.
Uncanny Automator — “Run a webhook”. Use the Run a webhook action on any Automator trigger (a new enrolment, a form submit) to POST the same payload. Map the video URL field from the trigger.
Verify our callback. Each webhook we send is signed. Recompute the signature over the raw body with your key's signing secret and compare — reject anything that doesn't match, so only genuine callbacks act:
# pseudo-code — verify the signature header before trusting a callback
expected = hmac_sha256(secret, raw_request_body)
if not constant_time_equals(expected, header['X-Contentine-Signature']):
reject(401)
Jobs and webhooks are the pilot-partner surface — ask us to enable them for your account.
Honest limits
What v1 does not do yet.
Background teardown jobs — the full scene-by-scene report as an async job — turn on for pilot partners only once the server-side worker is enabled. Until then, the synchronous endpoints above are the whole API.
Unlisted or private YouTube URLs can't be fetched by id. Upload the file instead (browser- or server-direct to the analysis provider) and analyse that.
No bulk backfill of someone else's channel beyond what the app itself does; every read is scoped to the key owner's own analyses.
Data handling
Where the data goes.
Video files you send are uploaded directly to the analysis provider (from the browser or your server) and removed on the provider's short cycle; Contentine keeps the analysis output, not the file. Your analysis history is kept for the life of the account, and the YouTube metadata inside it is refreshed or removed within 30 days. Own-channel retention data (if you use the overlay) is read-only, stored encrypted, and deleted when you disconnect. We don't ask for and don't want your end users' personal or student data — send a video and, at most, your own attribution tag.
Questions people ask
Straight answers
Is the API available on my plan?
Personal API keys and the v1 endpoints are rolling out to plans in stages. If you're building an integration, contact us and we'll tell you what's available on your plan today.
Whose credits does an API call use?
The key owner's. A lens run through the API is billed exactly like a lens run in the app — same price, same commission, refunded if it fails — and it appears in that account's library.
Can I start a full teardown over the API?
Not yet. v1 covers the synchronous parts — lenses, estimates, lens runs, reading analyses, history and captions. Background teardown jobs turn on for pilot partners once the server-side worker is enabled.
How do I keep a retry from charging twice?
Send a stable Idempotency-Key on the lens-runs POST. A replay of the same key returns the first result and is never billed again.
Building an integration?
Tell us what you're making and we'll set up a key with the right scopes and limits. Not affiliated with YouTube or Google; every report is independent AI-generated analysis.
Talk to usKeep going