Happy Scribe Glossaries and Style Guides API
List the glossaries and style guides available in an organization so they can be attached to orders to improve transcription accuracy and enforce formatting conventions.
List the glossaries and style guides available in an organization so they can be attached to orders to improve transcription accuracy and enforce formatting conventions.
openapi: 3.0.3
info:
title: Happy Scribe API
description: >-
The Happy Scribe API turns audio and video into text and subtitles
programmatically. Submit work through the Orders API (automatic/machine or
professional/human service), manage the resulting transcriptions, export
finished transcripts into 15+ formats (SRT, VTT, STL, DOCX, PDF, TXT, JSON,
CSV, XLSX, and editing-suite formats), and administer organizations and their
members. Files are ingested by public URL or via a signed upload. All requests
are REST over HTTPS and authenticated with a Bearer API token from your Happy
Scribe account settings. Base URL https://www.happyscribe.com/api/v1. Endpoint
paths and fields are grounded in the public developer documentation
(dev.happyscribe.com); request/response schemas below are honestly modeled
from that documentation and may not enumerate every field.
version: '1.0'
contact:
name: Happy Scribe
url: https://dev.happyscribe.com
servers:
- url: https://www.happyscribe.com/api/v1
description: Happy Scribe API v1
security:
- bearerAuth: []
tags:
- name: Transcriptions
description: List, retrieve, update, and delete transcriptions.
- name: Orders
description: Create and track transcription, subtitling, and translation orders.
- name: Exports
description: Render finished transcripts into downloadable files.
- name: Organizations
description: Organizations (workspaces) the authenticated user belongs to.
- name: Organization Memberships
description: Manage members and roles within an organization.
- name: Uploads
description: Signed upload URLs for local media files.
- name: Glossaries and Style Guides
description: Reusable glossaries and style guides attachable to orders.
paths:
/transcriptions:
get:
operationId: listTranscriptions
tags:
- Transcriptions
summary: List transcriptions
description: Lists transcriptions in an organization.
parameters:
- name: organization_id
in: query
required: false
description: Filter transcriptions by organization.
schema:
type: string
- name: folder_id
in: query
required: false
description: Filter transcriptions by folder.
schema:
type: string
responses:
'200':
description: A list of transcriptions.
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/Transcription'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createTranscription
tags:
- Transcriptions
summary: Create a transcription (deprecated)
description: >-
Deprecated. Creating a transcription directly is superseded by the Orders
API; use POST /orders instead. Retained here because it remains documented
for backward compatibility.
deprecated: true
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TranscriptionInput'
responses:
'201':
description: The created transcription.
content:
application/json:
schema:
$ref: '#/components/schemas/Transcription'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/transcriptions/{id}:
parameters:
- $ref: '#/components/parameters/Id'
get:
operationId: getTranscription
tags:
- Transcriptions
summary: Retrieve a transcription
description: Retrieves a single transcription by ID, including its state and metadata.
responses:
'200':
description: The requested transcription.
content:
application/json:
schema:
$ref: '#/components/schemas/Transcription'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateTranscription
tags:
- Transcriptions
summary: Update a transcription
description: Updates editable details of a transcription, such as its name or folder.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
folder_id:
type: string
responses:
'200':
description: The updated transcription.
content:
application/json:
schema:
$ref: '#/components/schemas/Transcription'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
delete:
operationId: deleteTranscription
tags:
- Transcriptions
summary: Delete a transcription
description: Deletes a transcription.
responses:
'204':
description: The transcription was deleted.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/transcriptions/{id}/summary:
parameters:
- $ref: '#/components/parameters/Id'
get:
operationId: getTranscriptionSummary
tags:
- Transcriptions
summary: Retrieve a transcription summary
description: >-
Retrieves the AI-generated summary for a transcription (for example, a
meeting summary), when available.
responses:
'200':
description: The transcription summary.
content:
application/json:
schema:
type: object
properties:
id:
type: string
summary:
type: string
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/orders:
post:
operationId: createOrder
tags:
- Orders
summary: Create a transcription or subtitling order
description: >-
Creates an order to transcribe or subtitle a media file from a URL, using
automatic (machine) or professional (human) service. This is the preferred
way to submit new work.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrderInput'
responses:
'201':
description: The created order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/orders/translation:
post:
operationId: createTranslationOrder
tags:
- Orders
summary: Create a translation order
description: Creates an order to translate an existing transcription into a target language.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- transcription_id
- target_language
properties:
transcription_id:
type: string
target_language:
type: string
description: BCP-47 target language code.
service:
type: string
enum:
- auto
- pro
responses:
'201':
description: The created translation order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/orders/{id}:
parameters:
- $ref: '#/components/parameters/Id'
get:
operationId: getOrder
tags:
- Orders
summary: Retrieve an order
description: Retrieves an order by ID, including its state.
responses:
'200':
description: The requested order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/orders/{id}/confirm:
parameters:
- $ref: '#/components/parameters/Id'
post:
operationId: confirmOrder
tags:
- Orders
summary: Confirm an incomplete order
description: >-
Confirms an order that was created in an incomplete state, submitting it
for processing.
responses:
'200':
description: The confirmed order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
/exports:
post:
operationId: createExport
tags:
- Exports
summary: Create an export
description: >-
Creates an export that renders one or more transcriptions into a
downloadable file in the requested format.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExportInput'
responses:
'201':
description: The created export.
content:
application/json:
schema:
$ref: '#/components/schemas/Export'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/exports/{id}:
parameters:
- $ref: '#/components/parameters/Id'
get:
operationId: getExport
tags:
- Exports
summary: Retrieve an export
description: >-
Retrieves an export by ID. Poll this endpoint until the state is ready,
then use the download link.
responses:
'200':
description: The requested export.
content:
application/json:
schema:
$ref: '#/components/schemas/Export'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/organizations:
get:
operationId: listOrganizations
tags:
- Organizations
summary: List organizations
description: Lists the organizations the authenticated user belongs to.
responses:
'200':
description: A list of organizations.
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/Organization'
'401':
$ref: '#/components/responses/Unauthorized'
/organization_memberships:
get:
operationId: listOrganizationMemberships
tags:
- Organization Memberships
summary: List organization memberships
description: Lists memberships, optionally filtered by organization.
parameters:
- name: organization_id
in: query
required: false
description: Filter memberships by organization.
schema:
type: string
responses:
'200':
description: A list of memberships.
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/OrganizationMembership'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createOrganizationMembership
tags:
- Organization Memberships
summary: Add a member to an organization
description: Adds a user to an organization by email, with a role.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- organization_id
- email
properties:
organization_id:
type: string
email:
type: string
format: email
role:
type: string
enum:
- admin
- member
responses:
'201':
description: The created membership.
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationMembership'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/organization_memberships/{id}:
parameters:
- $ref: '#/components/parameters/Id'
patch:
operationId: updateOrganizationMembership
tags:
- Organization Memberships
summary: Update a membership
description: Updates a member's role in an organization.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
role:
type: string
enum:
- admin
- member
responses:
'200':
description: The updated membership.
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationMembership'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationError'
delete:
operationId: deleteOrganizationMembership
tags:
- Organization Memberships
summary: Remove a member
description: Removes a member from an organization.
responses:
'204':
description: The membership was removed.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/uploads/new:
get:
operationId: newUpload
tags:
- Uploads
summary: Request a signed upload URL
description: >-
Returns a signed URL to which a local media file can be PUT. The returned
temporary URL is then passed as tmp_url / url when creating a transcription
or order.
parameters:
- name: filename
in: query
required: true
description: The name of the file to be uploaded.
schema:
type: string
responses:
'200':
description: A signed upload URL.
content:
application/json:
schema:
$ref: '#/components/schemas/Upload'
'401':
$ref: '#/components/responses/Unauthorized'
/glossaries:
get:
operationId: listGlossaries
tags:
- Glossaries and Style Guides
summary: List glossaries
description: Lists the glossaries available in an organization.
parameters:
- name: organization_id
in: query
required: true
description: The organization to list glossaries for.
schema:
type: string
responses:
'200':
description: A list of glossaries.
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/Glossary'
'401':
$ref: '#/components/responses/Unauthorized'
/style_guides:
get:
operationId: listStyleGuides
tags:
- Glossaries and Style Guides
summary: List style guides
description: Lists the style guides available in an organization.
parameters:
- name: organization_id
in: query
required: true
description: The organization to list style guides for.
schema:
type: string
responses:
'200':
description: A list of style guides.
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/StyleGuide'
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
API token from your Happy Scribe account settings, passed as
`Authorization: Bearer YOUR_API_TOKEN`.
parameters:
Id:
name: id
in: path
required: true
description: The unique identifier of the resource.
schema:
type: string
responses:
Unauthorized:
description: Missing or invalid Bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ValidationError:
description: The request payload failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
properties:
error:
type: string
message:
type: string
TranscriptionInput:
type: object
required:
- name
- language
- tmp_url
- organization_id
properties:
name:
type: string
language:
type: string
description: BCP-47 language code of the audio.
tmp_url:
type: string
format: uri
description: Public or signed URL of the media file to transcribe.
service:
type: string
enum:
- auto
- pro
- alignment
organization_id:
type: string
folder_id:
type: string
is_subtitle:
type: boolean
default: false
tags:
type: array
items:
type: string
Transcription:
type: object
properties:
id:
type: string
name:
type: string
state:
type: string
description: Processing state of the transcription.
language:
type: string
audioLengthInSeconds:
type: number
costInCents:
type: integer
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
OrderInput:
type: object
required:
- url
- language
- organization_id
properties:
url:
type: string
format: uri
description: Public or signed URL of the media file.
language:
type: string
description: BCP-47 language code.
organization_id:
type: string
service:
type: string
enum:
- auto
- pro
is_subtitle:
type: boolean
default: false
confirm:
type: boolean
description: When true, submit immediately instead of leaving the order incomplete.
glossary_ids:
type: array
items:
type: string
style_guide_id:
type: string
Order:
type: object
properties:
id:
type: string
state:
type: string
enum:
- incomplete
- waiting_for_payment
- submitted
- locked
- fulfilled
- failed
- canceled
- expired
service:
type: string
language:
type: string
transcription_ids:
type: array
items:
type: string
createdAt:
type: string
format: date-time
ExportInput:
type: object
required:
- format
- transcription_ids
properties:
format:
type: string
description: >-
Output format, e.g. txt, docx, pdf, srt, vtt, stl, json, csv, xlsx,
mp3, mp4, and editing-suite formats.
transcription_ids:
type: array
items:
type: string
show_timestamps:
type: boolean
show_speakers:
type: boolean
show_comments:
type: boolean
show_highlights:
type: boolean
Export:
type: object
properties:
id:
type: string
state:
type: string
enum:
- pending
- processing
- ready
- expired
- failed
format:
type: string
download_link:
type: string
format: uri
description: Present when the export state is ready.
Organization:
type: object
properties:
id:
type: string
name:
type: string
role:
type: string
enum:
- owner
- admin
- member
- guest
membersCount:
type: integer
currency:
type: string
isHumanTranscriptionAllowed:
type: boolean
isHumanTranslationAllowed:
type: boolean
OrganizationMembership:
type: object
properties:
id:
type: string
email:
type: string
format: email
name:
type: string
role:
type: string
enum:
- admin
- member
organizationId:
type: string
organizationName:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
Upload:
type: object
properties:
url:
type: string
format: uri
description: Signed URL to PUT the file to.
tmp_url:
type: string
format: uri
description: Temporary URL to pass when creating a transcription or order.
Glossary:
type: object
properties:
id:
type: string
name:
type: string
organizationId:
type: string
StyleGuide:
type: object
properties:
id:
type: string
name:
type: string
organizationId:
type: string