Presentr Analyze Media Intelligence API
Podcast analysis API for transcript, captions, chapters, ad markers, show notes, and media health.
Authentication
- bearerAuth — Send
Authorization: Bearer <key>. - apiKeyAuth — Send your key in the
X-Api-Keyrequest header.
Quickstart
Analysis is asynchronous: submit a source, poll the job, then fetch the artifacts. Create an API key from your dashboard under Settings.
1. Submit
curl -X POST https://analyze.presentr.me/api/v1/podcasts/analyze \
-H "X-Api-Key: $PRESENTR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"source_url":"https://example.com/episode-42.mp3"}'
Returns 202 with a job envelope containing a uuid.
Retrying safely. Send an Idempotency-Key
header on submit. Replaying the same key with the same body returns the
original job (200, idempotent_replay: true)
instead of starting — and charging for — a second analysis. The same key
with a different body is rejected with 409. Keys are scoped
to your account. This matters for automated callers: if a submit response
is lost, retry with the same key rather than a new one.
curl -X POST https://analyze.presentr.me/api/v1/podcasts/analyze \
-H "X-Api-Key: $PRESENTR_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"source_url":"https://example.com/episode-42.mp3"}'
2. Poll
curl https://analyze.presentr.me/api/v1/jobs/$JOB_UUID \
-H "X-Api-Key: $PRESENTR_API_KEY"
Poll until status reaches a terminal state. Analysis of a
typical episode takes several minutes, so poll on an interval rather than
in a tight loop.
3. Retrieve
curl https://analyze.presentr.me/api/v1/jobs/$JOB_UUID/artifacts \
-H "X-Api-Key: $PRESENTR_API_KEY"
Returns signed URLs for the generated artifacts — transcript, captions, chapters, ad markers, show notes and media health. The URLs are time-limited; fetch them promptly rather than storing them.
Usage and limits
curl https://analyze.presentr.me/api/v1/usage -H "X-Api-Key: $PRESENTR_API_KEY"
Each analysis consumes quota against your plan. Check
/api/v1/usage before submitting work on someone's behalf, and
surface the cost to them — an agent should not spend a user's balance
without telling them.
Endpoints
POST /api/v1/podcasts/analyze
Create podcast analysis job
Request body: PodcastAnalyzeRequest
Responses:
202— Queued422— Validation failed
GET /api/v1/jobs/{uuid}
Get job status
Responses:
200— Job status404— Job missing or expired
GET /api/v1/jobs/{uuid}/artifacts
Get signed artifact URLs
Responses:
200— Artifacts list
GET /api/v1/me
Verify authentication context
Responses:
200— Authenticated context
GET /api/v1/usage
Current-period usage
Responses:
200— Usage summary
Schemas
PodcastAnalyzeRequest
source_urlstring (required)optionsobject
JobEnvelope
jobobject
Artifact
typestringfilenamestringurlstringexpires_atstringcontent_typestring
PodcastAnalysisResult
typestringduration_secintegerlanguagestringtranscript_summarystringad_markersarraychaptersarraymedia_healthobject
ErrorResponse
errorobject