Transcribe audio and video, then read, analyse and query it programmatically.
Authentication: send an API key as `Authorization: Bearer am_live_...`.
Create one at https://audiomap.ai/dashboard/api-keys. The key is shown once.
A session JWT is NOT accepted here; only API keys.
Plan: the REST API is included from the Pro plan up. Calls from a lower plan
answer 403 `tier_upgrade_required` with the plan you need in `requiredTier`.
content
Transcript, analysis and outline of a note
GET /v1/notes/{id}/transcript
Transcript with segments, speakers and word timings
`format=json` (default) returns structured segments with per-word timings when the provider emits them. The other formats are the same exporters the web app uses and come back as text with their own content type.
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
format | query | string (json | txt | srt | vtt | md) | |
translation | query | string (es | en | de | fr | it | pt) | Include an already generated translation in this language. In json every segment gets `translation`; in text formats see `translationMode`. |
translationMode | query | string (translation | both) | `translation`: the transcript comes out translated. `both`: original with its translation under every segment. |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | The transcript | Transcript | |
400 | Unknown format | Error | {"error":"invalid_format"} |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
402 | Not enough credits | Error | {"error":"insufficient_credits"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | Note not found, or it has no transcript yet | Error | {"error":"no_transcript"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
GET /v1/notes/{id}/transcript/translation
State and segments of the transcript translation
Segment-aligned translation (same `sequence` as the transcript). `status` is none, pending, running, ready or failed; `stale` means the transcript changed after translating and some segments are missing again. Free.
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
language | query | string (es | en | de | fr | it | pt) | Target language; defaults to the user language. |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | The translation state | object | |
400 | Unknown language | Error | {"error":"invalid_language"} |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | Note not found, or it has no transcript yet | Error | {"error":"no_transcript"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
POST /v1/notes/{id}/transcript/translation
Translate the transcript into a language
Queues the translation and returns 202 with its progress (poll the GET), or 200 if it is already done. Costs 0 credits the first time per note and language; completing or repeating it is free. The analysis (AI notes, outline) is already written in the user language.
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
Cuerpo de la petición
| Campo | Tipo | Descripción |
|---|
language | string (es | en | de | fr | it | pt) | |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | Already translated | object | |
202 | Queued or running | object | |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
402 | Not enough credits | Error | {"error":"insufficient_credits"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | Note not found, or it has no transcript yet | Error | {"error":"no_transcript"} |
409 | The audio is already in that language | Error | {"error":"same_language"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
GET /v1/notes/{id}/analysis
Read the generated analyses of a note
Every element carries its anchor: `anchors.keyPoints[i]` is the millisecond at which `keyPoints[i]` is said, or null when the model could not place it.
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
template | query | string (generic | sales | legal | medical | journalism | education | customer_success | meeting_minutes | consulting | coaching | therapy | podcast | university_class | debate) | |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | The analyses persisted for this note | AnalysisList | |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | Note not found, or that template has not been generated | Error | {"error":"analysis_not_generated","template":"sales"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
POST /v1/notes/{id}/analysis
Generate or regenerate an analysis template
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
Cuerpo de la petición obligatorio
| Campo | Tipo | Descripción |
|---|
template | string (generic | sales | legal | medical | journalism | education | customer_success | meeting_minutes | consulting | coaching | therapy | podcast | university_class | debate) | |
templates | array<string (generic | sales | legal | medical | journalism | education | customer_success | meeting_minutes | consulting | coaching | therapy | podcast | university_class | debate)> | |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | Generated; `report` lists which templates failed, if any | AnalysisList | |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
402 | Not enough credits, or the template needs a paid plan | Error | {"error":"upgrade_required"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | No note with that id belongs to you | Error | {"error":"not_found"} |
409 | The note is not ready, or has no transcript | Error | {"error":"note_not_ready"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
502 | Every requested template failed; credits were refunded | Error | {"error":"llm_invalid_json"} |
GET /v1/notes/{id}/outline
Chapters of the note with timestamps
Reading is free. `?generate=1` on a note that has no outline generates one and charges credits.
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
generate | query | string (0 | 1) | |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | The outline; empty array when there is none | Outline | |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
402 | Not enough credits to generate it | Error | {"error":"insufficient_credits"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | No note with that id belongs to you | Error | {"error":"not_found"} |
409 | The note is not ready | Error | {"error":"note_not_ready"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
GET /v1/notes/{id}/speakers
Speakers of the note with their names
`name` is the name in use: the one the user gave, or one inferred from what is said and from the source when its confidence is high enough (`nameStatus: suggested`). `suggestedName`, `suggestedNameConfidence` and `evidence` show the inference even when it is below that threshold. Free.
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | The speakers | SpeakerList | |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | No note with that id belongs to you | Error | {"error":"not_found"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
POST /v1/notes/{id}/speakers/suggest
Infer the speaker names from content and metadata
Reads who addresses whom ("Euge, ¿tú cómo lo ves?"), self-introductions, the title, the channel or show and the people the user already confirmed on that source. No voice analysis. Never overwrites a name the user gave. Free; 10 per hour.
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | The speakers after the inference | SpeakerList | |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | No note with that id belongs to you | Error | {"error":"not_found"} |
409 | The note is not ready | Error | {"error":"note_not_ready"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
502 | The inference failed; nothing changed | Error | {"error":"speaker_naming_failed"} |
PATCH /v1/notes/{id}/speakers/{label}
Name a speaker, or confirm its suggested name
The name is used in the transcript, the timeline and the exports, and remembered for the next notes of the same channel or podcast. Free.
Parámetros
| Nombre | Dónde | Tipo | Descripción |
|---|
id obligatorio | path | string (uuid) | |
label obligatorio | path | string | A, B, C… as the diarizer assigned them |
Cuerpo de la petición obligatorio
| Campo | Tipo | Descripción |
|---|
name obligatorio | string | |
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | The speakers after the change | SpeakerList | |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | No note with that id belongs to you | Error | {"error":"not_found"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
GET /v1/voice-profiles
Voice profiles of the user and the state of the biometric consent
People recognised by voice across the user's OWN recordings, only with the explicit biometric consent the person gives in the app or the web (an API key cannot grant it). Never returns the voice vectors. With consent, a voice that sounds like a profile appears as a suggested speaker name with `voice` evidence. Free.
Respuestas
| Código | Significado | Cuerpo | Ejemplo |
|---|
200 | Consent state and profiles | object | |
401 | Missing or invalid API key | Error | {"error":"invalid_api_key"} |
403 | Your plan does not include the REST API | Error | {"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"} |
404 | No note with that id belongs to you | Error | {"error":"not_found"} |
429 | Too many requests for this API key | Error | {"error":"rate_limit_exceeded","retryAfter":60} |
Esta página se genera en el servidor a partir del mismo documento que sirve
/v1/openapi.json, así que no puede quedarse desfasada respecto al contrato.