> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corsair.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Happy Scribe API reference

> API reference for the Happy Scribe plugin in Corsair: every `happyscribe.api.*` operation with its input and output types, taken from the plugin's Zod schemas.

> [!NOTE]
>
> **New to Corsair?** See [API access](https://docs.corsair.dev/concepts/api.md), [authentication](https://docs.corsair.dev/concepts/auth.md), and [error handling](https://docs.corsair.dev/concepts/error-handling).

## Companies

### get

`companies.get`

Read one discovered company with its enriched firmographics (Intelligence API)

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.companies.get({ companyId: 1, organizationId: 123 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `companyId` | `number` | Yes | Company ID to retrieve. |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `number` | Yes | — |
| `name` | `string \| null` | No | — |
| `primaryDomain` | `string \| null` | No | — |
| `domains` | `string[] \| null` | No | — |
| `industry` | `string \| null` | No | — |
| `employeeCount` | `number \| null` | No | — |
| `foundedYear` | `number \| null` | No | — |
| `shortDescription` | `string \| null` | No | — |
| `keywords` | `string[] \| null` | No | — |
| `city` | `string \| null` | No | — |
| `country` | `string \| null` | No | — |
| `websiteUrl` | `string \| null` | No | — |
| `linkedinUrl` | `string \| null` | No | — |
| `logoUrl` | `string \| null` | No | — |
| `totalFunding` | `number \| null` | No | — |
| `annualRevenue` | `number \| null` | No | — |
| `latestFundingStage` | `string \| null` | No | — |
| `createdAt` | `string \| null` | No | — |
| `updatedAt` | `string \| null` | No | — |

***

### list

`companies.list`

List companies discovered from meeting transcripts (Intelligence API; 404 when the organization is not enrolled)

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.companies.list({ organizationId: 123, domain: 'acme.com' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |
| `search` | `string` | No | Case-insensitive substring match on company name. |
| `domain` | `string` | No | Exact match on the primary domain or any known domain. |
| `page` | `number` | No | Page to retrieve; companies count from 1. |
| `perPage` | `number` | No | Results per page, up to 100; the default is 5. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `results` | `object[]` | Yes | — |
| `nextPageUrl` | `string \| null` | No | — |

> [accordion] results full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   primaryDomain?: string | null,
>   domains?: string[] | null,
>   industry?: string | null,
>   employeeCount?: number | null,
>   foundedYear?: number | null,
>   shortDescription?: string | null,
>   keywords?: string[] | null,
>   city?: string | null,
>   country?: string | null,
>   websiteUrl?: string | null,
>   linkedinUrl?: string | null,
>   logoUrl?: string | null,
>   totalFunding?: number | null,
>   annualRevenue?: number | null,
>   latestFundingStage?: string | null,
>   createdAt?: string | null,
>   updatedAt?: string | null
> }[]
> ```

***

## Exports

### create

`exports.create`

Start exporting one or more transcriptions to a format (txt, srt, vtt, docx, pdf, json). Follow with exports.get until state is ready

**Risk:** `write`

```ts theme={null}
await corsair.happyscribe.api.exports.create({ format: 'txt', transcriptionIds: ['9josdjdfo09j309omsldknslkjndfjknsdfs'] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `format` | `txt \| docx \| pdf \| srt \| vtt \| stl \| avid \| avid_script \| avid_ds_subtitles \| avid_edl \| facebook_srt \| html \| premiere \| maxqda \| json \| fcp \| edl \| csv \| xlsx \| mp3 \| mp4` | Yes | Export format, e.g. `txt`, `srt`, `vtt`, `docx`, `json`. |
| `transcriptionIds` | `string[]` | Yes | Transcription IDs to include in the export. |
| `showTimestamps` | `boolean` | No | Include timestamps in the exported file. |
| `showSpeakers` | `boolean` | No | Include speaker names. |
| `showComments` | `boolean` | No | Include comments. |
| `showHighlights` | `boolean` | No | Include highlights. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `state` | `string \| null` | No | — |
| `format` | `string \| null` | No | — |
| `show_timestamps` | `boolean \| null` | No | — |
| `show_speakers` | `boolean \| null` | No | — |
| `show_comments` | `boolean \| null` | No | — |
| `show_highlights` | `boolean \| null` | No | — |
| `transcription_ids` | `string[] \| null` | No | — |
| `download_link` | `string \| null` | No | — |

***

### get

`exports.get`

Where an export stands; once state is ready the answer carries its download\_link

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.exports.get({ exportId: '5d5b1a9b4c8c4c0001f3e4a2' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `exportId` | `string` | Yes | Export ID from an export creation. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `state` | `string \| null` | No | — |
| `format` | `string \| null` | No | — |
| `show_timestamps` | `boolean \| null` | No | — |
| `show_speakers` | `boolean \| null` | No | — |
| `show_comments` | `boolean \| null` | No | — |
| `show_highlights` | `boolean \| null` | No | — |
| `transcription_ids` | `string[] \| null` | No | — |
| `download_link` | `string \| null` | No | — |

***

## Glossaries

### list

`glossaries.list`

List the glossaries an organization can attach to human orders

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.glossaries.list({ organizationId: 123 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `glossaries` | `object[]` | Yes | — |

> [accordion] glossaries full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   source_language?: string | null,
>   target_languages?: string[] | null,
>   organization_default?: boolean | null,
>   imported?: boolean | null,
>   created_at?: string | null,
>   updated_at?: string | null
> }[]
> ```

***

## Meetings

### create

`meetings.create`

Send the HappyScribe notetaker bot to a meeting URL now or at joinAt; it records and transcribes. Follow with meetings.get until status is completed

**Risk:** `write`

```ts theme={null}
await corsair.happyscribe.api.meetings.create({ organizationId: 413, meetingUrl: 'https://zoom.us/j/123456789', joinAt: '2026-07-20T14:00:00Z', language: 'en' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |
| `meetingUrl` | `string` | Yes | Meeting room URL the notetaker joins, e.g. a Zoom or Meet link. |
| `joinAt` | `string` | No | Future ISO 8601 moment, with a UTC offset, for the notetaker to join. Omit to send it now. |
| `language` | `string` | No | Spoken language code, e.g. `en`, or `auto`. |
| `participants` | `object[]` | No | People on the call; the notetaker greets them by name. |
| `metadata` | `Record<string, any>` | No | Free-form metadata echoed on the meeting and its webhooks. |
| `botName` | `string` | No | Display name of the notetaker bot. |
| `recordingMode` | `audio_only \| audio_and_video` | No | What the notetaker records. |
| `summaryTemplate` | `string` | No | Summary template slug, e.g. `sales_call`. |

> [accordion] participants full type
>
> ```ts theme={null}
> {
>   email: string,
>   name: string
> }[]
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `object` | `string \| null` | No | — |
| `meeting_url` | `string \| null` | No | — |
| `join_at` | `string \| null` | No | — |
| `status` | `string \| null` | No | — |
| `language` | `string \| null` | No | — |
| `participants` | `object[] \| null` | No | — |
| `metadata` | `Record<string, any> \| null` | No | — |
| `settings` | `Record<string, any> \| null` | No | — |
| `transcription_id` | `string \| null` | No | — |
| `transcript` | `Record<string, any>[] \| null` | No | — |
| `summary` | `string \| null` | No | — |

> [accordion] participants full type
>
> ```ts theme={null}
> {
>   email?: string | null,
>   name?: string | null
> }[] | null
> ```

***

### get

`meetings.get`

Read one meeting: notetaker status (queued, joining, in\_call, processing, completed, failed, cancelled), settings, and the transcript and summary once ready

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.meetings.get({ meetingId: 'mtg_01k0h4r9s8x7c2dvq3m5n6p4ab' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `meetingId` | `string` | Yes | Meeting ID, e.g. `mtg_01k0h4r9s8x7c2dvq3m5n6p4ab`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `object` | `string \| null` | No | — |
| `meeting_url` | `string \| null` | No | — |
| `join_at` | `string \| null` | No | — |
| `status` | `string \| null` | No | — |
| `language` | `string \| null` | No | — |
| `participants` | `object[] \| null` | No | — |
| `metadata` | `Record<string, any> \| null` | No | — |
| `settings` | `Record<string, any> \| null` | No | — |
| `transcription_id` | `string \| null` | No | — |
| `transcript` | `Record<string, any>[] \| null` | No | — |
| `summary` | `string \| null` | No | — |

> [accordion] participants full type
>
> ```ts theme={null}
> {
>   email?: string | null,
>   name?: string | null
> }[] | null
> ```

***

## Memberships

### add

`memberships.add`

Add a user to an organization as admin or member, by email. An email new to HappyScribe gets an invitation email and the answer carries invite instead of member

**Risk:** `write`

```ts theme={null}
await corsair.happyscribe.api.memberships.add({ organizationId: 123, email: 'new-hire@acme.com', role: 'member' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |
| `email` | `string` | Yes | Email of the user to add. |
| `role` | `admin \| member` | Yes | Role the member gets. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `member` | `object \| null` | No | — |
| `invite` | `object \| null` | No | — |

> [accordion] member full type
>
> ```ts theme={null}
> {
>   id: number,
>   organization_id?: string | number | null,
>   organization_name?: string | null,
>   email?: string | null,
>   name?: string | null,
>   role?: string | null,
>   created_at?: string | null,
>   updated_at?: string | null
> } | null
> ```

> [accordion] invite full type
>
> ```ts theme={null}
> {
>   email?: string | null,
>   role?: string | null
> } | null
> ```

***

### list

`memberships.list`

List the members of an organization with their roles, 25 per page; nextPageUrl is set when another page exists

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.memberships.list({ organizationId: 123 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |
| `page` | `number` | No | Page to retrieve; memberships count from 1, 25 per page. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `members` | `object[]` | Yes | — |
| `nextPageUrl` | `string \| null` | No | — |

> [accordion] members full type
>
> ```ts theme={null}
> {
>   id: number,
>   organization_id?: string | number | null,
>   organization_name?: string | null,
>   email?: string | null,
>   name?: string | null,
>   role?: string | null,
>   created_at?: string | null,
>   updated_at?: string | null
> }[]
> ```

***

### remove

`memberships.remove`

Remove a user from the organization; their existing transcripts stay

**Risk:** `destructive`

```ts theme={null}
await corsair.happyscribe.api.memberships.remove({ membershipId: 9002 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `membershipId` | `number` | Yes | Membership ID to remove. |

**Output:** *empty object*

***

### updateRole

`memberships.updateRole`

Change a member's role between admin and member

**Risk:** `write`

```ts theme={null}
await corsair.happyscribe.api.memberships.updateRole({ membershipId: 9002, role: 'admin' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `membershipId` | `number` | Yes | Membership ID to change. |
| `role` | `admin \| member` | Yes | New role for the member. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `member` | `object \| null` | No | — |

> [accordion] member full type
>
> ```ts theme={null}
> {
>   id: number,
>   organization_id?: string | number | null,
>   organization_name?: string | null,
>   email?: string | null,
>   name?: string | null,
>   role?: string | null,
>   created_at?: string | null,
>   updated_at?: string | null
> } | null
> ```

***

## Orders

### confirm

`orders.confirm`

Confirm an incomplete order, which charges the organization and starts the work

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.happyscribe.api.orders.confirm({ orderId: '10b1edd9381d4a00a3d0db1ca1b3d0cf' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `orderId` | `string` | Yes | Incomplete order to confirm and pay for. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `folder_id` | `number \| null` | No | — |
| `state` | `string \| null` | No | — |
| `operations` | `Record<string, any>[] \| null` | No | — |
| `outputsIds` | `string[] \| null` | No | — |

***

### create

`orders.create`

Create a transcription or subtitling order for media at a URL: service auto (the default) is machine work, pro is human work. It stays incomplete and unpaid until orders.confirm or an explicit confirm flag

**Risk:** `destructive`

```ts theme={null}
await corsair.happyscribe.api.orders.create({ url: 'https://example.com/media.mp3', language: 'es', service: 'pro', organizationId: 123 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `url` | `string` | Yes | Public URL of the media to transcribe or subtitle. |
| `language` | `string` | Yes | Spoken language code of the media. |
| `service` | `auto \| pro` | No | `auto` (the default) for machine work, `pro` for human work. |
| `confirm` | `boolean` | No | Confirm and pay immediately instead of leaving the order incomplete. |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |
| `folderId` | `number` | No | Folder ID for the result. |
| `folder` | `string` | No | Folder path for the result, e.g. `my_project`. |
| `name` | `string` | No | Name of the ordered transcription. |
| `tags` | `string[]` | No | Tags to attach. |
| `boost` | `boolean` | No | Pay for faster delivery. |
| `isSubtitle` | `boolean` | No | Order subtitling instead of transcription. |
| `webhookUrl` | `string` | No | URL notified when the order finishes. |
| `glossaryIds` | `number[]` | No | Glossaries the human translators use. |
| `styleGuideId` | `number` | No | Style guide the human translators use. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `folder_id` | `number \| null` | No | — |
| `state` | `string \| null` | No | — |
| `operations` | `Record<string, any>[] \| null` | No | — |
| `outputsIds` | `string[] \| null` | No | — |

***

### createTranslation

`orders.createTranslation`

Create a translation order for an existing transcription: service auto (the default) is machine translation, pro is human. Incomplete and unpaid until confirmed

**Risk:** `destructive`

```ts theme={null}
await corsair.happyscribe.api.orders.createTranslation({ sourceTranscriptionId: '9josdjdfo09j309omsldknslkjndfjknsdfs', targetLanguages: ['es'], organizationId: 123 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `sourceTranscriptionId` | `string` | Yes | Transcription to translate. |
| `targetLanguages` | `string[]` | Yes | Languages to translate into. |
| `service` | `auto \| pro` | No | `auto` (the default) for machine translation, `pro` for human translators. |
| `confirm` | `boolean` | No | Confirm and pay immediately. |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |
| `webhookUrl` | `string` | No | URL notified each time the order changes state. |
| `glossaryIds` | `number[]` | No | Glossaries for the translators. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `folder_id` | `number \| null` | No | — |
| `state` | `string \| null` | No | — |
| `operations` | `Record<string, any>[] \| null` | No | — |
| `outputsIds` | `string[] \| null` | No | — |

***

### get

`orders.get`

Read one human-service order: state, operations, languages and pricing

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.orders.get({ orderId: '10b1edd9381d4a00a3d0db1ca1b3d0cf' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `orderId` | `string` | Yes | Order ID from an order creation. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `folder_id` | `number \| null` | No | — |
| `state` | `string \| null` | No | — |
| `operations` | `Record<string, any>[] \| null` | No | — |
| `outputsIds` | `string[] \| null` | No | — |

***

## Organizations

### list

`organizations.list`

List the organizations the API token belongs to, with the caller role and human-service availability

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.organizations.list({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizations` | `object[]` | Yes | — |

> [accordion] organizations full type
>
> ```ts theme={null}
> {
>   id: string | number,
>   name?: string | null,
>   role?: string | null,
>   created_at?: string | null,
>   updated_at?: string | null,
>   owner_email?: string | null,
>   members_count?: number | null,
>   is_human_transcription_allowed?: boolean | null,
>   is_human_translation_allowed?: boolean | null,
>   email_domains?: string[] | null,
>   idp_company_names?: string[] | null,
>   currency?: string | null,
>   metadata?: Record<string, any> | null
> }[]
> ```

***

## People

### get

`people.get`

Read one discovered contact with company linkage (Intelligence API)

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.people.get({ personId: 1, organizationId: 123 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `personId` | `number` | Yes | Person ID to retrieve. |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `number` | Yes | — |
| `name` | `string \| null` | No | — |
| `fullName` | `string \| null` | No | — |
| `emails` | `string[] \| null` | No | — |
| `primaryEmail` | `string \| null` | No | — |
| `company` | `object \| null` | No | — |
| `jobTitle` | `string \| null` | No | — |
| `seniority` | `string \| null` | No | — |
| `headline` | `string \| null` | No | — |
| `linkedinUrl` | `string \| null` | No | — |
| `city` | `string \| null` | No | — |
| `country` | `string \| null` | No | — |
| `photoUrl` | `string \| null` | No | — |
| `avatarUrl` | `string \| null` | No | — |
| `enrichedAt` | `string \| null` | No | — |
| `createdAt` | `string \| null` | No | — |
| `updatedAt` | `string \| null` | No | — |

> [accordion] company full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   primaryDomain?: string | null
> } | null
> ```

***

### list

`people.list`

List contacts discovered from meeting transcripts (Intelligence API; 404 when not enrolled)

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.people.list({ organizationId: 123, search: 'Jane' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |
| `search` | `string` | No | Full-text match over name and email fields. |
| `email` | `string` | No | Exact email match, case-insensitive. |
| `companyId` | `number` | No | Only people of this company. |
| `page` | `number` | No | Page to retrieve; people count from 1. |
| `perPage` | `number` | No | Results per page, up to 100; the default is 5. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `results` | `object[]` | Yes | — |
| `nextPageUrl` | `string \| null` | No | — |

> [accordion] results full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   fullName?: string | null,
>   emails?: string[] | null,
>   primaryEmail?: string | null,
>   company?: {
>     id: number,
>     name?: string | null,
>     primaryDomain?: string | null
>   } | null,
>   jobTitle?: string | null,
>   seniority?: string | null,
>   headline?: string | null,
>   linkedinUrl?: string | null,
>   city?: string | null,
>   country?: string | null,
>   photoUrl?: string | null,
>   avatarUrl?: string | null,
>   enrichedAt?: string | null,
>   createdAt?: string | null,
>   updatedAt?: string | null
> }[]
> ```

***

## Style Guides

### list

`styleGuides.list`

List the style guides an organization can attach to human orders

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.styleGuides.list({ organizationId: 123 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `styleGuides` | `object[]` | Yes | — |

> [accordion] styleGuides full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null
> }[]
> ```

***

## Transcriptions

### create

`transcriptions.create`

Start transcribing media from a public URL; spends transcription credits. Follow with transcriptions.getDetails until state is automatic\_done

**Risk:** `write`

```ts theme={null}
await corsair.happyscribe.api.transcriptions.create({ organizationId: 123, name: 'My Interview', language: 'en-GB', tmpUrl: 'https://example.com/my_media.mp3', tags: ['To do'] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | ID of the organization to act on, as `organizations.list` returned it. |
| `name` | `string` | Yes | Name of the transcription. |
| `language` | `string` | Yes | BCP-47 language code the media is spoken in, e.g. `en-GB`. |
| `tmpUrl` | `string` | Yes | Public https URL of the media file to transcribe. |
| `isSubtitle` | `boolean` | No | Create a subtitle file instead of a transcript. |
| `folderId` | `number` | No | Folder to create the transcription in. |
| `tags` | `string[]` | No | Tags to attach. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `name` | `string \| null` | No | — |
| `folder` | `object \| null` | No | — |
| `created_at` | `string \| null` | No | — |
| `updated_at` | `string \| null` | No | — |
| `sharing_enabled` | `boolean \| null` | No | — |
| `share_code` | `string \| null` | No | — |
| `state` | `string \| null` | No | — |
| `failure_reason` | `string \| null` | No | — |
| `language` | `string \| null` | No | — |
| `public_url` | `string \| null` | No | — |
| `audio_length_in_seconds` | `number \| null` | No | — |
| `cost_in_cents` | `number \| null` | No | — |
| `refunded` | `boolean \| null` | No | — |
| `soundwave_url` | `string \| null` | No | — |
| `audio_url` | `string \| null` | No | — |
| `video_url` | `string \| null` | No | — |
| `tags` | `string[] \| null` | No | — |
| `meeting` | `Record<string, any> \| null` | No | — |
| `people` | `object[] \| null` | No | — |
| `companies` | `object[] \| null` | No | — |
| `links` | `Record<string, any> \| null` | No | — |

> [accordion] folder full type
>
> ```ts theme={null}
> {
>   id?: number | null,
>   name?: string | null
> } | null
> ```

> [accordion] people full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   primaryEmail?: string | null,
>   company?: {
>     id: number,
>     name?: string | null,
>     primaryDomain?: string | null
>   } | null
> }[] | null
> ```

> [accordion] companies full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   primaryDomain?: string | null
> }[] | null
> ```

***

### delete

`transcriptions.delete`

Delete a transcription. It moves to the Trash unless permanent is true, which cannot be undone. Deleting one still processing cancels it and refunds its credits

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.happyscribe.api.transcriptions.delete({ fileId: '9josdjdfo09j309omsldknslkjndfjknsdfs' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `fileId` | `string` | Yes | Transcription ID, e.g. `9josdjdfo09j309omsldknslkjndfjknsdfs`. |
| `permanent` | `boolean` | No | Delete for good. Without it the transcription moves to the Trash and can be restored. |

**Output:** *empty object*

***

### getDetails

`transcriptions.getDetails`

Read one transcription: processing state, language, duration, cost, media URLs and download links

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.transcriptions.getDetails({ fileId: '9josdjdfo09j309omsldknslkjndfjknsdfs' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `fileId` | `string` | Yes | Transcription ID, e.g. `9josdjdfo09j309omsldknslkjndfjknsdfs`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `name` | `string \| null` | No | — |
| `folder` | `object \| null` | No | — |
| `created_at` | `string \| null` | No | — |
| `updated_at` | `string \| null` | No | — |
| `sharing_enabled` | `boolean \| null` | No | — |
| `share_code` | `string \| null` | No | — |
| `state` | `string \| null` | No | — |
| `failure_reason` | `string \| null` | No | — |
| `language` | `string \| null` | No | — |
| `public_url` | `string \| null` | No | — |
| `audio_length_in_seconds` | `number \| null` | No | — |
| `cost_in_cents` | `number \| null` | No | — |
| `refunded` | `boolean \| null` | No | — |
| `soundwave_url` | `string \| null` | No | — |
| `audio_url` | `string \| null` | No | — |
| `video_url` | `string \| null` | No | — |
| `tags` | `string[] \| null` | No | — |
| `meeting` | `Record<string, any> \| null` | No | — |
| `people` | `object[] \| null` | No | — |
| `companies` | `object[] \| null` | No | — |
| `links` | `Record<string, any> \| null` | No | — |

> [accordion] folder full type
>
> ```ts theme={null}
> {
>   id?: number | null,
>   name?: string | null
> } | null
> ```

> [accordion] people full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   primaryEmail?: string | null,
>   company?: {
>     id: number,
>     name?: string | null,
>     primaryDomain?: string | null
>   } | null
> }[] | null
> ```

> [accordion] companies full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   primaryDomain?: string | null
> }[] | null
> ```

***

### getSummary

`transcriptions.getSummary`

Read the AI-generated meeting summary of a notetaker recording

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.transcriptions.getSummary({ fileId: '9josdjdfo09j309omsldknslkjndfjknsdfs' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `fileId` | `string` | Yes | Transcription ID, e.g. `9josdjdfo09j309omsldknslkjndfjknsdfs`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `summary` | `string \| null` | No | — |

***

### list

`transcriptions.list`

List transcriptions in an organization with paging, folder filter and, for Intelligence-enrolled organizations, person and company filters

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.transcriptions.list({ organizationId: 123, page: 0, perPage: 25 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `organizationId` | `string \| number` | Yes | Organization to list transcriptions from. |
| `folderId` | `number` | No | Only transcriptions inside this folder or its subfolders. |
| `page` | `number` | No | Page to retrieve; transcriptions count from 0. |
| `perPage` | `number` | No | Results per page. |
| `personId` | `number` | No | Intelligence API: transcriptions where this person was linked. |
| `personEmail` | `string` | No | Intelligence API: same, resolved by email. |
| `companyId` | `number` | No | Intelligence API: transcriptions with a participant from this company. |
| `companyDomain` | `string` | No | Intelligence API: same, resolved by domain. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `results` | `object[]` | Yes | — |
| `nextPageUrl` | `string \| null` | No | — |

> [accordion] results full type
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   folder?: {
>     id?: number | null,
>     name?: string | null
>   } | null,
>   created_at?: string | null,
>   updated_at?: string | null,
>   sharing_enabled?: boolean | null,
>   share_code?: string | null,
>   state?: string | null,
>   failure_reason?: string | null,
>   language?: string | null,
>   public_url?: string | null,
>   audio_length_in_seconds?: number | null,
>   cost_in_cents?: number | null,
>   refunded?: boolean | null,
>   soundwave_url?: string | null,
>   audio_url?: string | null,
>   video_url?: string | null,
>   tags?: string[] | null,
>   meeting?: Record<string, any> | null,
>   people?: {
>     id: number,
>     name?: string | null,
>     primaryEmail?: string | null,
>     company?: {
>       id: number,
>       name?: string | null,
>       primaryDomain?: string | null
>     } | null
>   }[] | null,
>   companies?: {
>     id: number,
>     name?: string | null,
>     primaryDomain?: string | null
>   }[] | null,
>   links?: Record<string, any> | null
> }[]
> ```

***

### updateDetails

`transcriptions.updateDetails`

Change a transcription: rename it, move it to another folder in the same organization, or toggle its public sharing link

**Risk:** `write`

```ts theme={null}
await corsair.happyscribe.api.transcriptions.updateDetails({ fileId: '9josdjdfo09j309omsldknslkjndfjknsdfs', organizationId: 123, sharingEnabled: true });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `fileId` | `string` | Yes | Transcription ID, e.g. `9josdjdfo09j309omsldknslkjndfjknsdfs`. |
| `organizationId` | `string \| number` | Yes | Organization the transcription belongs to. |
| `name` | `string` | No | New name. |
| `folderId` | `number` | No | Folder in the same organization to move the transcription to. |
| `sharingEnabled` | `boolean` | No | Turn the public sharing link on or off. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `name` | `string \| null` | No | — |
| `folder` | `object \| null` | No | — |
| `created_at` | `string \| null` | No | — |
| `updated_at` | `string \| null` | No | — |
| `sharing_enabled` | `boolean \| null` | No | — |
| `share_code` | `string \| null` | No | — |
| `state` | `string \| null` | No | — |
| `failure_reason` | `string \| null` | No | — |
| `language` | `string \| null` | No | — |
| `public_url` | `string \| null` | No | — |
| `audio_length_in_seconds` | `number \| null` | No | — |
| `cost_in_cents` | `number \| null` | No | — |
| `refunded` | `boolean \| null` | No | — |
| `soundwave_url` | `string \| null` | No | — |
| `audio_url` | `string \| null` | No | — |
| `video_url` | `string \| null` | No | — |
| `tags` | `string[] \| null` | No | — |
| `meeting` | `Record<string, any> \| null` | No | — |
| `people` | `object[] \| null` | No | — |
| `companies` | `object[] \| null` | No | — |
| `links` | `Record<string, any> \| null` | No | — |

> [accordion] folder full type
>
> ```ts theme={null}
> {
>   id?: number | null,
>   name?: string | null
> } | null
> ```

> [accordion] people full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   primaryEmail?: string | null,
>   company?: {
>     id: number,
>     name?: string | null,
>     primaryDomain?: string | null
>   } | null
> }[] | null
> ```

> [accordion] companies full type
>
> ```ts theme={null}
> {
>   id: number,
>   name?: string | null,
>   primaryDomain?: string | null
> }[] | null
> ```

***

## Translations

### createTask

`translations.createTask`

Start machine-translating a transcript into a target language; spends credits. Follow with translations.getTask until state is done

**Risk:** `write`

```ts theme={null}
await corsair.happyscribe.api.translations.createTask({ sourceTranscriptionId: '9josdjdfo09j309omsldknslkjndfjknsdfs', targetLanguage: 'es' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `sourceTranscriptionId` | `string` | Yes | Transcription to translate. |
| `targetLanguage` | `string` | Yes | BCP-47 code of the language to translate into, e.g. `es`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `state` | `string \| null` | No | — |
| `failureReason` | `string \| null` | No | — |
| `progressPercent` | `number \| null` | No | — |
| `targetLanguage` | `string \| null` | No | — |
| `translatedTranscriptionId` | `string \| null` | No | — |

***

### getTask

`translations.getTask`

Where a translation task stands: progress percent, failure reason and the translated transcription id once done

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.translations.getTask({ taskId: '054fe9f3aa0b446baea730fba688f96c' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `taskId` | `string` | Yes | Translation task ID from a creation call. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `id` | `string` | Yes | — |
| `state` | `string \| null` | No | — |
| `failureReason` | `string \| null` | No | — |
| `progressPercent` | `number \| null` | No | — |
| `targetLanguage` | `string \| null` | No | — |
| `translatedTranscriptionId` | `string \| null` | No | — |

***

## Uploads

### getSignedUrl

`uploads.getSignedUrl`

Get a pre-signed S3 URL for a filename; upload the file bytes there yourself, then create a transcription from it

**Risk:** `read`

```ts theme={null}
await corsair.happyscribe.api.uploads.getSignedUrl({ filename: 'my_media.mp3' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `filename` | `string` | Yes | File name the upload gets in storage, e.g. `my_media.mp3`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `signedUrl` | `string` | Yes | — |

***


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.