{"id":"cefc625f-480d-41be-a404-9f557bb77b18","entityType":"agent","slug":"clawhub-gladiaio-gladia-pre-recorded-transcription","name":"gladia-pre-recorded-transcription","canonicalUrl":"https://www.xpersona.co/agent/clawhub-gladiaio-gladia-pre-recorded-transcription","canonicalPath":"/agent/clawhub-gladiaio-gladia-pre-recorded-transcription","generatedAt":"2026-10-13T09:26:06.798Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:48:37.425Z","emptyReason":null},"description":"Transcribe pre-recorded audio files or URLs with Gladia. Use when the user needs batch/async transcription, speaker diarization, subtitles (SRT/VTT), PII redaction, translation, NER, summarization, audio-to-LLM, or any audio intelligence on pre-recorded content. Always prefer the official SDK; fall back to raw REST only when SDK cannot satisfy the requirement.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 959 downloads reported by the source. Last updated 10/12/2026.","installCommand":"clawhub skill install s170451ybbxgxcc4es3g96b4fs8823td:gladia-pre-recorded-transcription","sourceUrl":"https://clawhub.ai/gladiaio/gladia-pre-recorded-transcription","homepage":"https://clawhub.ai/gladiaio/skills/gladia-pre-recorded-transcription","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/gladiaio/gladia-pre-recorded-transcription","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/gladiaio/skills/gladia-pre-recorded-transcription","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"gladia-pre-recorded-transcription technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:48:37.425Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:48:37.425Z","emptyReason":null},"stars":null,"forks":null,"downloads":959,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.0.3","tractionLabel":"959 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:48:37.414Z","emptyReason":null},"lastUpdatedAt":"2026-10-12T01:48:37.425Z","lastCrawledAt":"2026-10-12T01:48:37.414Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-13T01:48:37.414Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.3","createdAt":"2026-10-02T15:07:30.699Z","changelog":"- Documentation updates: minor edits to SKILL.md and references/transcription-options.md for clarity and accuracy. - Internal cleanup: removed the obsolete skill-card.md file.","fileCount":6,"zipByteSize":7970},{"version":"1.0.2","createdAt":"2026-07-09T15:11:01.495Z","changelog":"- Added guidance to use gladia-using-cli for users with gladia-cli who prefer terminal workflows, in addition to SDK and live transcription options. - Updated the References section to include links to gladia-using-cli skill and clarified usage scenarios. - Removed the skill-card.md file.","fileCount":6,"zipByteSize":8062},{"version":"1.0.1","createdAt":"2026-06-08T18:17:23.170Z","changelog":"- Documentation formatting updated in SKILL.md to add a missing frontmatter separator line. - No functionality or content changes; only a minor correction to conform with formatting standards.","fileCount":6,"zipByteSize":8177},{"version":"1.0.0","createdAt":"2026-06-08T18:01:43.728Z","changelog":"- Initial release: enables transcription and audio intelligence for pre-recorded files and URLs using Gladia's async/batch API. - Supports speaker diarization, PII redaction, subtitles, translation, summarization, chapterization, NER, and audio-to-LLM features. - Strongly prefers official SDK methods (JS/Python) for file handling, with guidance to use REST API only as fallback. - Includes full documentation for workflow, job management, options, polling best practices, and common mistakes. - Documents limits (file size, duration, concurrency) and provides extensive troubleshooting and integration references.","fileCount":6,"zipByteSize":8211}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s170451ybbxgxcc4es3g96b4fs8823td:gladia-pre-recorded-transcription","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s170451ybbxgxcc4es3g96b4fs8823td:gladia-pre-recorded-transcription` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/gladiaio/gladia-pre-recorded-transcription before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-13T09:26:06.798Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-gladiaio-gladia-pre-recorded-transcription/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:48:37.425Z","emptyReason":null},"readme":"Skill: gladia-pre-recorded-transcription\n\nOwner: gladiaio\n\nSummary: Transcribe pre-recorded audio files or URLs with Gladia. Use when the user needs batch/async transcription, speaker diarization, subtitles (SRT/VTT), PII redaction, translation, NER, summarization, audio-to-LLM, or any audio intelligence on pre-recorded content. Always prefer the official SDK; fall back to raw REST only when SDK cannot satisfy the requirement.\n\nTags: latest:1.0.3\n\nVersion history:\n\nv1.0.3 | 2026-10-02T15:07:30.699Z | auto\n\n- Documentation updates: minor edits to SKILL.md and references/transcription-options.md for clarity and accuracy.\n- Internal cleanup: removed the obsolete skill-card.md file.\n\nv1.0.2 | 2026-07-09T15:11:01.495Z | auto\n\n- Added guidance to use gladia-using-cli for users with gladia-cli who prefer terminal workflows, in addition to SDK and live transcription options.\n- Updated the References section to include links to gladia-using-cli skill and clarified usage scenarios.\n- Removed the skill-card.md file.\n\nv1.0.1 | 2026-06-08T18:17:23.170Z | auto\n\n- Documentation formatting updated in SKILL.md to add a missing frontmatter separator line.\n- No functionality or content changes; only a minor correction to conform with formatting standards.\n\nv1.0.0 | 2026-06-08T18:01:43.728Z | auto\n\n- Initial release: enables transcription and audio intelligence for pre-recorded files and URLs using Gladia's async/batch API.\n- Supports speaker diarization, PII redaction, subtitles, translation, summarization, chapterization, NER, and audio-to-LLM features.\n- Strongly prefers official SDK methods (JS/Python) for file handling, with guidance to use REST API only as fallback.\n- Includes full documentation for workflow, job management, options, polling best practices, and common mistakes.\n- Documents limits (file size, duration, concurrency) and provides extensive troubleshooting and integration references.\n\nArchive index:\n\nArchive v1.0.3: 6 files, 7970 bytes\n\nFiles: references/delivery-and-response.md (1234b), references/managing-jobs.md (2895b), references/transcription-options.md (4741b), skill-card.md (2286b), SKILL.md (7578b), _meta.json (152b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: gladia-pre-recorded-transcription\ndescription: Transcribe pre-recorded audio files or URLs with Gladia. Use when the user needs batch/async transcription, speaker diarization, subtitles (SRT/VTT), PII redaction, translation, NER, summarization, audio-to-LLM, or any audio intelligence on pre-recorded content. Always prefer the official SDK; fall back to raw REST only when SDK cannot satisfy the requirement.\nlicense: MIT\n---\n\n# Pre-Recorded Transcription\n\nGladia's pre-recorded API transcribes audio and video files asynchronously.\n\n> **SDK-first**: always use the official SDK — see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md) for policy, setup, and fallback criteria.\n\n## When to Use\n\n- Existing audio/video files or URLs (including social/video links)\n- Batch or asynchronous transcription workflows\n- Pre-recorded-only features: diarization, PII redaction, subtitles\n\n**When NOT to use:** If the user needs real-time / live transcription of a stream, microphone, or ongoing audio feed, use the [gladia-live-transcription skill](../gladia-live-transcription/SKILL.md) instead. Live transcription uses WebSocket sessions, not the pre-recorded API. If the user has gladia-cli installed and wants a quick terminal workflow without writing code, use [gladia-using-cli](../gladia-using-cli/SKILL.md) instead.\n\n## References\n\nConsult these resources as needed:\n\n- ./references/transcription-options.md -- Full options (JS + Python)\n- ./references/managing-jobs.md -- `get`, `list`, `getFile`, `delete`\n- ./references/delivery-and-response.md -- Response shape and events\n- ../gladia-audio-intelligence/SKILL.md -- Feature availability and config\n- ../gladia-using-cli/SKILL.md -- Terminal workflow with gladia-cli\n- ../gladia-sdk-integration/SKILL.md -- Setup, config, SDK vs raw API\n- ../gladia-sdk-integration/references/sdk-versions.md -- Current SDK versions\n- ../gladia-troubleshooting/SKILL.md -- Errors and diagnostics\n\n## API Endpoints (reference — prefer SDK methods instead)\n\n| Endpoint                    | Method | SDK equivalent                          |\n| --------------------------- | ------ | --------------------------------------- |\n| `/v2/upload`                | POST   | `transcribe()` auto-uploads local files |\n| `/v2/pre-recorded`          | POST   | `create()` / `transcribe()`             |\n| `/v2/pre-recorded`          | GET    | `list()`                                |\n| `/v2/pre-recorded/:id`      | GET    | `get()` / `poll()` / `transcribe()`     |\n| `/v2/pre-recorded/:id`      | DELETE | `delete()`                              |\n| `/v2/pre-recorded/:id/file` | GET    | `getFile()`                             |\n\n## Workflow\n\n### Recommended (SDK)\n\nThe SDK `transcribe()` method handles upload, job creation, and polling in one call. Use this by default.\n\n```typescript\nconst result = await client.preRecorded().transcribe(\"./audio.mp3\", {\n  language_config: { languages: [\"en\"] },\n  diarization: true,\n});\n\nconsole.log(result.result?.transcription?.full_transcript);\n```\n\n```python\nresult = client.prerecorded().transcribe(\n    \"audio.mp3\",\n    {\"language_config\": {\"languages\": [\"en\"]}, \"diarization\": True},\n)\n\nprint(result.result.transcription.full_transcript)\n```\n\nAudio input can be a local file path, HTTP(S) URL, social/video URL, or binary file object. For full input types, see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md#audio-input-types).\n\n### Fallback (raw REST — only when SDK is not feasible)\n\nUse raw REST only when SDK use is not possible.\n\n1. **Upload** (if local file): `POST /v2/upload` with multipart form data → get `audio_url`\n2. **Create job**: `POST /v2/pre-recorded` with `audio_url` and config → get `id`\n3. **Poll**: `GET /v2/pre-recorded/:id` until `status: \"done\"` (or use webhooks/callbacks)\n4. **Parse results**: Extract `transcription`, `diarization`, `translation`, etc. from response\n\n## Managing Jobs\n\nUse SDK methods for post-processing operations:\n\n- JavaScript: `client.preRecorded().get(id)`, `.list(filters)`, `.getFile(id)`, `.delete(id)`\n- Python: `client.prerecorded().get(id)`, `.list(filters)`, `.get_file(id)`, `.delete(id)`\n\nFor full JS/Python examples, pagination filters, and REST equivalents, see [./references/managing-jobs.md](./references/managing-jobs.md).\n\n## Transcription Options\n\nAll options are passed as the second argument to `transcribe()`. Key options:\n\n| Option            | Description                                 |\n| ----------------- | ------------------------------------------- |\n| `language_config` | Expected languages, code switching          |\n| `diarization`     | Speaker identification (pre-recorded only)  |\n| `translation`     | Translate to target languages               |\n| `summarization`   | Generate bullet points or paragraph summary |\n| `subtitles`       | Generate SRT/VTT files                      |\n| `pii_redaction`   | Redact PII (pre-recorded only)              |\n| `audio_to_llm`    | Run custom LLM prompts on transcript        |\n| `callback_url`    | Async webhook delivery                      |\n\nFor full option details, see [./references/transcription-options.md](./references/transcription-options.md). For audio intelligence config, see [gladia-audio-intelligence](../gladia-audio-intelligence/SKILL.md). For client-level retry/timeouts, see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md#configuration-options).\n\n## Response and Delivery\n\nFor full response JSON and event names, see [./references/delivery-and-response.md](./references/delivery-and-response.md).\n\n## Limits and Specifications\n\n| Constraint              | Value                             |\n| ----------------------- | --------------------------------- |\n| Max file size           | 1000 MB                           |\n| Max duration            | 135 minutes (120 min for YouTube) |\n| Enterprise max duration | 4h15                              |\n| Concurrency (paid)      | 25 concurrent jobs                |\n| Concurrency (free)      | 3 concurrent jobs                 |\n\n## Polling Best Practices\n\nThe SDK handles polling automatically — `transcribe()` polls until the job completes with configurable `interval` and `timeout`:\n\n```typescript\nconst result = await client.preRecorded().transcribe(audio, options, {\n  interval: 5000, // Poll every 5s\n  timeout: 600000, // Timeout after 10 minutes\n});\n```\n\nIf using raw REST instead of the SDK:\n\n- Use webhooks or callbacks instead of polling when possible\n- If polling, implement exponential backoff (start at 3s, max 30s)\n\n## Common Mistakes\n\n- **Code switching without language list**: enabling `code_switching: true` with empty `languages` triggers 100+ language evaluation. Always provide 3-5 expected languages.\n- **Polling without backoff**: rapid polling wastes requests and may trigger 429s. The SDK handles this; for raw REST, use webhooks or exponential backoff.\n- **Expecting live-only features**: diarization, PII redaction, and subtitles are pre-recorded only — not available in live mode.\n- **Wrong audio file path**: the audio download endpoint is `/v2/pre-recorded/:id/file`, not `/v2/pre-recorded/:id/audio`.\n\nFor the full list of gotchas and diagnostics, see the [gladia-troubleshooting skill](../gladia-troubleshooting/SKILL.md).\n\n## Further Reading\n\n- [Pre-recorded quickstart](https://docs.gladia.io/chapters/pre-recorded-stt/quickstart)\n- [Audio intelligence overview](https://docs.gladia.io/chapters/pre-recorded-stt/audio-intelligence)\n- [API reference: init](https://docs.gladia.io/api-reference/v2/pre-recorded/init)\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7fs6cmj9hqg7232sbkacf31d882wp2\",\n  \"slug\": \"gladia-pre-recorded-transcription\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1790953650699\n}\n\nFile v1.0.3:references/delivery-and-response.md\n\n# Delivery and Response Reference\n\nReference for the pre-recorded job response shape and asynchronous delivery events.\n\n## Contents\n\n- Response Structure\n- Callback Events\n- Webhook Events\n\n## Response Structure\n\n```json\n{\n  \"id\": \"job-uuid\",\n  \"status\": \"done\",\n  \"result\": {\n    \"transcription\": {\n      \"full_transcript\": \"Hello, welcome to the meeting...\",\n      \"utterances\": [\n        {\n          \"text\": \"Hello, welcome to the meeting\",\n          \"language\": \"en\",\n          \"start\": 0.5,\n          \"end\": 2.1,\n          \"speaker\": 0,\n          \"words\": [{ \"word\": \"Hello\", \"start\": 0.5, \"end\": 0.8, \"confidence\": 0.98 }]\n        }\n      ]\n    },\n    \"diarization\": {},\n    \"translation\": {},\n    \"summarization\": {},\n    \"sentiment_analysis\": {}\n  }\n}\n```\n\n## Callback Events\n\nCallbacks are sent to the `callback_url` in your transcription request body:\n\n- `transcription.success` — job completed successfully\n- `transcription.error` — job failed\n\n## Webhook Events\n\nWebhooks are configured in Dashboard -> Account -> Webhooks:\n\n- `transcription.created` — job queued\n- `transcription.success` — job completed\n- `transcription.error` — job failed\n\nWebhooks are powered by Svix with signed requests for verification.\n\nFile v1.0.3:references/managing-jobs.md\n\n# Managing Pre-Recorded Jobs\n\nReference for retrieving, listing, downloading, and deleting pre-recorded transcription jobs.\n\n## Contents\n\n- Get a Single Job\n- List Jobs\n- List Query Parameters\n- Download Original Audio\n- Delete a Job\n\n## Get a Single Job\n\nFetch the status and full result payload for one job:\n\n```typescript\nconst job = await client.preRecorded().get(jobId);\nconsole.log(job.status); // \"queued\" | \"processing\" | \"done\" | \"error\"\nconsole.log(job.result?.transcription?.full_transcript);\n```\n\n```python\njob = client.prerecorded().get(job_id)\nprint(job.status)\nprint(job.result.transcription.full_transcript)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id`\n\n## List Jobs\n\nRetrieve jobs with optional filters. The response is paginated.\n\n```typescript\nconst page = await client.preRecorded().list({\n  offset: 0,\n  limit: 20,\n  status: [\"done\"],\n  after_date: \"2026-01-01T00:00:00Z\",\n  before_date: \"2026-06-01T00:00:00Z\",\n  custom_metadata: { userId: \"abc123\" },\n});\n\nfor (const job of page.items) {\n  console.log(job.id, job.status);\n}\n\n// page.next is the URL for the next page (null when last page)\n```\n\n```python\npage = client.prerecorded().list(\n    offset=0,\n    limit=20,\n    status=[\"done\"],\n    after_date=\"2026-01-01T00:00:00Z\",\n    before_date=\"2026-06-01T00:00:00Z\",\n    custom_metadata={\"userId\": \"abc123\"},\n)\n\nfor job in page.items:\n    print(job.id, job.status)\n```\n\nRaw REST: `GET /v2/pre-recorded`\n\n## List Query Parameters\n\n| Parameter         | Type     | Description                                                 |\n| ----------------- | -------- | ----------------------------------------------------------- |\n| `offset`          | integer  | Pagination start (default `0`)                              |\n| `limit`           | integer  | Max items per page (default `20`, min `1`)                  |\n| `date`            | string   | Filter to a specific day (`YYYY-MM-DD`)                     |\n| `before_date`     | string   | Jobs created before this ISO 8601 datetime                  |\n| `after_date`      | string   | Jobs created after this ISO 8601 datetime                   |\n| `status`          | string[] | Filter by status: `queued`, `processing`, `done`, `error`   |\n| `custom_metadata` | object   | Filter by metadata key/value pairs attached at job creation |\n\nPagination fields in the response:\n\n- `first` (URL)\n- `current` (URL)\n- `next` (URL or `null`)\n- `items` (array)\n\n## Download Original Audio\n\nDownload the original audio used for transcription:\n\n```typescript\nconst audioBlob = await client.preRecorded().getFile(jobId);\n```\n\n```python\naudio_bytes = client.prerecorded().get_file(job_id)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id/file`\n\n## Delete a Job\n\nDelete a job and associated data:\n\n```typescript\nawait client.preRecorded().delete(jobId);\n```\n\n```python\nclient.prerecorded().delete(job_id)\n```\n\nRaw REST: `DELETE /v2/pre-recorded/:id`\n\nFile v1.0.3:references/transcription-options.md\n\n# Transcription Options Reference\n\nComplete configuration reference for all pre-recorded transcription options passed as the second argument to `transcribe()`.\n\n## Contents\n\n- Language Configuration\n- Audio Intelligence Options (full example)\n- Delivery (callbacks)\n\nFor client-level config (retry, timeouts, HTTP headers), see [gladia-sdk-integration](../../gladia-sdk-integration/SKILL.md#configuration-options). For detailed audio intelligence feature docs, see [gladia-audio-intelligence](../../gladia-audio-intelligence/SKILL.md).\n\n## Full Options Example (JavaScript/TypeScript)\n\n```typescript\nconst result = await client.preRecorded().transcribe(audioInput, {\n  // Language\n  language_config: {\n    languages: [\"en\", \"fr\"], // Expected languages (ISO 639-1)\n    code_switching: true, // Detect language changes mid-speech\n  },\n\n  // Audio Intelligence\n  diarization: true, // Speaker identification\n  diarization_config: { number_of_speakers: 3 },\n  translation: true,\n  translation_config: { target_languages: [\"fr\", \"es\"] },\n  summarization: true,\n  summarization_config: { type: \"bullet_points\" },\n  sentiment_analysis: true,\n  named_entity_recognition: true,\n  subtitles: true,\n  subtitles_config: { formats: [\"srt\", \"vtt\"] },\n  pii_redaction: true,\n  pii_redaction_config: {\n    policy: \"mask\",\n    entities: [\"person\", \"location\", \"phone_number\"],\n  },\n  audio_to_llm: true,\n  audio_to_llm_config: { prompts: [\"Summarize the key decisions made\"] },\n  custom_vocabulary: true,\n  custom_vocabulary_config: {\n    vocabulary: [\n      { value: \"Gladia\", intensity: 0.5 },\n      { value: \"Kubernetes\", pronunciations: [\"koo-ber-net-eez\"] },\n    ],\n  },\n\n  // Delivery\n  callback_url: \"https://your-server.com/webhook\",\n});\n```\n\n## Full Options Example (Python)\n\n```python\nresult = client.prerecorded().transcribe(\"audio.mp3\", {\n    \"language_config\": {\"languages\": [\"en\", \"fr\"], \"code_switching\": True},\n    \"diarization\": True,\n    \"diarization_config\": {\"number_of_speakers\": 3},\n    \"translation\": True,\n    \"translation_config\": {\"target_languages\": [\"fr\", \"es\"]},\n    \"summarization\": True,\n    \"summarization_config\": {\"type\": \"bullet_points\"},\n    \"sentiment_analysis\": True,\n    \"named_entity_recognition\": True,\n    \"subtitles\": True,\n    \"subtitles_config\": {\"formats\": [\"srt\", \"vtt\"]},\n    \"pii_redaction\": True,\n    \"pii_redaction_config\": {\"policy\": \"mask\", \"entities\": [\"person\", \"location\", \"phone_number\"]},\n    \"audio_to_llm\": True,\n    \"audio_to_llm_config\": {\"prompts\": [\"Summarize the key decisions made\"]},\n    \"custom_vocabulary\": True,\n    \"custom_vocabulary_config\": {\n        \"vocabulary\": [\n            {\"value\": \"Gladia\", \"intensity\": 0.5},\n            {\"value\": \"Kubernetes\", \"pronunciations\": [\"koo-ber-net-eez\"]},\n        ],\n    },\n    \"callback_url\": \"https://your-server.com/webhook\",\n})\n```\n\n## Options Quick Reference\n\n| Option                                  | Type       | Description                             |\n| --------------------------------------- | ---------- | --------------------------------------- |\n| `language_config.languages`             | `string[]` | Expected languages (ISO 639-1)          |\n| `language_config.code_switching`        | `bool`     | Detect language changes mid-speech      |\n| `diarization`                           | `bool`     | Speaker identification                  |\n| `diarization_config.number_of_speakers` | `int`      | Exact speaker count (overrides min/max) |\n| `translation`                           | `bool`     | Translate transcript                    |\n| `translation_config.target_languages`   | `string[]` | Target language codes                   |\n| `summarization`                         | `bool`     | Generate summary                        |\n| `summarization_config.type`             | `string`   | `bullet_points` or `paragraph`          |\n| `sentiment_analysis`                    | `bool`     | Per-utterance sentiment                 |\n| `named_entity_recognition`              | `bool`     | Entity extraction                       |\n| `subtitles`                             | `bool`     | Generate subtitle files                 |\n| `subtitles_config.formats`              | `string[]` | `srt`, `vtt`                            |\n| `pii_redaction`                         | `bool`     | Redact PII                              |\n| `pii_redaction_config.policy`           | `string`   | `mask` or `tag`                         |\n| `audio_to_llm`                          | `bool`     | Run LLM prompts on transcript           |\n| `custom_vocabulary`                     | `bool`     | Domain-specific terms                   |\n| `callback_url`                          | `string`   | Webhook URL for async delivery          |\n\nFile v1.0.3:skill-card.md\n\n## Description:\n\nGuides agents in transcribing pre-recorded audio or video with Gladia, including optional speaker identification, subtitles, translation, summarization, and PII redaction.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[gladiaio](https://clawhub.ai/user/gladiaio)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and other users building batch transcription workflows use this skill to submit recorded media, retrieve transcripts and optional analyses, and manage asynchronous jobs through Gladia.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Recorded media or media URLs sent to Gladia may contain confidential, regulated, or personally identifying information.\n\nMitigation: Confirm the recording can be shared before submission; enable PII redaction or avoid optional analysis features when unnecessary.\n\nRisk: Transcription callbacks can deliver job information to an untrusted endpoint.\n\nMitigation: Use only webhook endpoints you control and trust.\n\n## Reference(s):\n\n- [ClawHub skill release](https://clawhub.ai/gladiaio/skills/gladia-pre-recorded-transcription)\n- [Pre-recorded transcription quickstart](https://docs.gladia.io/chapters/pre-recorded-stt/quickstart)\n- [Audio intelligence overview](https://docs.gladia.io/chapters/pre-recorded-stt/audio-intelligence)\n- [Pre-recorded API reference](https://docs.gladia.io/api-reference/v2/pre-recorded/init)\n- [Transcription options](artifact/references/transcription-options.md)\n- [Managing jobs](artifact/references/managing-jobs.md)\n- [Delivery and response](artifact/references/delivery-and-response.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Code, Configuration instructions]\n\n**Output Format:** [Markdown with JavaScript or Python examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May describe transcripts, subtitles, job results, and optional audio analyses.]\n\n## Skill Version(s):\n\n1.0.3 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.2: 6 files, 8062 bytes\n\nFiles: references/delivery-and-response.md (1234b), references/managing-jobs.md (2895b), references/transcription-options.md (4892b), skill-card.md (2394b), SKILL.md (7594b), _meta.json (152b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: gladia-pre-recorded-transcription\ndescription: Transcribe pre-recorded audio files or URLs with Gladia. Use when the user needs batch/async transcription, speaker diarization, subtitles (SRT/VTT), PII redaction, translation, NER, summarization, chapterization, audio-to-LLM, or any audio intelligence on pre-recorded content. Always prefer the official SDK; fall back to raw REST only when SDK cannot satisfy the requirement.\nlicense: MIT\n---\n\n# Pre-Recorded Transcription\n\nGladia's pre-recorded API transcribes audio and video files asynchronously.\n\n> **SDK-first**: always use the official SDK — see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md) for policy, setup, and fallback criteria.\n\n## When to Use\n\n- Existing audio/video files or URLs (including social/video links)\n- Batch or asynchronous transcription workflows\n- Pre-recorded-only features: diarization, PII redaction, subtitles\n\n**When NOT to use:** If the user needs real-time / live transcription of a stream, microphone, or ongoing audio feed, use the [gladia-live-transcription skill](../gladia-live-transcription/SKILL.md) instead. Live transcription uses WebSocket sessions, not the pre-recorded API. If the user has gladia-cli installed and wants a quick terminal workflow without writing code, use [gladia-using-cli](../gladia-using-cli/SKILL.md) instead.\n\n## References\n\nConsult these resources as needed:\n\n- ./references/transcription-options.md -- Full options (JS + Python)\n- ./references/managing-jobs.md -- `get`, `list`, `getFile`, `delete`\n- ./references/delivery-and-response.md -- Response shape and events\n- ../gladia-audio-intelligence/SKILL.md -- Feature availability and config\n- ../gladia-using-cli/SKILL.md -- Terminal workflow with gladia-cli\n- ../gladia-sdk-integration/SKILL.md -- Setup, config, SDK vs raw API\n- ../gladia-sdk-integration/references/sdk-versions.md -- Current SDK versions\n- ../gladia-troubleshooting/SKILL.md -- Errors and diagnostics\n\n## API Endpoints (reference — prefer SDK methods instead)\n\n| Endpoint                    | Method | SDK equivalent                          |\n| --------------------------- | ------ | --------------------------------------- |\n| `/v2/upload`                | POST   | `transcribe()` auto-uploads local files |\n| `/v2/pre-recorded`          | POST   | `create()` / `transcribe()`             |\n| `/v2/pre-recorded`          | GET    | `list()`                                |\n| `/v2/pre-recorded/:id`      | GET    | `get()` / `poll()` / `transcribe()`     |\n| `/v2/pre-recorded/:id`      | DELETE | `delete()`                              |\n| `/v2/pre-recorded/:id/file` | GET    | `getFile()`                             |\n\n## Workflow\n\n### Recommended (SDK)\n\nThe SDK `transcribe()` method handles upload, job creation, and polling in one call. Use this by default.\n\n```typescript\nconst result = await client.preRecorded().transcribe(\"./audio.mp3\", {\n  language_config: { languages: [\"en\"] },\n  diarization: true,\n});\n\nconsole.log(result.result?.transcription?.full_transcript);\n```\n\n```python\nresult = client.prerecorded().transcribe(\n    \"audio.mp3\",\n    {\"language_config\": {\"languages\": [\"en\"]}, \"diarization\": True},\n)\n\nprint(result.result.transcription.full_transcript)\n```\n\nAudio input can be a local file path, HTTP(S) URL, social/video URL, or binary file object. For full input types, see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md#audio-input-types).\n\n### Fallback (raw REST — only when SDK is not feasible)\n\nUse raw REST only when SDK use is not possible.\n\n1. **Upload** (if local file): `POST /v2/upload` with multipart form data → get `audio_url`\n2. **Create job**: `POST /v2/pre-recorded` with `audio_url` and config → get `id`\n3. **Poll**: `GET /v2/pre-recorded/:id` until `status: \"done\"` (or use webhooks/callbacks)\n4. **Parse results**: Extract `transcription`, `diarization`, `translation`, etc. from response\n\n## Managing Jobs\n\nUse SDK methods for post-processing operations:\n\n- JavaScript: `client.preRecorded().get(id)`, `.list(filters)`, `.getFile(id)`, `.delete(id)`\n- Python: `client.prerecorded().get(id)`, `.list(filters)`, `.get_file(id)`, `.delete(id)`\n\nFor full JS/Python examples, pagination filters, and REST equivalents, see [./references/managing-jobs.md](./references/managing-jobs.md).\n\n## Transcription Options\n\nAll options are passed as the second argument to `transcribe()`. Key options:\n\n| Option            | Description                                 |\n| ----------------- | ------------------------------------------- |\n| `language_config` | Expected languages, code switching          |\n| `diarization`     | Speaker identification (pre-recorded only)  |\n| `translation`     | Translate to target languages               |\n| `summarization`   | Generate bullet points or paragraph summary |\n| `subtitles`       | Generate SRT/VTT files                      |\n| `pii_redaction`   | Redact PII (pre-recorded only)              |\n| `audio_to_llm`    | Run custom LLM prompts on transcript        |\n| `callback_url`    | Async webhook delivery                      |\n\nFor full option details, see [./references/transcription-options.md](./references/transcription-options.md). For audio intelligence config, see [gladia-audio-intelligence](../gladia-audio-intelligence/SKILL.md). For client-level retry/timeouts, see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md#configuration-options).\n\n## Response and Delivery\n\nFor full response JSON and event names, see [./references/delivery-and-response.md](./references/delivery-and-response.md).\n\n## Limits and Specifications\n\n| Constraint              | Value                             |\n| ----------------------- | --------------------------------- |\n| Max file size           | 1000 MB                           |\n| Max duration            | 135 minutes (120 min for YouTube) |\n| Enterprise max duration | 4h15                              |\n| Concurrency (paid)      | 25 concurrent jobs                |\n| Concurrency (free)      | 3 concurrent jobs                 |\n\n## Polling Best Practices\n\nThe SDK handles polling automatically — `transcribe()` polls until the job completes with configurable `interval` and `timeout`:\n\n```typescript\nconst result = await client.preRecorded().transcribe(audio, options, {\n  interval: 5000, // Poll every 5s\n  timeout: 600000, // Timeout after 10 minutes\n});\n```\n\nIf using raw REST instead of the SDK:\n\n- Use webhooks or callbacks instead of polling when possible\n- If polling, implement exponential backoff (start at 3s, max 30s)\n\n## Common Mistakes\n\n- **Code switching without language list**: enabling `code_switching: true` with empty `languages` triggers 100+ language evaluation. Always provide 3-5 expected languages.\n- **Polling without backoff**: rapid polling wastes requests and may trigger 429s. The SDK handles this; for raw REST, use webhooks or exponential backoff.\n- **Expecting live-only features**: diarization, PII redaction, and subtitles are pre-recorded only — not available in live mode.\n- **Wrong audio file path**: the audio download endpoint is `/v2/pre-recorded/:id/file`, not `/v2/pre-recorded/:id/audio`.\n\nFor the full list of gotchas and diagnostics, see the [gladia-troubleshooting skill](../gladia-troubleshooting/SKILL.md).\n\n## Further Reading\n\n- [Pre-recorded quickstart](https://docs.gladia.io/chapters/pre-recorded-stt/quickstart)\n- [Audio intelligence overview](https://docs.gladia.io/chapters/pre-recorded-stt/audio-intelligence)\n- [API reference: init](https://docs.gladia.io/api-reference/v2/pre-recorded/init)\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7fs6cmj9hqg7232sbkacf31d882wp2\",\n  \"slug\": \"gladia-pre-recorded-transcription\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1783609861495\n}\n\nFile v1.0.2:references/delivery-and-response.md\n\n# Delivery and Response Reference\n\nReference for the pre-recorded job response shape and asynchronous delivery events.\n\n## Contents\n\n- Response Structure\n- Callback Events\n- Webhook Events\n\n## Response Structure\n\n```json\n{\n  \"id\": \"job-uuid\",\n  \"status\": \"done\",\n  \"result\": {\n    \"transcription\": {\n      \"full_transcript\": \"Hello, welcome to the meeting...\",\n      \"utterances\": [\n        {\n          \"text\": \"Hello, welcome to the meeting\",\n          \"language\": \"en\",\n          \"start\": 0.5,\n          \"end\": 2.1,\n          \"speaker\": 0,\n          \"words\": [{ \"word\": \"Hello\", \"start\": 0.5, \"end\": 0.8, \"confidence\": 0.98 }]\n        }\n      ]\n    },\n    \"diarization\": {},\n    \"translation\": {},\n    \"summarization\": {},\n    \"sentiment_analysis\": {}\n  }\n}\n```\n\n## Callback Events\n\nCallbacks are sent to the `callback_url` in your transcription request body:\n\n- `transcription.success` — job completed successfully\n- `transcription.error` — job failed\n\n## Webhook Events\n\nWebhooks are configured in Dashboard -> Account -> Webhooks:\n\n- `transcription.created` — job queued\n- `transcription.success` — job completed\n- `transcription.error` — job failed\n\nWebhooks are powered by Svix with signed requests for verification.\n\nFile v1.0.2:references/managing-jobs.md\n\n# Managing Pre-Recorded Jobs\n\nReference for retrieving, listing, downloading, and deleting pre-recorded transcription jobs.\n\n## Contents\n\n- Get a Single Job\n- List Jobs\n- List Query Parameters\n- Download Original Audio\n- Delete a Job\n\n## Get a Single Job\n\nFetch the status and full result payload for one job:\n\n```typescript\nconst job = await client.preRecorded().get(jobId);\nconsole.log(job.status); // \"queued\" | \"processing\" | \"done\" | \"error\"\nconsole.log(job.result?.transcription?.full_transcript);\n```\n\n```python\njob = client.prerecorded().get(job_id)\nprint(job.status)\nprint(job.result.transcription.full_transcript)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id`\n\n## List Jobs\n\nRetrieve jobs with optional filters. The response is paginated.\n\n```typescript\nconst page = await client.preRecorded().list({\n  offset: 0,\n  limit: 20,\n  status: [\"done\"],\n  after_date: \"2026-01-01T00:00:00Z\",\n  before_date: \"2026-06-01T00:00:00Z\",\n  custom_metadata: { userId: \"abc123\" },\n});\n\nfor (const job of page.items) {\n  console.log(job.id, job.status);\n}\n\n// page.next is the URL for the next page (null when last page)\n```\n\n```python\npage = client.prerecorded().list(\n    offset=0,\n    limit=20,\n    status=[\"done\"],\n    after_date=\"2026-01-01T00:00:00Z\",\n    before_date=\"2026-06-01T00:00:00Z\",\n    custom_metadata={\"userId\": \"abc123\"},\n)\n\nfor job in page.items:\n    print(job.id, job.status)\n```\n\nRaw REST: `GET /v2/pre-recorded`\n\n## List Query Parameters\n\n| Parameter         | Type     | Description                                                 |\n| ----------------- | -------- | ----------------------------------------------------------- |\n| `offset`          | integer  | Pagination start (default `0`)                              |\n| `limit`           | integer  | Max items per page (default `20`, min `1`)                  |\n| `date`            | string   | Filter to a specific day (`YYYY-MM-DD`)                     |\n| `before_date`     | string   | Jobs created before this ISO 8601 datetime                  |\n| `after_date`      | string   | Jobs created after this ISO 8601 datetime                   |\n| `status`          | string[] | Filter by status: `queued`, `processing`, `done`, `error`   |\n| `custom_metadata` | object   | Filter by metadata key/value pairs attached at job creation |\n\nPagination fields in the response:\n\n- `first` (URL)\n- `current` (URL)\n- `next` (URL or `null`)\n- `items` (array)\n\n## Download Original Audio\n\nDownload the original audio used for transcription:\n\n```typescript\nconst audioBlob = await client.preRecorded().getFile(jobId);\n```\n\n```python\naudio_bytes = client.prerecorded().get_file(job_id)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id/file`\n\n## Delete a Job\n\nDelete a job and associated data:\n\n```typescript\nawait client.preRecorded().delete(jobId);\n```\n\n```python\nclient.prerecorded().delete(job_id)\n```\n\nRaw REST: `DELETE /v2/pre-recorded/:id`\n\nFile v1.0.2:references/transcription-options.md\n\n# Transcription Options Reference\n\nComplete configuration reference for all pre-recorded transcription options passed as the second argument to `transcribe()`.\n\n## Contents\n\n- Language Configuration\n- Audio Intelligence Options (full example)\n- Delivery (callbacks)\n\nFor client-level config (retry, timeouts, HTTP headers), see [gladia-sdk-integration](../../gladia-sdk-integration/SKILL.md#configuration-options). For detailed audio intelligence feature docs, see [gladia-audio-intelligence](../../gladia-audio-intelligence/SKILL.md).\n\n## Full Options Example (JavaScript/TypeScript)\n\n```typescript\nconst result = await client.preRecorded().transcribe(audioInput, {\n  // Language\n  language_config: {\n    languages: [\"en\", \"fr\"], // Expected languages (ISO 639-1)\n    code_switching: true, // Detect language changes mid-speech\n  },\n\n  // Audio Intelligence\n  diarization: true, // Speaker identification\n  diarization_config: { number_of_speakers: 3 },\n  translation: true,\n  translation_config: { target_languages: [\"fr\", \"es\"] },\n  summarization: true,\n  summarization_config: { type: \"bullet_points\" },\n  sentiment_analysis: true,\n  named_entity_recognition: true,\n  chapterization: true,\n  subtitles: true,\n  subtitles_config: { formats: [\"srt\", \"vtt\"] },\n  pii_redaction: true,\n  pii_redaction_config: {\n    policy: \"mask\",\n    entities: [\"person\", \"location\", \"phone_number\"],\n  },\n  audio_to_llm: true,\n  audio_to_llm_config: { prompts: [\"Summarize the key decisions made\"] },\n  custom_vocabulary: true,\n  custom_vocabulary_config: {\n    vocabulary: [\n      { value: \"Gladia\", intensity: 0.5 },\n      { value: \"Kubernetes\", pronunciations: [\"koo-ber-net-eez\"] },\n    ],\n  },\n\n  // Delivery\n  callback_url: \"https://your-server.com/webhook\",\n});\n```\n\n## Full Options Example (Python)\n\n```python\nresult = client.prerecorded().transcribe(\"audio.mp3\", {\n    \"language_config\": {\"languages\": [\"en\", \"fr\"], \"code_switching\": True},\n    \"diarization\": True,\n    \"diarization_config\": {\"number_of_speakers\": 3},\n    \"translation\": True,\n    \"translation_config\": {\"target_languages\": [\"fr\", \"es\"]},\n    \"summarization\": True,\n    \"summarization_config\": {\"type\": \"bullet_points\"},\n    \"sentiment_analysis\": True,\n    \"named_entity_recognition\": True,\n    \"chapterization\": True,\n    \"subtitles\": True,\n    \"subtitles_config\": {\"formats\": [\"srt\", \"vtt\"]},\n    \"pii_redaction\": True,\n    \"pii_redaction_config\": {\"policy\": \"mask\", \"entities\": [\"person\", \"location\", \"phone_number\"]},\n    \"audio_to_llm\": True,\n    \"audio_to_llm_config\": {\"prompts\": [\"Summarize the key decisions made\"]},\n    \"custom_vocabulary\": True,\n    \"custom_vocabulary_config\": {\n        \"vocabulary\": [\n            {\"value\": \"Gladia\", \"intensity\": 0.5},\n            {\"value\": \"Kubernetes\", \"pronunciations\": [\"koo-ber-net-eez\"]},\n        ],\n    },\n    \"callback_url\": \"https://your-server.com/webhook\",\n})\n```\n\n## Options Quick Reference\n\n| Option                                  | Type       | Description                             |\n| --------------------------------------- | ---------- | --------------------------------------- |\n| `language_config.languages`             | `string[]` | Expected languages (ISO 639-1)          |\n| `language_config.code_switching`        | `bool`     | Detect language changes mid-speech      |\n| `diarization`                           | `bool`     | Speaker identification                  |\n| `diarization_config.number_of_speakers` | `int`      | Exact speaker count (overrides min/max) |\n| `translation`                           | `bool`     | Translate transcript                    |\n| `translation_config.target_languages`   | `string[]` | Target language codes                   |\n| `summarization`                         | `bool`     | Generate summary                        |\n| `summarization_config.type`             | `string`   | `bullet_points` or `paragraph`          |\n| `sentiment_analysis`                    | `bool`     | Per-utterance sentiment                 |\n| `named_entity_recognition`              | `bool`     | Entity extraction                       |\n| `chapterization`                        | `bool`     | Chapter segmentation                    |\n| `subtitles`                             | `bool`     | Generate subtitle files                 |\n| `subtitles_config.formats`              | `string[]` | `srt`, `vtt`                            |\n| `pii_redaction`                         | `bool`     | Redact PII                              |\n| `pii_redaction_config.policy`           | `string`   | `mask` or `tag`                         |\n| `audio_to_llm`                          | `bool`     | Run LLM prompts on transcript           |\n| `custom_vocabulary`                     | `bool`     | Domain-specific terms                   |\n| `callback_url`                          | `string`   | Webhook URL for async delivery          |\n\nFile v1.0.2:skill-card.md\n\n## Description:\n\nGuides agents to transcribe pre-recorded audio files or URLs with Gladia, including asynchronous jobs, diarization, subtitles, PII redaction, translation, summarization, chapterization, and audio-to-LLM options.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[gladiaio](https://clawhub.ai/user/gladiaio)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to implement or guide batch transcription workflows for existing audio or video files and URLs with Gladia. It supports configuring transcription options, polling or webhook delivery, reading results, and managing completed jobs.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Using the skill can upload media and transcript results to Gladia or configured webhook URLs.\n\nMitigation: Use the skill only with content approved for external processing and prefer trusted HTTPS callback endpoints under the user's control.\n\nRisk: Job deletion operations can remove transcription data when the wrong job ID is used.\n\nMitigation: Verify job IDs and intended retention behavior before issuing delete operations.\n\n## Reference(s):\n\n- [Transcription Options Reference](references/transcription-options.md)\n- [Managing Pre-Recorded Jobs](references/managing-jobs.md)\n- [Delivery and Response Reference](references/delivery-and-response.md)\n- [Pre-recorded quickstart](https://docs.gladia.io/chapters/pre-recorded-stt/quickstart)\n- [Audio intelligence overview](https://docs.gladia.io/chapters/pre-recorded-stt/audio-intelligence)\n- [API reference: pre-recorded init](https://docs.gladia.io/api-reference/v2/pre-recorded/init)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, code, API calls, configuration, markdown]\n\n**Output Format:** [Markdown with JavaScript, TypeScript, Python, and REST examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include transcription configuration, polling guidance, webhook handling guidance, response parsing, and job management steps.]\n\n## Skill Version(s):\n\n1.0.2 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.1: 6 files, 8177 bytes\n\nFiles: references/delivery-and-response.md (1234b), references/managing-jobs.md (2895b), references/transcription-options.md (4892b), skill-card.md (2967b), SKILL.md (7369b), _meta.json (152b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: gladia-pre-recorded-transcription\ndescription: Transcribe pre-recorded audio files or URLs with Gladia. Use when the user needs batch/async transcription, speaker diarization, subtitles (SRT/VTT), PII redaction, translation, NER, summarization, chapterization, audio-to-LLM, or any audio intelligence on pre-recorded content. Always prefer the official SDK; fall back to raw REST only when SDK cannot satisfy the requirement.\nlicense: MIT\n---\n\n# Pre-Recorded Transcription\n\nGladia's pre-recorded API transcribes audio and video files asynchronously.\n\n> **SDK-first**: always use the official SDK — see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md) for policy, setup, and fallback criteria.\n\n## When to Use\n\n- Existing audio/video files or URLs (including social/video links)\n- Batch or asynchronous transcription workflows\n- Pre-recorded-only features: diarization, PII redaction, subtitles\n\n**When NOT to use:** If the user needs real-time / live transcription of a stream, microphone, or ongoing audio feed, use the [gladia-live-transcription skill](../gladia-live-transcription/SKILL.md) instead. Live transcription uses WebSocket sessions, not the pre-recorded API.\n\n## References\n\nConsult these resources as needed:\n\n- ./references/transcription-options.md -- Full options (JS + Python)\n- ./references/managing-jobs.md -- `get`, `list`, `getFile`, `delete`\n- ./references/delivery-and-response.md -- Response shape and events\n- ../gladia-audio-intelligence/SKILL.md -- Feature availability and config\n- ../gladia-sdk-integration/SKILL.md -- Setup, config, SDK vs raw API\n- ../gladia-sdk-integration/references/sdk-versions.md -- Current SDK versions\n- ../gladia-troubleshooting/SKILL.md -- Errors and diagnostics\n\n## API Endpoints (reference — prefer SDK methods instead)\n\n| Endpoint                    | Method | SDK equivalent                          |\n| --------------------------- | ------ | --------------------------------------- |\n| `/v2/upload`                | POST   | `transcribe()` auto-uploads local files |\n| `/v2/pre-recorded`          | POST   | `create()` / `transcribe()`             |\n| `/v2/pre-recorded`          | GET    | `list()`                                |\n| `/v2/pre-recorded/:id`      | GET    | `get()` / `poll()` / `transcribe()`     |\n| `/v2/pre-recorded/:id`      | DELETE | `delete()`                              |\n| `/v2/pre-recorded/:id/file` | GET    | `getFile()`                             |\n\n## Workflow\n\n### Recommended (SDK)\n\nThe SDK `transcribe()` method handles upload, job creation, and polling in one call. Use this by default.\n\n```typescript\nconst result = await client.preRecorded().transcribe(\"./audio.mp3\", {\n  language_config: { languages: [\"en\"] },\n  diarization: true,\n});\n\nconsole.log(result.result?.transcription?.full_transcript);\n```\n\n```python\nresult = client.prerecorded().transcribe(\n    \"audio.mp3\",\n    {\"language_config\": {\"languages\": [\"en\"]}, \"diarization\": True},\n)\n\nprint(result.result.transcription.full_transcript)\n```\n\nAudio input can be a local file path, HTTP(S) URL, social/video URL, or binary file object. For full input types, see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md#audio-input-types).\n\n### Fallback (raw REST — only when SDK is not feasible)\n\nUse raw REST only when SDK use is not possible.\n\n1. **Upload** (if local file): `POST /v2/upload` with multipart form data → get `audio_url`\n2. **Create job**: `POST /v2/pre-recorded` with `audio_url` and config → get `id`\n3. **Poll**: `GET /v2/pre-recorded/:id` until `status: \"done\"` (or use webhooks/callbacks)\n4. **Parse results**: Extract `transcription`, `diarization`, `translation`, etc. from response\n\n## Managing Jobs\n\nUse SDK methods for post-processing operations:\n\n- JavaScript: `client.preRecorded().get(id)`, `.list(filters)`, `.getFile(id)`, `.delete(id)`\n- Python: `client.prerecorded().get(id)`, `.list(filters)`, `.get_file(id)`, `.delete(id)`\n\nFor full JS/Python examples, pagination filters, and REST equivalents, see [./references/managing-jobs.md](./references/managing-jobs.md).\n\n## Transcription Options\n\nAll options are passed as the second argument to `transcribe()`. Key options:\n\n| Option            | Description                                 |\n| ----------------- | ------------------------------------------- |\n| `language_config` | Expected languages, code switching          |\n| `diarization`     | Speaker identification (pre-recorded only)  |\n| `translation`     | Translate to target languages               |\n| `summarization`   | Generate bullet points or paragraph summary |\n| `subtitles`       | Generate SRT/VTT files                      |\n| `pii_redaction`   | Redact PII (pre-recorded only)              |\n| `audio_to_llm`    | Run custom LLM prompts on transcript        |\n| `callback_url`    | Async webhook delivery                      |\n\nFor full option details, see [./references/transcription-options.md](./references/transcription-options.md). For audio intelligence config, see [gladia-audio-intelligence](../gladia-audio-intelligence/SKILL.md). For client-level retry/timeouts, see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md#configuration-options).\n\n## Response and Delivery\n\nFor full response JSON and event names, see [./references/delivery-and-response.md](./references/delivery-and-response.md).\n\n## Limits and Specifications\n\n| Constraint              | Value                             |\n| ----------------------- | --------------------------------- |\n| Max file size           | 1000 MB                           |\n| Max duration            | 135 minutes (120 min for YouTube) |\n| Enterprise max duration | 4h15                              |\n| Concurrency (paid)      | 25 concurrent jobs                |\n| Concurrency (free)      | 3 concurrent jobs                 |\n\n## Polling Best Practices\n\nThe SDK handles polling automatically — `transcribe()` polls until the job completes with configurable `interval` and `timeout`:\n\n```typescript\nconst result = await client.preRecorded().transcribe(audio, options, {\n  interval: 5000, // Poll every 5s\n  timeout: 600000, // Timeout after 10 minutes\n});\n```\n\nIf using raw REST instead of the SDK:\n\n- Use webhooks or callbacks instead of polling when possible\n- If polling, implement exponential backoff (start at 3s, max 30s)\n\n## Common Mistakes\n\n- **Code switching without language list**: enabling `code_switching: true` with empty `languages` triggers 100+ language evaluation. Always provide 3-5 expected languages.\n- **Polling without backoff**: rapid polling wastes requests and may trigger 429s. The SDK handles this; for raw REST, use webhooks or exponential backoff.\n- **Expecting live-only features**: diarization, PII redaction, and subtitles are pre-recorded only — not available in live mode.\n- **Wrong audio file path**: the audio download endpoint is `/v2/pre-recorded/:id/file`, not `/v2/pre-recorded/:id/audio`.\n\nFor the full list of gotchas and diagnostics, see the [gladia-troubleshooting skill](../gladia-troubleshooting/SKILL.md).\n\n## Further Reading\n\n- [Pre-recorded quickstart](https://docs.gladia.io/chapters/pre-recorded-stt/quickstart)\n- [Audio intelligence overview](https://docs.gladia.io/chapters/pre-recorded-stt/audio-intelligence)\n- [API reference: init](https://docs.gladia.io/api-reference/v2/pre-recorded/init)\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7fs6cmj9hqg7232sbkacf31d882wp2\",\n  \"slug\": \"gladia-pre-recorded-transcription\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1780942643170\n}\n\nFile v1.0.1:references/delivery-and-response.md\n\n# Delivery and Response Reference\n\nReference for the pre-recorded job response shape and asynchronous delivery events.\n\n## Contents\n\n- Response Structure\n- Callback Events\n- Webhook Events\n\n## Response Structure\n\n```json\n{\n  \"id\": \"job-uuid\",\n  \"status\": \"done\",\n  \"result\": {\n    \"transcription\": {\n      \"full_transcript\": \"Hello, welcome to the meeting...\",\n      \"utterances\": [\n        {\n          \"text\": \"Hello, welcome to the meeting\",\n          \"language\": \"en\",\n          \"start\": 0.5,\n          \"end\": 2.1,\n          \"speaker\": 0,\n          \"words\": [{ \"word\": \"Hello\", \"start\": 0.5, \"end\": 0.8, \"confidence\": 0.98 }]\n        }\n      ]\n    },\n    \"diarization\": {},\n    \"translation\": {},\n    \"summarization\": {},\n    \"sentiment_analysis\": {}\n  }\n}\n```\n\n## Callback Events\n\nCallbacks are sent to the `callback_url` in your transcription request body:\n\n- `transcription.success` — job completed successfully\n- `transcription.error` — job failed\n\n## Webhook Events\n\nWebhooks are configured in Dashboard -> Account -> Webhooks:\n\n- `transcription.created` — job queued\n- `transcription.success` — job completed\n- `transcription.error` — job failed\n\nWebhooks are powered by Svix with signed requests for verification.\n\nFile v1.0.1:references/managing-jobs.md\n\n# Managing Pre-Recorded Jobs\n\nReference for retrieving, listing, downloading, and deleting pre-recorded transcription jobs.\n\n## Contents\n\n- Get a Single Job\n- List Jobs\n- List Query Parameters\n- Download Original Audio\n- Delete a Job\n\n## Get a Single Job\n\nFetch the status and full result payload for one job:\n\n```typescript\nconst job = await client.preRecorded().get(jobId);\nconsole.log(job.status); // \"queued\" | \"processing\" | \"done\" | \"error\"\nconsole.log(job.result?.transcription?.full_transcript);\n```\n\n```python\njob = client.prerecorded().get(job_id)\nprint(job.status)\nprint(job.result.transcription.full_transcript)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id`\n\n## List Jobs\n\nRetrieve jobs with optional filters. The response is paginated.\n\n```typescript\nconst page = await client.preRecorded().list({\n  offset: 0,\n  limit: 20,\n  status: [\"done\"],\n  after_date: \"2026-01-01T00:00:00Z\",\n  before_date: \"2026-06-01T00:00:00Z\",\n  custom_metadata: { userId: \"abc123\" },\n});\n\nfor (const job of page.items) {\n  console.log(job.id, job.status);\n}\n\n// page.next is the URL for the next page (null when last page)\n```\n\n```python\npage = client.prerecorded().list(\n    offset=0,\n    limit=20,\n    status=[\"done\"],\n    after_date=\"2026-01-01T00:00:00Z\",\n    before_date=\"2026-06-01T00:00:00Z\",\n    custom_metadata={\"userId\": \"abc123\"},\n)\n\nfor job in page.items:\n    print(job.id, job.status)\n```\n\nRaw REST: `GET /v2/pre-recorded`\n\n## List Query Parameters\n\n| Parameter         | Type     | Description                                                 |\n| ----------------- | -------- | ----------------------------------------------------------- |\n| `offset`          | integer  | Pagination start (default `0`)                              |\n| `limit`           | integer  | Max items per page (default `20`, min `1`)                  |\n| `date`            | string   | Filter to a specific day (`YYYY-MM-DD`)                     |\n| `before_date`     | string   | Jobs created before this ISO 8601 datetime                  |\n| `after_date`      | string   | Jobs created after this ISO 8601 datetime                   |\n| `status`          | string[] | Filter by status: `queued`, `processing`, `done`, `error`   |\n| `custom_metadata` | object   | Filter by metadata key/value pairs attached at job creation |\n\nPagination fields in the response:\n\n- `first` (URL)\n- `current` (URL)\n- `next` (URL or `null`)\n- `items` (array)\n\n## Download Original Audio\n\nDownload the original audio used for transcription:\n\n```typescript\nconst audioBlob = await client.preRecorded().getFile(jobId);\n```\n\n```python\naudio_bytes = client.prerecorded().get_file(job_id)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id/file`\n\n## Delete a Job\n\nDelete a job and associated data:\n\n```typescript\nawait client.preRecorded().delete(jobId);\n```\n\n```python\nclient.prerecorded().delete(job_id)\n```\n\nRaw REST: `DELETE /v2/pre-recorded/:id`\n\nFile v1.0.1:references/transcription-options.md\n\n# Transcription Options Reference\n\nComplete configuration reference for all pre-recorded transcription options passed as the second argument to `transcribe()`.\n\n## Contents\n\n- Language Configuration\n- Audio Intelligence Options (full example)\n- Delivery (callbacks)\n\nFor client-level config (retry, timeouts, HTTP headers), see [gladia-sdk-integration](../../gladia-sdk-integration/SKILL.md#configuration-options). For detailed audio intelligence feature docs, see [gladia-audio-intelligence](../../gladia-audio-intelligence/SKILL.md).\n\n## Full Options Example (JavaScript/TypeScript)\n\n```typescript\nconst result = await client.preRecorded().transcribe(audioInput, {\n  // Language\n  language_config: {\n    languages: [\"en\", \"fr\"], // Expected languages (ISO 639-1)\n    code_switching: true, // Detect language changes mid-speech\n  },\n\n  // Audio Intelligence\n  diarization: true, // Speaker identification\n  diarization_config: { number_of_speakers: 3 },\n  translation: true,\n  translation_config: { target_languages: [\"fr\", \"es\"] },\n  summarization: true,\n  summarization_config: { type: \"bullet_points\" },\n  sentiment_analysis: true,\n  named_entity_recognition: true,\n  chapterization: true,\n  subtitles: true,\n  subtitles_config: { formats: [\"srt\", \"vtt\"] },\n  pii_redaction: true,\n  pii_redaction_config: {\n    policy: \"mask\",\n    entities: [\"person\", \"location\", \"phone_number\"],\n  },\n  audio_to_llm: true,\n  audio_to_llm_config: { prompts: [\"Summarize the key decisions made\"] },\n  custom_vocabulary: true,\n  custom_vocabulary_config: {\n    vocabulary: [\n      { value: \"Gladia\", intensity: 0.5 },\n      { value: \"Kubernetes\", pronunciations: [\"koo-ber-net-eez\"] },\n    ],\n  },\n\n  // Delivery\n  callback_url: \"https://your-server.com/webhook\",\n});\n```\n\n## Full Options Example (Python)\n\n```python\nresult = client.prerecorded().transcribe(\"audio.mp3\", {\n    \"language_config\": {\"languages\": [\"en\", \"fr\"], \"code_switching\": True},\n    \"diarization\": True,\n    \"diarization_config\": {\"number_of_speakers\": 3},\n    \"translation\": True,\n    \"translation_config\": {\"target_languages\": [\"fr\", \"es\"]},\n    \"summarization\": True,\n    \"summarization_config\": {\"type\": \"bullet_points\"},\n    \"sentiment_analysis\": True,\n    \"named_entity_recognition\": True,\n    \"chapterization\": True,\n    \"subtitles\": True,\n    \"subtitles_config\": {\"formats\": [\"srt\", \"vtt\"]},\n    \"pii_redaction\": True,\n    \"pii_redaction_config\": {\"policy\": \"mask\", \"entities\": [\"person\", \"location\", \"phone_number\"]},\n    \"audio_to_llm\": True,\n    \"audio_to_llm_config\": {\"prompts\": [\"Summarize the key decisions made\"]},\n    \"custom_vocabulary\": True,\n    \"custom_vocabulary_config\": {\n        \"vocabulary\": [\n            {\"value\": \"Gladia\", \"intensity\": 0.5},\n            {\"value\": \"Kubernetes\", \"pronunciations\": [\"koo-ber-net-eez\"]},\n        ],\n    },\n    \"callback_url\": \"https://your-server.com/webhook\",\n})\n```\n\n## Options Quick Reference\n\n| Option                                  | Type       | Description                             |\n| --------------------------------------- | ---------- | --------------------------------------- |\n| `language_config.languages`             | `string[]` | Expected languages (ISO 639-1)          |\n| `language_config.code_switching`        | `bool`     | Detect language changes mid-speech      |\n| `diarization`                           | `bool`     | Speaker identification                  |\n| `diarization_config.number_of_speakers` | `int`      | Exact speaker count (overrides min/max) |\n| `translation`                           | `bool`     | Translate transcript                    |\n| `translation_config.target_languages`   | `string[]` | Target language codes                   |\n| `summarization`                         | `bool`     | Generate summary                        |\n| `summarization_config.type`             | `string`   | `bullet_points` or `paragraph`          |\n| `sentiment_analysis`                    | `bool`     | Per-utterance sentiment                 |\n| `named_entity_recognition`              | `bool`     | Entity extraction                       |\n| `chapterization`                        | `bool`     | Chapter segmentation                    |\n| `subtitles`                             | `bool`     | Generate subtitle files                 |\n| `subtitles_config.formats`              | `string[]` | `srt`, `vtt`                            |\n| `pii_redaction`                         | `bool`     | Redact PII                              |\n| `pii_redaction_config.policy`           | `string`   | `mask` or `tag`                         |\n| `audio_to_llm`                          | `bool`     | Run LLM prompts on transcript           |\n| `custom_vocabulary`                     | `bool`     | Domain-specific terms                   |\n| `callback_url`                          | `string`   | Webhook URL for async delivery          |\n\nFile v1.0.1:skill-card.md\n\n## Description: <br>\nTranscribe pre-recorded audio files or URLs with Gladia for asynchronous transcription, diarization, subtitles, PII redaction, translation, named entity recognition, summarization, chapterization, and audio-to-LLM workflows. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[gladiaio](https://clawhub.ai/user/gladiaio) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and external teams use this skill to add Gladia pre-recorded audio and video transcription workflows, including batch jobs, polling, result retrieval, diarization, subtitles, redaction, translation, and summarization. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Audio recordings may contain confidential, regulated, or third-party information before they are sent to Gladia or downstream callback and LLM destinations. <br>\nMitigation: Use the skill only when authorized to process the recordings with Gladia and any configured webhook, callback, or audio-to-LLM destination. <br>\nRisk: Deleting the wrong transcription job can remove remote job data. <br>\nMitigation: Confirm job identifiers before delete operations and prefer explicit job lookup before destructive actions. <br>\nRisk: Raw REST polling without backoff can waste requests and trigger rate limits. <br>\nMitigation: Prefer the official SDK polling behavior or use callbacks/webhooks; if raw REST is required, apply exponential backoff. <br>\n\n\n## Reference(s): <br>\n- [Delivery and Response Reference](references/delivery-and-response.md) <br>\n- [Managing Pre-Recorded Jobs](references/managing-jobs.md) <br>\n- [Transcription Options Reference](references/transcription-options.md) <br>\n- [Pre-recorded quickstart](https://docs.gladia.io/chapters/pre-recorded-stt/quickstart) <br>\n- [Audio intelligence overview](https://docs.gladia.io/chapters/pre-recorded-stt/audio-intelligence) <br>\n- [API reference: pre-recorded init](https://docs.gladia.io/api-reference/v2/pre-recorded/init) <br>\n- [ClawHub skill page](https://clawhub.ai/gladiaio/gladia-pre-recorded-transcription) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, markdown, code, shell commands, configuration] <br>\n**Output Format:** [Markdown guidance with TypeScript and Python examples, REST endpoint references, and JSON response shapes] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include SDK-first implementation guidance, raw REST fallback steps, polling settings, callback configuration, and job-management commands.] <br>\n\n## Skill Version(s): <br>\n1.0.1 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 6 files, 8211 bytes\n\nFiles: references/delivery-and-response.md (1234b), references/managing-jobs.md (2895b), references/transcription-options.md (4892b), skill-card.md (2979b), SKILL.md (7365b), _meta.json (152b)\n\nFile v1.0.0:SKILL.md\n\nname: gladia-pre-recorded-transcription\ndescription: Transcribe pre-recorded audio files or URLs with Gladia. Use when the user needs batch/async transcription, speaker diarization, subtitles (SRT/VTT), PII redaction, translation, NER, summarization, chapterization, audio-to-LLM, or any audio intelligence on pre-recorded content. Always prefer the official SDK; fall back to raw REST only when SDK cannot satisfy the requirement.\nlicense: MIT\n---\n\n# Pre-Recorded Transcription\n\nGladia's pre-recorded API transcribes audio and video files asynchronously.\n\n> **SDK-first**: always use the official SDK — see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md) for policy, setup, and fallback criteria.\n\n## When to Use\n\n- Existing audio/video files or URLs (including social/video links)\n- Batch or asynchronous transcription workflows\n- Pre-recorded-only features: diarization, PII redaction, subtitles\n\n**When NOT to use:** If the user needs real-time / live transcription of a stream, microphone, or ongoing audio feed, use the [gladia-live-transcription skill](../gladia-live-transcription/SKILL.md) instead. Live transcription uses WebSocket sessions, not the pre-recorded API.\n\n## References\n\nConsult these resources as needed:\n\n- ./references/transcription-options.md -- Full options (JS + Python)\n- ./references/managing-jobs.md -- `get`, `list`, `getFile`, `delete`\n- ./references/delivery-and-response.md -- Response shape and events\n- ../gladia-audio-intelligence/SKILL.md -- Feature availability and config\n- ../gladia-sdk-integration/SKILL.md -- Setup, config, SDK vs raw API\n- ../gladia-sdk-integration/references/sdk-versions.md -- Current SDK versions\n- ../gladia-troubleshooting/SKILL.md -- Errors and diagnostics\n\n## API Endpoints (reference — prefer SDK methods instead)\n\n| Endpoint                    | Method | SDK equivalent                          |\n| --------------------------- | ------ | --------------------------------------- |\n| `/v2/upload`                | POST   | `transcribe()` auto-uploads local files |\n| `/v2/pre-recorded`          | POST   | `create()` / `transcribe()`             |\n| `/v2/pre-recorded`          | GET    | `list()`                                |\n| `/v2/pre-recorded/:id`      | GET    | `get()` / `poll()` / `transcribe()`     |\n| `/v2/pre-recorded/:id`      | DELETE | `delete()`                              |\n| `/v2/pre-recorded/:id/file` | GET    | `getFile()`                             |\n\n## Workflow\n\n### Recommended (SDK)\n\nThe SDK `transcribe()` method handles upload, job creation, and polling in one call. Use this by default.\n\n```typescript\nconst result = await client.preRecorded().transcribe(\"./audio.mp3\", {\n  language_config: { languages: [\"en\"] },\n  diarization: true,\n});\n\nconsole.log(result.result?.transcription?.full_transcript);\n```\n\n```python\nresult = client.prerecorded().transcribe(\n    \"audio.mp3\",\n    {\"language_config\": {\"languages\": [\"en\"]}, \"diarization\": True},\n)\n\nprint(result.result.transcription.full_transcript)\n```\n\nAudio input can be a local file path, HTTP(S) URL, social/video URL, or binary file object. For full input types, see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md#audio-input-types).\n\n### Fallback (raw REST — only when SDK is not feasible)\n\nUse raw REST only when SDK use is not possible.\n\n1. **Upload** (if local file): `POST /v2/upload` with multipart form data → get `audio_url`\n2. **Create job**: `POST /v2/pre-recorded` with `audio_url` and config → get `id`\n3. **Poll**: `GET /v2/pre-recorded/:id` until `status: \"done\"` (or use webhooks/callbacks)\n4. **Parse results**: Extract `transcription`, `diarization`, `translation`, etc. from response\n\n## Managing Jobs\n\nUse SDK methods for post-processing operations:\n\n- JavaScript: `client.preRecorded().get(id)`, `.list(filters)`, `.getFile(id)`, `.delete(id)`\n- Python: `client.prerecorded().get(id)`, `.list(filters)`, `.get_file(id)`, `.delete(id)`\n\nFor full JS/Python examples, pagination filters, and REST equivalents, see [./references/managing-jobs.md](./references/managing-jobs.md).\n\n## Transcription Options\n\nAll options are passed as the second argument to `transcribe()`. Key options:\n\n| Option            | Description                                 |\n| ----------------- | ------------------------------------------- |\n| `language_config` | Expected languages, code switching          |\n| `diarization`     | Speaker identification (pre-recorded only)  |\n| `translation`     | Translate to target languages               |\n| `summarization`   | Generate bullet points or paragraph summary |\n| `subtitles`       | Generate SRT/VTT files                      |\n| `pii_redaction`   | Redact PII (pre-recorded only)              |\n| `audio_to_llm`    | Run custom LLM prompts on transcript        |\n| `callback_url`    | Async webhook delivery                      |\n\nFor full option details, see [./references/transcription-options.md](./references/transcription-options.md). For audio intelligence config, see [gladia-audio-intelligence](../gladia-audio-intelligence/SKILL.md). For client-level retry/timeouts, see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md#configuration-options).\n\n## Response and Delivery\n\nFor full response JSON and event names, see [./references/delivery-and-response.md](./references/delivery-and-response.md).\n\n## Limits and Specifications\n\n| Constraint              | Value                             |\n| ----------------------- | --------------------------------- |\n| Max file size           | 1000 MB                           |\n| Max duration            | 135 minutes (120 min for YouTube) |\n| Enterprise max duration | 4h15                              |\n| Concurrency (paid)      | 25 concurrent jobs                |\n| Concurrency (free)      | 3 concurrent jobs                 |\n\n## Polling Best Practices\n\nThe SDK handles polling automatically — `transcribe()` polls until the job completes with configurable `interval` and `timeout`:\n\n```typescript\nconst result = await client.preRecorded().transcribe(audio, options, {\n  interval: 5000, // Poll every 5s\n  timeout: 600000, // Timeout after 10 minutes\n});\n```\n\nIf using raw REST instead of the SDK:\n\n- Use webhooks or callbacks instead of polling when possible\n- If polling, implement exponential backoff (start at 3s, max 30s)\n\n## Common Mistakes\n\n- **Code switching without language list**: enabling `code_switching: true` with empty `languages` triggers 100+ language evaluation. Always provide 3-5 expected languages.\n- **Polling without backoff**: rapid polling wastes requests and may trigger 429s. The SDK handles this; for raw REST, use webhooks or exponential backoff.\n- **Expecting live-only features**: diarization, PII redaction, and subtitles are pre-recorded only — not available in live mode.\n- **Wrong audio file path**: the audio download endpoint is `/v2/pre-recorded/:id/file`, not `/v2/pre-recorded/:id/audio`.\n\nFor the full list of gotchas and diagnostics, see the [gladia-troubleshooting skill](../gladia-troubleshooting/SKILL.md).\n\n## Further Reading\n\n- [Pre-recorded quickstart](https://docs.gladia.io/chapters/pre-recorded-stt/quickstart)\n- [Audio intelligence overview](https://docs.gladia.io/chapters/pre-recorded-stt/audio-intelligence)\n- [API reference: init](https://docs.gladia.io/api-reference/v2/pre-recorded/init)\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7fs6cmj9hqg7232sbkacf31d882wp2\",\n  \"slug\": \"gladia-pre-recorded-transcription\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1780941703728\n}\n\nFile v1.0.0:references/delivery-and-response.md\n\n# Delivery and Response Reference\n\nReference for the pre-recorded job response shape and asynchronous delivery events.\n\n## Contents\n\n- Response Structure\n- Callback Events\n- Webhook Events\n\n## Response Structure\n\n```json\n{\n  \"id\": \"job-uuid\",\n  \"status\": \"done\",\n  \"result\": {\n    \"transcription\": {\n      \"full_transcript\": \"Hello, welcome to the meeting...\",\n      \"utterances\": [\n        {\n          \"text\": \"Hello, welcome to the meeting\",\n          \"language\": \"en\",\n          \"start\": 0.5,\n          \"end\": 2.1,\n          \"speaker\": 0,\n          \"words\": [{ \"word\": \"Hello\", \"start\": 0.5, \"end\": 0.8, \"confidence\": 0.98 }]\n        }\n      ]\n    },\n    \"diarization\": {},\n    \"translation\": {},\n    \"summarization\": {},\n    \"sentiment_analysis\": {}\n  }\n}\n```\n\n## Callback Events\n\nCallbacks are sent to the `callback_url` in your transcription request body:\n\n- `transcription.success` — job completed successfully\n- `transcription.error` — job failed\n\n## Webhook Events\n\nWebhooks are configured in Dashboard -> Account -> Webhooks:\n\n- `transcription.created` — job queued\n- `transcription.success` — job completed\n- `transcription.error` — job failed\n\nWebhooks are powered by Svix with signed requests for verification.\n\nFile v1.0.0:references/managing-jobs.md\n\n# Managing Pre-Recorded Jobs\n\nReference for retrieving, listing, downloading, and deleting pre-recorded transcription jobs.\n\n## Contents\n\n- Get a Single Job\n- List Jobs\n- List Query Parameters\n- Download Original Audio\n- Delete a Job\n\n## Get a Single Job\n\nFetch the status and full result payload for one job:\n\n```typescript\nconst job = await client.preRecorded().get(jobId);\nconsole.log(job.status); // \"queued\" | \"processing\" | \"done\" | \"error\"\nconsole.log(job.result?.transcription?.full_transcript);\n```\n\n```python\njob = client.prerecorded().get(job_id)\nprint(job.status)\nprint(job.result.transcription.full_transcript)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id`\n\n## List Jobs\n\nRetrieve jobs with optional filters. The response is paginated.\n\n```typescript\nconst page = await client.preRecorded().list({\n  offset: 0,\n  limit: 20,\n  status: [\"done\"],\n  after_date: \"2026-01-01T00:00:00Z\",\n  before_date: \"2026-06-01T00:00:00Z\",\n  custom_metadata: { userId: \"abc123\" },\n});\n\nfor (const job of page.items) {\n  console.log(job.id, job.status);\n}\n\n// page.next is the URL for the next page (null when last page)\n```\n\n```python\npage = client.prerecorded().list(\n    offset=0,\n    limit=20,\n    status=[\"done\"],\n    after_date=\"2026-01-01T00:00:00Z\",\n    before_date=\"2026-06-01T00:00:00Z\",\n    custom_metadata={\"userId\": \"abc123\"},\n)\n\nfor job in page.items:\n    print(job.id, job.status)\n```\n\nRaw REST: `GET /v2/pre-recorded`\n\n## List Query Parameters\n\n| Parameter         | Type     | Description                                                 |\n| ----------------- | -------- | ----------------------------------------------------------- |\n| `offset`          | integer  | Pagination start (default `0`)                              |\n| `limit`           | integer  | Max items per page (default `20`, min `1`)                  |\n| `date`            | string   | Filter to a specific day (`YYYY-MM-DD`)                     |\n| `before_date`     | string   | Jobs created before this ISO 8601 datetime                  |\n| `after_date`      | string   | Jobs created after this ISO 8601 datetime                   |\n| `status`          | string[] | Filter by status: `queued`, `processing`, `done`, `error`   |\n| `custom_metadata` | object   | Filter by metadata key/value pairs attached at job creation |\n\nPagination fields in the response:\n\n- `first` (URL)\n- `current` (URL)\n- `next` (URL or `null`)\n- `items` (array)\n\n## Download Original Audio\n\nDownload the original audio used for transcription:\n\n```typescript\nconst audioBlob = await client.preRecorded().getFile(jobId);\n```\n\n```python\naudio_bytes = client.prerecorded().get_file(job_id)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id/file`\n\n## Delete a Job\n\nDelete a job and associated data:\n\n```typescript\nawait client.preRecorded().delete(jobId);\n```\n\n```python\nclient.prerecorded().delete(job_id)\n```\n\nRaw REST: `DELETE /v2/pre-recorded/:id`\n\nFile v1.0.0:references/transcription-options.md\n\n# Transcription Options Reference\n\nComplete configuration reference for all pre-recorded transcription options passed as the second argument to `transcribe()`.\n\n## Contents\n\n- Language Configuration\n- Audio Intelligence Options (full example)\n- Delivery (callbacks)\n\nFor client-level config (retry, timeouts, HTTP headers), see [gladia-sdk-integration](../../gladia-sdk-integration/SKILL.md#configuration-options). For detailed audio intelligence feature docs, see [gladia-audio-intelligence](../../gladia-audio-intelligence/SKILL.md).\n\n## Full Options Example (JavaScript/TypeScript)\n\n```typescript\nconst result = await client.preRecorded().transcribe(audioInput, {\n  // Language\n  language_config: {\n    languages: [\"en\", \"fr\"], // Expected languages (ISO 639-1)\n    code_switching: true, // Detect language changes mid-speech\n  },\n\n  // Audio Intelligence\n  diarization: true, // Speaker identification\n  diarization_config: { number_of_speakers: 3 },\n  translation: true,\n  translation_config: { target_languages: [\"fr\", \"es\"] },\n  summarization: true,\n  summarization_config: { type: \"bullet_points\" },\n  sentiment_analysis: true,\n  named_entity_recognition: true,\n  chapterization: true,\n  subtitles: true,\n  subtitles_config: { formats: [\"srt\", \"vtt\"] },\n  pii_redaction: true,\n  pii_redaction_config: {\n    policy: \"mask\",\n    entities: [\"person\", \"location\", \"phone_number\"],\n  },\n  audio_to_llm: true,\n  audio_to_llm_config: { prompts: [\"Summarize the key decisions made\"] },\n  custom_vocabulary: true,\n  custom_vocabulary_config: {\n    vocabulary: [\n      { value: \"Gladia\", intensity: 0.5 },\n      { value: \"Kubernetes\", pronunciations: [\"koo-ber-net-eez\"] },\n    ],\n  },\n\n  // Delivery\n  callback_url: \"https://your-server.com/webhook\",\n});\n```\n\n## Full Options Example (Python)\n\n```python\nresult = client.prerecorded().transcribe(\"audio.mp3\", {\n    \"language_config\": {\"languages\": [\"en\", \"fr\"], \"code_switching\": True},\n    \"diarization\": True,\n    \"diarization_config\": {\"number_of_speakers\": 3},\n    \"translation\": True,\n    \"translation_config\": {\"target_languages\": [\"fr\", \"es\"]},\n    \"summarization\": True,\n    \"summarization_config\": {\"type\": \"bullet_points\"},\n    \"sentiment_analysis\": True,\n    \"named_entity_recognition\": True,\n    \"chapterization\": True,\n    \"subtitles\": True,\n    \"subtitles_config\": {\"formats\": [\"srt\", \"vtt\"]},\n    \"pii_redaction\": True,\n    \"pii_redaction_config\": {\"policy\": \"mask\", \"entities\": [\"person\", \"location\", \"phone_number\"]},\n    \"audio_to_llm\": True,\n    \"audio_to_llm_config\": {\"prompts\": [\"Summarize the key decisions made\"]},\n    \"custom_vocabulary\": True,\n    \"custom_vocabulary_config\": {\n        \"vocabulary\": [\n            {\"value\": \"Gladia\", \"intensity\": 0.5},\n            {\"value\": \"Kubernetes\", \"pronunciations\": [\"koo-ber-net-eez\"]},\n        ],\n    },\n    \"callback_url\": \"https://your-server.com/webhook\",\n})\n```\n\n## Options Quick Reference\n\n| Option                                  | Type       | Description                             |\n| --------------------------------------- | ---------- | --------------------------------------- |\n| `language_config.languages`             | `string[]` | Expected languages (ISO 639-1)          |\n| `language_config.code_switching`        | `bool`     | Detect language changes mid-speech      |\n| `diarization`                           | `bool`     | Speaker identification                  |\n| `diarization_config.number_of_speakers` | `int`      | Exact speaker count (overrides min/max) |\n| `translation`                           | `bool`     | Translate transcript                    |\n| `translation_config.target_languages`   | `string[]` | Target language codes                   |\n| `summarization`                         | `bool`     | Generate summary                        |\n| `summarization_config.type`             | `string`   | `bullet_points` or `paragraph`          |\n| `sentiment_analysis`                    | `bool`     | Per-utterance sentiment                 |\n| `named_entity_recognition`              | `bool`     | Entity extraction                       |\n| `chapterization`                        | `bool`     | Chapter segmentation                    |\n| `subtitles`                             | `bool`     | Generate subtitle files                 |\n| `subtitles_config.formats`              | `string[]` | `srt`, `vtt`                            |\n| `pii_redaction`                         | `bool`     | Redact PII                              |\n| `pii_redaction_config.policy`           | `string`   | `mask` or `tag`                         |\n| `audio_to_llm`                          | `bool`     | Run LLM prompts on transcript           |\n| `custom_vocabulary`                     | `bool`     | Domain-specific terms                   |\n| `callback_url`                          | `string`   | Webhook URL for async delivery          |\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nTranscribe pre-recorded audio files or URLs with Gladia using its asynchronous API, including options for diarization, subtitles, PII redaction, translation, summarization, named entity recognition, chapterization, and audio-to-LLM workflows. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[gladiaio](https://clawhub.ai/user/gladiaio) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and teams use this skill to build batch or asynchronous transcription and audio-intelligence workflows for existing audio, video, and URL-based media. It guides agents toward Gladia SDK usage first, with raw REST API fallback only when SDK methods are not feasible. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Audio, video, URLs, transcripts, metadata, and webhook callbacks may be sent to Gladia as an external provider. <br>\nMitigation: Confirm organizational approval for Gladia's terms, retention, and compliance posture before using the skill with confidential, regulated, or sensitive recordings. <br>\nRisk: Callback or webhook delivery can expose job and transcript data if endpoints are not secured. <br>\nMitigation: Use HTTPS callback URLs, verify signed webhook requests where applicable, and avoid placing secrets or sensitive metadata in URLs. <br>\nRisk: Raw REST polling without backoff can waste requests or trigger rate limits. <br>\nMitigation: Prefer SDK polling, callbacks, or webhooks; when raw REST is required, use exponential backoff as described by the artifact guidance. <br>\n\n\n## Reference(s): <br>\n- [Transcription Options Reference](artifact/references/transcription-options.md) <br>\n- [Managing Pre-Recorded Jobs](artifact/references/managing-jobs.md) <br>\n- [Delivery and Response Reference](artifact/references/delivery-and-response.md) <br>\n- [Gladia pre-recorded quickstart](https://docs.gladia.io/chapters/pre-recorded-stt/quickstart) <br>\n- [Gladia audio intelligence overview](https://docs.gladia.io/chapters/pre-recorded-stt/audio-intelligence) <br>\n- [Gladia API reference: pre-recorded init](https://docs.gladia.io/api-reference/v2/pre-recorded/init) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, code, shell commands, configuration] <br>\n**Output Format:** [Markdown with TypeScript, Python, JSON, and REST examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include SDK-first workflow guidance, API request options, polling or webhook recommendations, job-management steps, and result parsing notes.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: gladia-pre-recorded-transcription Owner: gladiaio Summary: Transcribe pre-recorded audio files or URLs with Gladia. Use when the user needs batch/async transcription, speaker diarization, subtitles (SRT/VTT), PII redaction, translation, NER, summarization, audio-to-LLM, or any audio intelligence on pre-recorded content. Always prefer the official SDK; fall back to raw REST only when SDK cannot satisfy the requ","codeSnippets":[],"executableExamples":[{"language":"typescript","snippet":"const result = await client.preRecorded().transcribe(\"./audio.mp3\", {\n  language_config: { languages: [\"en\"] },\n  diarization: true,\n});\n\nconsole.log(result.result?.transcription?.full_transcript);"},{"language":"python","snippet":"result = client.prerecorded().transcribe(\n    \"audio.mp3\",\n    {\"language_config\": {\"languages\": [\"en\"]}, \"diarization\": True},\n)\n\nprint(result.result.transcription.full_transcript)"},{"language":"typescript","snippet":"const result = await client.preRecorded().transcribe(audio, options, {\n  interval: 5000, // Poll every 5s\n  timeout: 600000, // Timeout after 10 minutes\n});"},{"language":"json","snippet":"{\n  \"id\": \"job-uuid\",\n  \"status\": \"done\",\n  \"result\": {\n    \"transcription\": {\n      \"full_transcript\": \"Hello, welcome to the meeting...\",\n      \"utterances\": [\n        {\n          \"text\": \"Hello, welcome to the meeting\",\n          \"language\": \"en\",\n          \"start\": 0.5,\n          \"end\": 2.1,\n          \"speaker\": 0,\n          \"words\": [{ \"word\": \"Hello\", \"start\": 0.5, \"end\": 0.8, \"confidence\": 0.98 }]\n        }\n      ]\n    },\n    \"diarization\": {},\n    \"translation\": {},\n    \"summarization\": {},\n    \"sentiment_analysis\": {}\n  }\n}"},{"language":"typescript","snippet":"const job = await client.preRecorded().get(jobId);\nconsole.log(job.status); // \"queued\" | \"processing\" | \"done\" | \"error\"\nconsole.log(job.result?.transcription?.full_transcript);"},{"language":"python","snippet":"job = client.prerecorded().get(job_id)\nprint(job.status)\nprint(job.result.transcription.full_transcript)"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: gladia-pre-recorded-transcription\ndescription: Transcribe pre-recorded audio files or URLs with Gladia. Use when the user needs batch/async transcription, speaker diarization, subtitles (SRT/VTT), PII redaction, translation, NER, summarization, audio-to-LLM, or any audio intelligence on pre-recorded content. Always prefer the official SDK; fall back to raw REST only when SDK cannot satisfy the requirement.\nlicense: MIT\n---\n\n# Pre-Recorded Transcription\n\nGladia's pre-recorded API transcribes audio and video files asynchronously.\n\n> **SDK-first**: always use the official SDK — see [gladia-sdk-integration](../gladia-sdk-integration/SKILL.md) for policy, setup, and fallback criteria.\n\n## When to Use\n\n- Existing audio/video files or URLs (including social/video links)\n- Batch or asynchronous transcription workflows\n- Pre-recorded-only features: diarization, PII redaction, subtitles\n\n**When NOT to use:** If the user needs real-time / live transcription of a stream, microphone, or ongoing audio feed, use the [gladia-live-transcription skill](../gladia-live-transcription/SKILL.md) instead. Live transcription uses WebSocket sessions, not the pre-recorded API. If the user has gladia-cli installed and wants a quick terminal workflow without writing code, use [gladia-using-cli](../gladia-using-cli/SKILL.md) instead.\n\n## References\n\nConsult these resources as needed:\n\n- ./references/transcription-options.md -- Full options (JS + Python)\n- ./references/managing-jobs.md -- `get`, `list`, `getFile`, `delete`\n- ./references/delivery-and-response.md -- Response shape and events\n- ../gladia-audio-intelligence/SKILL.md -- Feature availability and config\n- ../gladia-using-cli/SKILL.md -- Terminal workflow with gladia-cli\n- ../gladia-sdk-integration/SKILL.md -- Setup, config, SDK vs raw API\n- ../gladia-sdk-integration/references/sdk-versions.md -- Current SDK versions\n- ../gladia-troubleshooting/SKILL.md -- Errors and diagnostics\n\n## API Endpoints (reference — prefer SDK methods instead)\n\n| Endpoint                    | Method | SDK equivalent                          |\n| --------------------------- | ------ | --------------------------------------- |\n| `/v2/upload`                | POST   | `transcribe()` auto-uploads local files |\n| `/v2/pre-recorded`          | POST   | `create()` / `transcribe()`             |\n| `/v2/pre-recorded`          | GET    | `list()`                                |\n| `/v2/pre-recorded/:id`      | GET    | `get()` / `poll()` / `transcribe()`     |\n| `/v2/pre-recorded/:id`      | DELETE | `delete()`                              |\n| `/v2/pre-recorded/:id/file` | GET    | `getFile()`                             |\n\n## Workflow\n\n### Recommended (SDK)\n\nThe SDK `transcribe()` method handles upload, job creation, and polling in one call. Use this by default.\n\n```typescript\nconst result = await client.preRecorded().transcribe(\"./audio.mp3\", {\n  language_config: { languages: [\"en\"] },\n  diarization: true,\n});\n\nconsole.log(result.result?.t"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7fs6cmj9hqg7232sbkacf31d882wp2\",\n  \"slug\": \"gladia-pre-recorded-transcription\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1790953650699\n}"},{"path":"references/delivery-and-response.md","content":"# Delivery and Response Reference\n\nReference for the pre-recorded job response shape and asynchronous delivery events.\n\n## Contents\n\n- Response Structure\n- Callback Events\n- Webhook Events\n\n## Response Structure\n\n```json\n{\n  \"id\": \"job-uuid\",\n  \"status\": \"done\",\n  \"result\": {\n    \"transcription\": {\n      \"full_transcript\": \"Hello, welcome to the meeting...\",\n      \"utterances\": [\n        {\n          \"text\": \"Hello, welcome to the meeting\",\n          \"language\": \"en\",\n          \"start\": 0.5,\n          \"end\": 2.1,\n          \"speaker\": 0,\n          \"words\": [{ \"word\": \"Hello\", \"start\": 0.5, \"end\": 0.8, \"confidence\": 0.98 }]\n        }\n      ]\n    },\n    \"diarization\": {},\n    \"translation\": {},\n    \"summarization\": {},\n    \"sentiment_analysis\": {}\n  }\n}\n```\n\n## Callback Events\n\nCallbacks are sent to the `callback_url` in your transcription request body:\n\n- `transcription.success` — job completed successfully\n- `transcription.error` — job failed\n\n## Webhook Events\n\nWebhooks are configured in Dashboard -> Account -> Webhooks:\n\n- `transcription.created` — job queued\n- `transcription.success` — job completed\n- `transcription.error` — job failed\n\nWebhooks are powered by Svix with signed requests for verification."},{"path":"references/managing-jobs.md","content":"# Managing Pre-Recorded Jobs\n\nReference for retrieving, listing, downloading, and deleting pre-recorded transcription jobs.\n\n## Contents\n\n- Get a Single Job\n- List Jobs\n- List Query Parameters\n- Download Original Audio\n- Delete a Job\n\n## Get a Single Job\n\nFetch the status and full result payload for one job:\n\n```typescript\nconst job = await client.preRecorded().get(jobId);\nconsole.log(job.status); // \"queued\" | \"processing\" | \"done\" | \"error\"\nconsole.log(job.result?.transcription?.full_transcript);\n```\n\n```python\njob = client.prerecorded().get(job_id)\nprint(job.status)\nprint(job.result.transcription.full_transcript)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id`\n\n## List Jobs\n\nRetrieve jobs with optional filters. The response is paginated.\n\n```typescript\nconst page = await client.preRecorded().list({\n  offset: 0,\n  limit: 20,\n  status: [\"done\"],\n  after_date: \"2026-01-01T00:00:00Z\",\n  before_date: \"2026-06-01T00:00:00Z\",\n  custom_metadata: { userId: \"abc123\" },\n});\n\nfor (const job of page.items) {\n  console.log(job.id, job.status);\n}\n\n// page.next is the URL for the next page (null when last page)\n```\n\n```python\npage = client.prerecorded().list(\n    offset=0,\n    limit=20,\n    status=[\"done\"],\n    after_date=\"2026-01-01T00:00:00Z\",\n    before_date=\"2026-06-01T00:00:00Z\",\n    custom_metadata={\"userId\": \"abc123\"},\n)\n\nfor job in page.items:\n    print(job.id, job.status)\n```\n\nRaw REST: `GET /v2/pre-recorded`\n\n## List Query Parameters\n\n| Parameter         | Type     | Description                                                 |\n| ----------------- | -------- | ----------------------------------------------------------- |\n| `offset`          | integer  | Pagination start (default `0`)                              |\n| `limit`           | integer  | Max items per page (default `20`, min `1`)                  |\n| `date`            | string   | Filter to a specific day (`YYYY-MM-DD`)                     |\n| `before_date`     | string   | Jobs created before this ISO 8601 datetime                  |\n| `after_date`      | string   | Jobs created after this ISO 8601 datetime                   |\n| `status`          | string[] | Filter by status: `queued`, `processing`, `done`, `error`   |\n| `custom_metadata` | object   | Filter by metadata key/value pairs attached at job creation |\n\nPagination fields in the response:\n\n- `first` (URL)\n- `current` (URL)\n- `next` (URL or `null`)\n- `items` (array)\n\n## Download Original Audio\n\nDownload the original audio used for transcription:\n\n```typescript\nconst audioBlob = await client.preRecorded().getFile(jobId);\n```\n\n```python\naudio_bytes = client.prerecorded().get_file(job_id)\n```\n\nRaw REST: `GET /v2/pre-recorded/:id/file`\n\n## Delete a Job\n\nDelete a job and associated data:\n\n```typescript\nawait client.preRecorded().delete(jobId);\n```\n\n```python\nclient.prerecorded().delete(job_id)\n```\n\nRaw REST: `DELETE /v2/pre-recorded/:id`"},{"path":"references/transcription-options.md","content":"# Transcription Options Reference\n\nComplete configuration reference for all pre-recorded transcription options passed as the second argument to `transcribe()`.\n\n## Contents\n\n- Language Configuration\n- Audio Intelligence Options (full example)\n- Delivery (callbacks)\n\nFor client-level config (retry, timeouts, HTTP headers), see [gladia-sdk-integration](../../gladia-sdk-integration/SKILL.md#configuration-options). For detailed audio intelligence feature docs, see [gladia-audio-intelligence](../../gladia-audio-intelligence/SKILL.md).\n\n## Full Options Example (JavaScript/TypeScript)\n\n```typescript\nconst result = await client.preRecorded().transcribe(audioInput, {\n  // Language\n  language_config: {\n    languages: [\"en\", \"fr\"], // Expected languages (ISO 639-1)\n    code_switching: true, // Detect language changes mid-speech\n  },\n\n  // Audio Intelligence\n  diarization: true, // Speaker identification\n  diarization_config: { number_of_speakers: 3 },\n  translation: true,\n  translation_config: { target_languages: [\"fr\", \"es\"] },\n  summarization: true,\n  summarization_config: { type: \"bullet_points\" },\n  sentiment_analysis: true,\n  named_entity_recognition: true,\n  subtitles: true,\n  subtitles_config: { formats: [\"srt\", \"vtt\"] },\n  pii_redaction: true,\n  pii_redaction_config: {\n    policy: \"mask\",\n    entities: [\"person\", \"location\", \"phone_number\"],\n  },\n  audio_to_llm: true,\n  audio_to_llm_config: { prompts: [\"Summarize the key decisions made\"] },\n  custom_vocabulary: true,\n  custom_vocabulary_config: {\n    vocabulary: [\n      { value: \"Gladia\", intensity: 0.5 },\n      { value: \"Kubernetes\", pronunciations: [\"koo-ber-net-eez\"] },\n    ],\n  },\n\n  // Delivery\n  callback_url: \"https://your-server.com/webhook\",\n});\n```\n\n## Full Options Example (Python)\n\n```python\nresult = client.prerecorded().transcribe(\"audio.mp3\", {\n    \"language_config\": {\"languages\": [\"en\", \"fr\"], \"code_switching\": True},\n    \"diarization\": True,\n    \"diarization_config\": {\"number_of_speakers\": 3},\n    \"translation\": True,\n    \"translation_config\": {\"target_languages\": [\"fr\", \"es\"]},\n    \"summarization\": True,\n    \"summarization_config\": {\"type\": \"bullet_points\"},\n    \"sentiment_analysis\": True,\n    \"named_entity_recognition\": True,\n    \"subtitles\": True,\n    \"subtitles_config\": {\"formats\": [\"srt\", \"vtt\"]},\n    \"pii_redaction\": True,\n    \"pii_redaction_config\": {\"policy\": \"mask\", \"entities\": [\"person\", \"location\", \"phone_number\"]},\n    \"audio_to_llm\": True,\n    \"audio_to_llm_config\": {\"prompts\": [\"Summarize the key decisions made\"]},\n    \"custom_vocabulary\": True,\n    \"custom_vocabulary_config\": {\n        \"vocabulary\": [\n            {\"value\": \"Gladia\", \"intensity\": 0.5},\n            {\"value\": \"Kubernetes\", \"pronunciations\": [\"koo-ber-net-eez\"]},\n        ],\n    },\n    \"callback_url\": \"https://your-server.com/webhook\",\n})\n```\n\n## Options Quick Reference\n\n| Option                                  | Type       | Description                             |\n| ---------------------------------------"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1369,"uniquenessScore":40,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-12T01:48:37.425Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-12T01:48:37.425Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-13T09:26:06.798Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}