Happy Scribe Organizations API

List the organizations (workspaces) the authenticated user belongs to, with role, member count, currency, and whether human transcription and translation are enabled. Organizations scope transcriptions, orders, and billing.

OpenAPI Specification

happyscribe-openapi.yml Raw ↑
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