{"openapi":"3.1.0","info":{"title":"AudioMap API","version":"1.0.0","description":"Transcribe audio and video, then read, analyse and query it programmatically.\n\nAuthentication: send an API key as `Authorization: Bearer am_live_...`.\nCreate one at https://audiomap.ai/dashboard/api-keys. The key is shown once.\nA session JWT is NOT accepted here; only API keys.\n\nPlan: the REST API is included from the Pro plan up. Calls from a lower plan\nanswer 403 `tier_upgrade_required` with the plan you need in `requiredTier`.\n\nCredits: writing operations spend monthly credits from the same balance as the\nMCP server. If an operation fails after being charged, the credits are refunded.\nRead `GET /v1/openapi.json` `x-audiomap-credits` for the current prices.\n\nThere is also an MCP server at POST /mcp/stream with the same capabilities,\nfor clients that speak Model Context Protocol. See GET /mcp/info.","contact":{"name":"AudioMap","url":"https://audiomap.ai/developers"}},"servers":[{"url":"https://api.audiomap.ai"}],"security":[{"apiKey":[]}],"x-audiomap-credits":{"description":"Credit cost per operation. Read operations are free unless listed here.","costs":{"POST /v1/notes (audioUrl)":50,"GET /v1/notes/{id}/transcript":1,"POST /v1/notes/{id}/analysis":"100 per template","GET /v1/notes/{id}/outline?generate=1":50,"POST /v1/notes/{id}/ask":10,"POST /v1/notes/{id}/transcript/translation":"0 the first time per note and language","POST /v1/ask":10,"POST /v1/notes/{id}/deliverables":300},"monthlyByPlan":{"free":200,"personal":1000,"pro":5000,"power":25000,"team":5000}},"tags":[{"name":"notes","description":"Create and browse notes"},{"name":"content","description":"Transcript, analysis and outline of a note"},{"name":"ask","description":"Ask questions over one note or the whole library"},{"name":"deliverables","description":"Generate emails, documents and slide decks from a note"}],"paths":{"/v1/notes":{"post":{"tags":["notes"],"operationId":"createNote","summary":"Import from a public link, or open a direct upload","description":"Two mutually exclusive shapes:\n- `audioUrl`: import a YouTube video, a podcast (RSS feed or Apple Podcasts page)\n  or a direct audio/video file URL. Spotify is not supported (DRM).\n- `filename` + `contentType`: open a direct upload. The response carries a\n  presigned `upload.url`; PUT the bytes there and then call\n  `POST /v1/notes/{id}/finalize`.\n\nTranscription is asynchronous: poll `GET /v1/notes/{id}` until `status` is \"ready\".","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"202":{"description":"Note created and queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteResponse"}}}},"400":{"description":"Malformed body, or a link we cannot ingest","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_audio_url"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Not enough credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"insufficient_credits","balance":10,"required":50}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"413":{"description":"File larger than the plan allows, or storage quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"file_too_large"}}}},"415":{"description":"Content type that is neither audio/* nor video/*","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"unsupported_media_type"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}},"get":{"tags":["notes"],"operationId":"listNotes","summary":"List notes, newest first","description":"Cursor pagination: pass the `nextCursor` of a response as `cursor` to get the next page. `hasMore` says whether there is one.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string","format":"uuid"},"description":"nextCursor from the previous page"},{"name":"q","in":"query","schema":{"type":"string","maxLength":200},"description":"Free text over title, description and transcript"},{"name":"folderId","in":"query","schema":{"type":"string"},"description":"Folder UUID, or the literal \"null\" for notes with no folder"},{"name":"status","in":"query","schema":{"type":"string","enum":["processing","ready","failed"]}},{"name":"since","in":"query","schema":{"type":"string","format":"date-time"},"description":"Only notes created at or after this instant"},{"name":"tags","in":"query","schema":{"type":"string"},"description":"Comma separated; returns notes carrying ALL of them"},{"name":"origin","in":"query","schema":{"type":"string"},"description":"Comma separated origins to keep: youtube, podcast, link, video, audio, recording. An unknown value is a 400"}],"responses":{"200":{"description":"A page of notes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteList"}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_query"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/notes/{id}":{"get":{"tags":["notes"],"operationId":"getNote","summary":"Get one note with its full text, analyses and outline","parameters":[{"$ref":"#/components/parameters/NoteId"}],"responses":{"200":{"description":"The note","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteDetail"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/notes/{id}/finalize":{"post":{"tags":["notes"],"operationId":"finalizeUpload","summary":"Close a direct upload and start processing","description":"Call it after PUTting the bytes to the presigned `upload.url`.","parameters":[{"$ref":"#/components/parameters/NoteId"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","maxLength":200}}}}}},"responses":{"202":{"description":"Upload accepted, processing queued","content":{"application/json":{"schema":{"type":"object","properties":{"noteId":{"type":"string","format":"uuid"},"jobId":{"type":"string"},"status":{"type":"string","enum":["processing"]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Monthly minute quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"quota_exceeded","remaining":3,"needed":12}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"The note is not waiting for an upload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_state","current":"ready"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/notes/{id}/transcript":{"get":{"tags":["content"],"operationId":"getTranscript","summary":"Transcript with segments, speakers and word timings","description":"`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.","parameters":[{"$ref":"#/components/parameters/NoteId"},{"name":"format","in":"query","schema":{"type":"string","enum":["json","txt","srt","vtt","md"],"default":"json"}},{"name":"translation","in":"query","description":"Include an already generated translation in this language. In json every segment gets `translation`; in text formats see `translationMode`.","schema":{"type":"string","enum":["es","en","de","fr","it","pt"]}},{"name":"translationMode","in":"query","description":"`translation`: the transcript comes out translated. `both`: original with its translation under every segment.","schema":{"type":"string","enum":["translation","both"],"default":"both"}}],"responses":{"200":{"description":"The transcript","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transcript"}},"text/plain":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"}},"application/x-subrip":{"schema":{"type":"string"}},"text/vtt":{"schema":{"type":"string"}}}},"400":{"description":"Unknown format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_format"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Not enough credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"insufficient_credits"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Note not found, or it has no transcript yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"no_transcript"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/notes/{id}/transcript/translation":{"get":{"tags":["content"],"operationId":"getTranscriptTranslation","summary":"State and segments of the transcript translation","description":"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.","parameters":[{"$ref":"#/components/parameters/NoteId"},{"name":"language","in":"query","description":"Target language; defaults to the user language.","schema":{"type":"string","enum":["es","en","de","fr","it","pt"]}}],"responses":{"200":{"description":"The translation state","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Unknown language","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_language"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Note not found, or it has no transcript yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"no_transcript"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["content"],"operationId":"translateTranscript","summary":"Translate the transcript into a language","description":"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.","parameters":[{"$ref":"#/components/parameters/NoteId"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"language":{"type":"string","enum":["es","en","de","fr","it","pt"]}}}}}},"responses":{"200":{"description":"Already translated","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Queued or running","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Not enough credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"insufficient_credits"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Note not found, or it has no transcript yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"no_transcript"}}}},"409":{"description":"The audio is already in that language","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"same_language"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/notes/{id}/analysis":{"get":{"tags":["content"],"operationId":"getAnalysis","summary":"Read the generated analyses of a note","description":"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.","parameters":[{"$ref":"#/components/parameters/NoteId"},{"name":"template","in":"query","schema":{"type":"string","enum":["generic","sales","legal","medical","journalism","education","customer_success","meeting_minutes","consulting","coaching","therapy","podcast","university_class","debate"]}}],"responses":{"200":{"description":"The analyses persisted for this note","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisList"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Note not found, or that template has not been generated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"analysis_not_generated","template":"sales"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["content"],"operationId":"generateAnalysis","summary":"Generate or regenerate an analysis template","parameters":[{"$ref":"#/components/parameters/NoteId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"template":{"type":"string","enum":["generic","sales","legal","medical","journalism","education","customer_success","meeting_minutes","consulting","coaching","therapy","podcast","university_class","debate"]},"templates":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"string","enum":["generic","sales","legal","medical","journalism","education","customer_success","meeting_minutes","consulting","coaching","therapy","podcast","university_class","debate"]}}}}}}},"responses":{"200":{"description":"Generated; `report` lists which templates failed, if any","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisList"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Not enough credits, or the template needs a paid plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"upgrade_required"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"The note is not ready, or has no transcript","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"note_not_ready"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"502":{"description":"Every requested template failed; credits were refunded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"llm_invalid_json"}}}}}}},"/v1/notes/{id}/outline":{"get":{"tags":["content"],"operationId":"getOutline","summary":"Chapters of the note with timestamps","description":"Reading is free. `?generate=1` on a note that has no outline generates one and charges credits.","parameters":[{"$ref":"#/components/parameters/NoteId"},{"name":"generate","in":"query","schema":{"type":"string","enum":["0","1"]}}],"responses":{"200":{"description":"The outline; empty array when there is none","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outline"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Not enough credits to generate it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"insufficient_credits"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"The note is not ready","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"note_not_ready"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/notes/{id}/speakers":{"get":{"tags":["content"],"operationId":"getSpeakers","summary":"Speakers of the note with their names","description":"`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.","parameters":[{"$ref":"#/components/parameters/NoteId"}],"responses":{"200":{"description":"The speakers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeakerList"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/notes/{id}/speakers/suggest":{"post":{"tags":["content"],"operationId":"suggestSpeakerNames","summary":"Infer the speaker names from content and metadata","description":"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.","parameters":[{"$ref":"#/components/parameters/NoteId"}],"responses":{"200":{"description":"The speakers after the inference","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeakerList"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"The note is not ready","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"note_not_ready"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"502":{"description":"The inference failed; nothing changed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"speaker_naming_failed"}}}}}}},"/v1/notes/{id}/speakers/{label}":{"patch":{"tags":["content"],"operationId":"renameSpeaker","summary":"Name a speaker, or confirm its suggested name","description":"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.","parameters":[{"$ref":"#/components/parameters/NoteId"},{"name":"label","in":"path","required":true,"schema":{"type":"string"},"description":"A, B, C… as the diarizer assigned them"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":120}}}}}},"responses":{"200":{"description":"The speakers after the change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeakerList"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/voice-profiles":{"get":{"tags":["content"],"operationId":"listVoiceProfiles","summary":"Voice profiles of the user and the state of the biometric consent","description":"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.","responses":{"200":{"description":"Consent state and profiles","content":{"application/json":{"schema":{"type":"object","properties":{"consent":{"type":"object","properties":{"status":{"type":"string","enum":["granted","revoked","never","outdated"],"description":"`outdated`: granted under an older consent text; it must be accepted again in the app or the web and nothing is analysed meanwhile"},"grantedAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}}},"profiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"confirmedAppearances":{"type":"integer"},"voiceSeconds":{"type":"number"},"hasVoiceprint":{"type":"boolean"},"voiceExcluded":{"type":"boolean","description":"The owner chose \"do not recognise this person\": the profile keeps only its name and is never analysed nor matched"}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/notes/{id}/ask":{"post":{"tags":["ask"],"operationId":"askNote","summary":"Ask a question about one note","description":"The answer quotes the audio as [mm:ss]; `citedSegments` carries the transcript segment ids the retrieval used.","parameters":[{"$ref":"#/components/parameters/NoteId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","minLength":1,"maxLength":4000}}}}}},"responses":{"200":{"description":"The answer with its citations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Not enough credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"insufficient_credits"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"The note is not ready","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"note_not_ready"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"502":{"description":"The model did not answer; credits were refunded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"chat_failed"}}}}}}},"/v1/ask":{"post":{"tags":["ask"],"operationId":"askLibrary","summary":"Ask a question across every note you own","description":"Answers cite [Note title | mm:ss]. Pass the returned `sessionId` back to continue the same conversation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","minLength":1,"maxLength":4000},"sessionId":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"The answer with the notes it came from","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalAnswer"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Not enough credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"insufficient_credits"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"502":{"description":"The model did not answer; credits were refunded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"chat_failed"}}}}}}},"/v1/notes/{noteId}/deliverables":{"post":{"tags":["deliverables"],"operationId":"generateDeliverable","summary":"Write a document from the note","description":"Turns a note into a finished piece of writing: a follow-up email, a meeting record, a slide deck. This is what \"draft me something out of what I imported\" maps to.","parameters":[{"name":"noteId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["kind","template","locale"],"properties":{"kind":{"type":"string","enum":["email","document","slides"]},"template":{"type":"string","description":"Valid values depend on `kind`; see x-audiomap-deliverable-templates."},"locale":{"type":"string","enum":["es","en"]}}}}}},"responses":{"201":{"description":"The generated deliverable","content":{"application/json":{"schema":{"type":"object","properties":{"deliverable":{"type":"object"}}}}}},"400":{"description":"Unknown kind, template or locale","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_template"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Not enough credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"insufficient_credits"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}},"get":{"tags":["deliverables"],"operationId":"listDeliverables","summary":"List the deliverables generated for a note","parameters":[{"name":"noteId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The list","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"x-audiomap-deliverable-templates":{"email":["follow_up","recap","next_steps","thank_you"],"document":["project_brief","meeting_recap","fiscal_revision","legal_acta","medical_consult"],"slides":["exec_summary","kickoff","recap_visual","sales_pitch_es"]},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"An AudioMap API key: `Authorization: Bearer am_live_...`"}},"parameters":{"NoteId":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}},"responses":{"Unauthorized":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"invalid_api_key"}}}},"Forbidden":{"description":"Your plan does not include the REST API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"tier_upgrade_required","currentTier":"personal","requiredTier":"pro"}}}},"NotFound":{"description":"No note with that id belongs to you","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"not_found"}}}},"RateLimited":{"description":"Too many requests for this API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"rate_limit_exceeded","retryAfter":60}}}}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Stable machine-readable code"},"message":{"type":"string","description":"Human-readable explanation"}},"additionalProperties":true},"CreateNoteRequest":{"type":"object","properties":{"audioUrl":{"type":"string","format":"uri","maxLength":2000,"description":"Public link to import"},"filename":{"type":"string","maxLength":255,"description":"Direct upload: original file name"},"contentType":{"type":"string","maxLength":100,"description":"Direct upload: audio/* or video/*"},"fileSizeBytes":{"type":"integer","minimum":1},"title":{"type":"string","maxLength":200},"language":{"type":"string","maxLength":20,"description":"Force a locale (es-ES, en-US…). Default: auto-detect"},"keepAudio":{"type":"boolean","description":"Direct upload: keep the audio beyond the retention window"}}},"CreateNoteResponse":{"type":"object","required":["noteId","status"],"properties":{"noteId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["processing"]},"provider":{"type":"string","description":"Import only: youtube | apple-podcasts | podcast-rss | direct"},"upload":{"type":"object","description":"Direct upload only","properties":{"method":{"type":"string","enum":["PUT"]},"url":{"type":"string","format":"uri"},"expiresInSeconds":{"type":"integer"},"headers":{"type":"object","additionalProperties":{"type":"string"}}}},"next":{"type":"string","description":"What to do next, in plain words"}}},"Note":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":["string","null"]},"status":{"type":"string","enum":["processing","ready","failed"]},"errorCode":{"type":["string","null"],"description":"Why it failed; null otherwise"},"sourceType":{"type":"string","enum":["upload","recording","url"]},"origin":{"type":"string","enum":["youtube","podcast","link","video","audio","recording"]},"sourceUrl":{"type":["string","null"]},"folderId":{"type":["string","null"],"format":"uuid"},"tags":{"type":"array","items":{"type":"string"}},"durationSeconds":{"type":["integer","null"]},"language":{"type":["string","null"]},"recordedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"NoteList":{"type":"object","properties":{"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"}},"nextCursor":{"type":["string","null"],"format":"uuid"},"hasMore":{"type":"boolean"}}},"NoteDetail":{"allOf":[{"$ref":"#/components/schemas/Note"},{"type":"object","properties":{"transcript":{"type":["object","null"],"properties":{"fullText":{"type":"string"},"languagesDetected":{"type":"array","items":{"type":"string"}},"speakerCount":{"type":["integer","null"]}}},"aiNotes":{"type":"array","items":{"$ref":"#/components/schemas/Analysis"}},"outline":{"type":"array","items":{"$ref":"#/components/schemas/Chapter"}}}}]},"Speaker":{"type":"object","properties":{"label":{"type":["string","null"],"description":"A, B, C… as the diarizer assigned them"},"name":{"type":["string","null"],"description":"The name in use: persistent profile, name given by the user, or inferred with high confidence"},"nameStatus":{"type":["string","null"],"enum":["confirmed","suggested",null],"description":"`confirmed` = given by the user; `suggested` = inferred from the content, not confirmed yet"},"suggestedName":{"type":["string","null"],"description":"Name inferred from the content and the source metadata"},"suggestedNameConfidence":{"type":["number","null"],"minimum":0,"maximum":1},"speechSeconds":{"type":["number","null"]},"segmentCount":{"type":["integer","null"]},"voiceExcluded":{"type":"boolean","description":"\"Do not recognise this person\" is set on this speaker or on its profile: its voice is not analysed nor matched"}}},"SpeakerList":{"type":"object","properties":{"noteId":{"type":"string","format":"uuid"},"speakers":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Speaker"},{"type":"object","properties":{"evidence":{"type":"array","description":"Quotes that support the suggested name","items":{"type":"object","properties":{"source":{"type":"string","enum":["transcript","metadata","roster","voice"],"description":"`voice`: the voice sounds like one of the owner's voice profiles (only with the owner's biometric consent)"},"segment":{"type":["integer","null"],"description":"Segment `sequence` when the source is the transcript"},"quote":{"type":"string","description":"For `voice`, the profile name"},"similarity":{"type":"number","description":"For `voice`: cosine similarity with the profile (0..1)"}}}}}}]}}}},"Segment":{"type":"object","properties":{"sequence":{"type":"integer"},"startMs":{"type":"integer"},"endMs":{"type":"integer"},"speakerLabel":{"type":["string","null"]},"speakerName":{"type":["string","null"]},"text":{"type":"string"},"confidence":{"type":["number","null"]},"locale":{"type":["string","null"]},"words":{"type":["array","null"],"description":"Per-word timings when the provider emits them; null otherwise","items":{"type":"object","properties":{"text":{"type":"string"},"startMs":{"type":"integer"},"endMs":{"type":"integer"}}}}}},"Transcript":{"type":"object","properties":{"noteId":{"type":"string","format":"uuid"},"language":{"type":["string","null"]},"languagesDetected":{"type":"array","items":{"type":"string"}},"durationSeconds":{"type":["integer","null"]},"provider":{"type":["string","null"]},"model":{"type":["string","null"]},"fullText":{"type":"string"},"speakers":{"type":"array","items":{"$ref":"#/components/schemas/Speaker"}},"segments":{"type":"array","items":{"$ref":"#/components/schemas/Segment"}}}},"Anchors":{"type":["object","null"],"description":"Millisecond at which each element is said, aligned index by index with its list. Null per element when the model could not place it; null as a whole for analyses generated before Sep 2026.","properties":{"keyPoints":{"type":"array","items":{"type":["integer","null"]}},"actionItems":{"type":"array","items":{"type":["integer","null"]}},"decisions":{"type":"array","items":{"type":["integer","null"]}},"questions":{"type":"array","items":{"type":["integer","null"]}}}},"Analysis":{"type":"object","properties":{"template":{"type":"string","enum":["generic","sales","legal","medical","journalism","education","customer_success","meeting_minutes","consulting","coaching","therapy","podcast","university_class","debate"]},"summary":{"type":"string"},"keyPoints":{"type":"array","items":{"type":"string"}},"actionItems":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"assignee":{"type":"string"},"deadline":{"type":"string"}}}},"decisions":{"type":"array","items":{"type":"string"}},"questions":{"type":"array","items":{"type":"string"}},"topics":{"type":"array","items":{"type":"string"}},"anchors":{"$ref":"#/components/schemas/Anchors"},"sections":{"type":["object","null"],"description":"Template-specific sections, only for the \"debate\" template (podcasts, interviews, multi-person debates). Each item carries who says it (speaker name or diarization letter) and the exact start millisecond of the transcript segment where it is said. Null for other templates.","properties":{"positions":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"speaker":{"type":["string","null"]},"t":{"type":["integer","null"]}},"required":["text"]}},"arguments":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"speaker":{"type":["string","null"]},"t":{"type":["integer","null"]}},"required":["text"]}},"quotes":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"speaker":{"type":["string","null"]},"t":{"type":["integer","null"]}},"required":["text"]}},"agreements":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"speaker":{"type":["string","null"]},"t":{"type":["integer","null"]}},"required":["text"]}},"disagreements":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"speaker":{"type":["string","null"]},"t":{"type":["integer","null"]}},"required":["text"]}}}},"mindmap":{"type":["string","null"],"description":"Mermaid source, when one was generated"},"model":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}},"AnalysisList":{"type":"object","properties":{"noteId":{"type":"string","format":"uuid"},"analyses":{"type":"array","items":{"$ref":"#/components/schemas/Analysis"}},"report":{"type":"object","description":"Only on POST: which templates came out and which did not","properties":{"ok":{"type":"array","items":{"type":"string"}},"failed":{"type":"array","items":{"type":"object"}}}}}},"Chapter":{"type":"object","properties":{"startMs":{"type":"integer"},"endMs":{"type":"integer"},"headline":{"type":"string"}}},"Outline":{"type":"object","properties":{"noteId":{"type":"string","format":"uuid"},"outline":{"type":"array","items":{"$ref":"#/components/schemas/Chapter"}},"attemptedAt":{"type":["string","null"],"format":"date-time"},"generated":{"type":"boolean"}}},"Answer":{"type":"object","properties":{"noteId":{"type":"string","format":"uuid"},"question":{"type":"string"},"answer":{"type":"string","description":"Quotes the audio as [mm:ss]"},"citedSegments":{"type":"array","items":{"type":"string","format":"uuid"}}}},"GlobalAnswer":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string","description":"Quotes as [Note title | mm:ss]"},"citedSegments":{"type":"array","items":{"type":"string","format":"uuid"}},"citedNotes":{"type":"array","items":{"type":"object","properties":{"noteId":{"type":"string","format":"uuid"},"title":{"type":"string"}}}},"sessionId":{"type":"string","format":"uuid"}}}}}}