{"files":{"SKILL.md":"---\nname: assemblyai-api\ndescription: \"AssemblyAI API skill. Use when working with AssemblyAI for upload, transcript. Covers 10 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# AssemblyAI API\nAPI version: 1.3.4\n\n## Auth\nApiKey Authorization in header\n\n## Base URL\nhttps://api.assemblyai.com\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /v2/transcript -- list transcripts\n3. POST /v2/upload -- create first upload\n\n## Endpoints\n10 endpoints across 2 groups. See references/api-spec.lap for full details.\n\n### Upload\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /v2/upload | Upload a media file |\n\n### Transcript\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /v2/transcript | Transcribe audio |\n| GET | /v2/transcript | List transcripts |\n| GET | /v2/transcript/{transcript_id} | Get transcript |\n| DELETE | /v2/transcript/{transcript_id} | Delete transcript |\n| GET | /v2/transcript/{transcript_id}/{subtitle_format} | Get subtitles for transcript |\n| GET | /v2/transcript/{transcript_id}/sentences | Get sentences in transcript |\n| GET | /v2/transcript/{transcript_id}/paragraphs | Get paragraphs in transcript |\n| GET | /v2/transcript/{transcript_id}/word-search | Search words in transcript |\n| GET | /v2/transcript/{transcript_id}/redacted-audio | Get redacted audio |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Create a upload?\" -> POST /v2/upload\n- \"Create a transcript?\" -> POST /v2/transcript\n- \"List all transcript?\" -> GET /v2/transcript\n- \"Get transcript details?\" -> GET /v2/transcript/{transcript_id}\n- \"Delete a transcript?\" -> DELETE /v2/transcript/{transcript_id}\n- \"List all sentences?\" -> GET /v2/transcript/{transcript_id}/sentences\n- \"List all paragraphs?\" -> GET /v2/transcript/{transcript_id}/paragraphs\n- \"List all word-search?\" -> GET /v2/transcript/{transcript_id}/word-search\n- \"List all redacted-audio?\" -> GET /v2/transcript/{transcript_id}/redacted-audio\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api AssemblyAI API\n@base https://api.assemblyai.com\n@version 1.3.4\n@auth ApiKey Authorization in header\n@endpoints 10\n@toc upload(1), transcript(9)\n\n@group upload\n@endpoint POST /v2/upload\n@desc Upload a media file\n@returns(200) {upload_url: str(url)} # Media file uploaded successfully\n@errors {400: Bad request, 401: Unauthorized, 403: Cannot access uploaded file, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endgroup\n\n@group transcript\n@endpoint POST /v2/transcript\n@desc Transcribe audio\n@returns(200) {audio_channels: int, audio_duration: int?, audio_end_at: int?, audio_start_from: int?, audio_url: str(url), auto_chapters: bool?, auto_highlights: bool, auto_highlights_result: any, chapters: [map]?, confidence: num(double)?, content_safety: bool?, content_safety_labels: any, custom_spelling: [map]?, disfluencies: bool?, domain: str?, entities: [map]?, entity_detection: bool?, error: str, filter_profanity: bool?, format_text: bool?, iab_categories: bool?, iab_categories_result: any, id: str(uuid), keyterms_prompt: [str], language_code: any, language_codes: [str]?, language_confidence: num(double)?, language_confidence_threshold: num(float)?, language_detection: bool?, language_detection_options: map{expected_languages: [str], fallback_language: str, code_switching: bool, code_switching_confidence_threshold: num}, multichannel: bool?, prompt: str, punctuate: bool?, redact_pii: bool, redact_pii_audio: bool?, redact_pii_audio_options: map{return_redacted_no_speech_audio: bool, override_audio_redaction_method: str}, redact_pii_audio_quality: any, redact_pii_policies: [str]?, redact_pii_sub: str, sentiment_analysis: bool?, sentiment_analysis_results: [map]?, speaker_labels: bool?, speakers_expected: int?, speech_model_used: str, speech_models: [str]?, speech_threshold: num(float)?, speech_understanding: map{request: any, response: any}, status: str, summarization: bool, summary: str?, summary_model: str?, summary_type: str?, remove_audio_tags: any, temperature: num?, text: str?, throttled: bool?, utterances: [map]?, webhook_auth: bool, webhook_auth_header_name: str?, webhook_status_code: int?, webhook_url: str(url)?, words: [map]?, acoustic_model: str, custom_topics: bool?, language_model: str, speech_model: any, speed_boost: bool?, topics: [str], translated_texts: map{language_code: str}} # Transcript created and queued for processing\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endpoint GET /v2/transcript\n@desc List transcripts\n@optional {limit: int=10 # Maximum amount of transcripts to retrieve, status: str # Filter by transcript status, created_on: str(date) # Only get transcripts created on this date, before_id: str(uuid) # Get transcripts that were created before this transcript ID, after_id: str(uuid) # Get transcripts that were created after this transcript ID, throttled_only: bool=false # Only get throttled transcripts, overrides the status filter}\n@returns(200) {page_details: map{limit: int, result_count: int, current_url: str(url), prev_url: str(url)?, next_url: str(url)?}, transcripts: [map]} # A list of transcripts. Transcripts are sorted from newest to oldest. The previous URL always points to a page with older transcripts.\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endpoint GET /v2/transcript/{transcript_id}\n@desc Get transcript\n@required {transcript_id: str # ID of the transcript}\n@returns(200) {audio_channels: int, audio_duration: int?, audio_end_at: int?, audio_start_from: int?, audio_url: str(url), auto_chapters: bool?, auto_highlights: bool, auto_highlights_result: any, chapters: [map]?, confidence: num(double)?, content_safety: bool?, content_safety_labels: any, custom_spelling: [map]?, disfluencies: bool?, domain: str?, entities: [map]?, entity_detection: bool?, error: str, filter_profanity: bool?, format_text: bool?, iab_categories: bool?, iab_categories_result: any, id: str(uuid), keyterms_prompt: [str], language_code: any, language_codes: [str]?, language_confidence: num(double)?, language_confidence_threshold: num(float)?, language_detection: bool?, language_detection_options: map{expected_languages: [str], fallback_language: str, code_switching: bool, code_switching_confidence_threshold: num}, multichannel: bool?, prompt: str, punctuate: bool?, redact_pii: bool, redact_pii_audio: bool?, redact_pii_audio_options: map{return_redacted_no_speech_audio: bool, override_audio_redaction_method: str}, redact_pii_audio_quality: any, redact_pii_policies: [str]?, redact_pii_sub: str, sentiment_analysis: bool?, sentiment_analysis_results: [map]?, speaker_labels: bool?, speakers_expected: int?, speech_model_used: str, speech_models: [str]?, speech_threshold: num(float)?, speech_understanding: map{request: any, response: any}, status: str, summarization: bool, summary: str?, summary_model: str?, summary_type: str?, remove_audio_tags: any, temperature: num?, text: str?, throttled: bool?, utterances: [map]?, webhook_auth: bool, webhook_auth_header_name: str?, webhook_status_code: int?, webhook_url: str(url)?, words: [map]?, acoustic_model: str, custom_topics: bool?, language_model: str, speech_model: any, speed_boost: bool?, topics: [str], translated_texts: map{language_code: str}} # The transcript resource\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endpoint DELETE /v2/transcript/{transcript_id}\n@desc Delete transcript\n@required {transcript_id: str # ID of the transcript}\n@returns(200) {audio_channels: int, audio_duration: int?, audio_end_at: int?, audio_start_from: int?, audio_url: str(url), auto_chapters: bool?, auto_highlights: bool, auto_highlights_result: any, chapters: [map]?, confidence: num(double)?, content_safety: bool?, content_safety_labels: any, custom_spelling: [map]?, disfluencies: bool?, domain: str?, entities: [map]?, entity_detection: bool?, error: str, filter_profanity: bool?, format_text: bool?, iab_categories: bool?, iab_categories_result: any, id: str(uuid), keyterms_prompt: [str], language_code: any, language_codes: [str]?, language_confidence: num(double)?, language_confidence_threshold: num(float)?, language_detection: bool?, language_detection_options: map{expected_languages: [str], fallback_language: str, code_switching: bool, code_switching_confidence_threshold: num}, multichannel: bool?, prompt: str, punctuate: bool?, redact_pii: bool, redact_pii_audio: bool?, redact_pii_audio_options: map{return_redacted_no_speech_audio: bool, override_audio_redaction_method: str}, redact_pii_audio_quality: any, redact_pii_policies: [str]?, redact_pii_sub: str, sentiment_analysis: bool?, sentiment_analysis_results: [map]?, speaker_labels: bool?, speakers_expected: int?, speech_model_used: str, speech_models: [str]?, speech_threshold: num(float)?, speech_understanding: map{request: any, response: any}, status: str, summarization: bool, summary: str?, summary_model: str?, summary_type: str?, remove_audio_tags: any, temperature: num?, text: str?, throttled: bool?, utterances: [map]?, webhook_auth: bool, webhook_auth_header_name: str?, webhook_status_code: int?, webhook_url: str(url)?, words: [map]?, acoustic_model: str, custom_topics: bool?, language_model: str, speech_model: any, speed_boost: bool?, topics: [str], translated_texts: map{language_code: str}} # The deleted transcript response\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endpoint GET /v2/transcript/{transcript_id}/{subtitle_format}\n@desc Get subtitles for transcript\n@required {transcript_id: str # ID of the transcript, subtitle_format: str # The format of the captions}\n@optional {chars_per_caption: int # The maximum number of characters per caption}\n@returns(200) The exported captions as text\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endpoint GET /v2/transcript/{transcript_id}/sentences\n@desc Get sentences in transcript\n@required {transcript_id: str # ID of the transcript}\n@returns(200) {id: str(uuid), confidence: num(double), audio_duration: num, sentences: [map]} # Exported sentences\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endpoint GET /v2/transcript/{transcript_id}/paragraphs\n@desc Get paragraphs in transcript\n@required {transcript_id: str # ID of the transcript}\n@returns(200) {id: str(uuid), confidence: num(double), audio_duration: num, paragraphs: [map]} # Exported paragraphs\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endpoint GET /v2/transcript/{transcript_id}/word-search\n@desc Search words in transcript\n@required {transcript_id: str # ID of the transcript, words: [str] # Keywords to search for}\n@returns(200) {id: str(uuid), total_count: int, matches: [map]} # Word search response\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endpoint GET /v2/transcript/{transcript_id}/redacted-audio\n@desc Get redacted audio\n@required {transcript_id: str # ID of the transcript}\n@returns(200) {status: str, redacted_audio_url: str(url)} # The redacted audio object containing the status and URL to the redacted audio\n@errors {400: Bad request, 401: Unauthorized, 404: Not found, 429: Too many requests, 500: An error occurred while processing the request, 503: Service unavailable, 504: Gateway timeout}\n\n@endgroup\n\n@end\n"}}