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

# Create a meeting

> Create a meeting with a call transcript on an account. Identify the account with exactly one of accountId, accountDomain, hubspotCompanyId or salesforceAccountId — the account must already exist (create one with POST /accounts). Provide the transcript as raw text (the meeting is created completed), or as a fileId referencing an uploaded pdf/docx file (max 25MB) from POST /files — the transcript text is then extracted asynchronously: the meeting is created with status processing and transitions to completed once extraction finishes, or to failed with the reason in processingError. Poll GET /meetings/{id}?properties=status&properties=processingError to track it. Dock asynchronously generates an AI summary and search embeddings for the meeting once the transcript is available.

export const RateLimit = ({perMinute = 120}) => <Info>
    This endpoint is rate limited to <strong>{perMinute} requests per minute</strong> per
    company. See <a href="/api-reference/rate-limits">Rate limits</a> for details.
  </Info>;

<RateLimit />

## Identifying the account

Identify the account with exactly one of `accountId`, `accountDomain`,
`hubspotCompanyId` or `salesforceAccountId`. The account must already exist —
this endpoint never creates accounts. Use
[Create an account](/api-reference/endpoint/accounts/create-an-account) first,
or find one with the `filters` on
[Retrieve a list of accounts](/api-reference/endpoint/accounts/retrieve-a-list-of-accounts).

`accountDomain` is matched against the account's website after normalization
(protocol, `www.` prefix and paths are stripped) — subdomains and apex domains
are distinct.

## Providing the transcript

Provide the transcript as raw text (`transcript`), or as a `fileId`
referencing an uploaded `.pdf` or `.docx` document (max 25MB) — see
[Uploading files](/api-reference/uploading-files). The transcript text is
extracted from the document when the meeting is created, so the file upload
must be completed first.

After creation, Dock asynchronously generates an AI summary and search
embeddings for the meeting. Email participants that don't exist yet are
created as contacts on the account.


## OpenAPI

````yaml post /meetings
openapi: 3.1.0
info:
  title: Dock API
  description: >-
    The Dock API is a RESTful API that allows you to interact with Dock in a
    programmatic way
  termsOfService: https://www.dock.us/legal/terms
  contact:
    name: API Support
    email: developers@dock.us
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  version: 1.0.0
servers:
  - url: https://api.dock.us/{version}
    description: Production server
    variables:
      version:
        default: v1
        enum:
          - v1
security:
  - bearerAuth: []
tags:
  - name: Status check
    description: API to check if the API is up
  - name: Accounts
    description: API to manage accounts
  - name: Assets
    description: API to manage assets
  - name: Asset share links
    description: API to retrieve asset share links
  - name: Files
    description: API to manage files
  - name: Forms
    description: API to retrieve forms and their responses
  - name: Meetings
    description: API to manage meetings and call transcripts
  - name: Tags
    description: API to manage tags
  - name: Users
    description: API to manage users
  - name: Workspaces
    description: API to manage workspaces
  - name: Templates
    description: API to manage templates
  - name: Workspace pages
    description: API to manage workspace pages
  - name: Workspace plans
    description: API to manage workspace plans
  - name: Workspace plan tasks
    description: API to manage workspace plan tasks
  - name: Workspace sections
    description: API to manage workspace sections
paths:
  /meetings:
    post:
      tags:
        - Meetings
      description: >-
        Create a meeting with a call transcript on an account. Identify the
        account with exactly one of accountId, accountDomain, hubspotCompanyId
        or salesforceAccountId — the account must already exist (create one with
        POST /accounts). Provide the transcript as raw text (the meeting is
        created completed), or as a fileId referencing an uploaded pdf/docx file
        (max 25MB) from POST /files — the transcript text is then extracted
        asynchronously: the meeting is created with status processing and
        transitions to completed once extraction finishes, or to failed with the
        reason in processingError. Poll GET
        /meetings/{id}?properties=status&properties=processingError to track it.
        Dock asynchronously generates an AI summary and search embeddings for
        the meeting once the transcript is available.
      parameters:
        - $ref: '#/components/parameters/meetingProperties'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - title
                - time
              allOf:
                - oneOf:
                    - required:
                        - accountId
                    - required:
                        - accountDomain
                    - required:
                        - hubspotCompanyId
                    - required:
                        - salesforceAccountId
                - oneOf:
                    - required:
                        - transcript
                    - required:
                        - fileId
              properties:
                accountId:
                  type: string
                  description: >-
                    ID of the account to attach the meeting to. Provide exactly
                    one of accountId, accountDomain, hubspotCompanyId or
                    salesforceAccountId.
                  example: RiHO4e0Ju3DS
                accountDomain:
                  type: string
                  description: >-
                    Look up the account by its website domain (normalized exact
                    match, e.g. acme.com).
                  example: acme.com
                hubspotCompanyId:
                  type: string
                  description: Look up the account by its linked HubSpot company ID.
                  example: '8662045446'
                salesforceAccountId:
                  type: string
                  description: Look up the account by its linked Salesforce account ID.
                  example: 0015f00000Bg59dAAB
                title:
                  type: string
                  description: Title of the meeting
                  minLength: 1
                  maxLength: 500
                  example: Kickoff call
                time:
                  type: string
                  format: date-time
                  description: Date and time of the meeting (ISO 8601)
                  example: '2026-08-20T15:00:00Z'
                transcript:
                  type: string
                  description: >-
                    Plain-text transcript of the call. Provide exactly one of
                    transcript or fileId.
                  example: 'Alice: Hi everyone, thanks for joining...'
                fileId:
                  type: string
                  description: >-
                    ID of an uploaded pdf or docx file (from POST /files, max
                    25MB) to extract the transcript from. Provide exactly one of
                    transcript or fileId.
                  example: RiHO4e0Ju3DS
                participants:
                  type: array
                  maxItems: 200
                  description: >-
                    Participants of the meeting. Each entry must include an
                    email or a domain. Email participants are created as account
                    contacts if they don't exist; a domain entry (e.g. acme.com)
                    adds all known contacts with that email domain.
                  items:
                    type: object
                    anyOf:
                      - required:
                          - email
                      - required:
                          - domain
                    properties:
                      email:
                        type: string
                        format: email
                        description: Email of the participant
                        example: alice@acme.com
                      name:
                        type: string
                        description: Name of the participant
                        example: Alice Doe
                      domain:
                        type: string
                        description: Email domain to add all known contacts from
                        example: acme.com
      responses:
        '201':
          description: Meeting created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      meeting:
                        $ref: '#/components/schemas/Meeting'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
components:
  parameters:
    meetingProperties:
      name: properties
      in: query
      description: Select the meeting properties that should be returned
      schema:
        type: array
        items:
          type: string
          enum:
            - title
            - time
            - status
            - processingError
            - provider
            - accountId
            - participants
            - transcript
            - createdAt
            - updatedAt
  schemas:
    Meeting:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - meeting
              example: meeting
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/meetings/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            title:
              type: string
              description: Title of the meeting
              example: Kickoff call
            time:
              type: string
              format: date-time
              description: Date and time of the meeting
              example: '2026-08-20T15:00:00.000Z'
            status:
              type: string
              description: >-
                Status of the meeting. A meeting created from a raw transcript
                is completed immediately; a meeting created from a fileId is
                processing while the transcript is extracted, then transitions
                to completed, or to failed with the reason in processingError.
              enum:
                - scheduled
                - completed
                - cancelled
                - processing
                - failed
              example: completed
              readOnly: true
            processingError:
              type: string
              description: >-
                Why transcript extraction failed when status is failed; null
                otherwise. Only returned when explicitly requested via the
                properties parameter.
              example: Could not extract transcript text from the file.
              nullable: true
              readOnly: true
            provider:
              type: string
              description: >-
                Source of the meeting. Meetings created via the API always have
                the direct_upload provider.
              example: direct_upload
              readOnly: true
            accountId:
              type: string
              description: ID of the account the meeting belongs to
              example: RiHO4e0Ju3DS
            transcript:
              type: string
              description: >-
                Plain-text transcript of the meeting. Only returned when
                explicitly requested via the properties parameter.
              example: 'Alice: Hi everyone, thanks for joining...'
              nullable: true
            participants:
              type: array
              description: Participants of the meeting
              items:
                type: object
                properties:
                  user:
                    $ref: '#/components/schemas/User'
    BaseObject:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        updatedAt:
          type: string
          format: date-time
          description: Last updated date
          example: '2021-01-01T00:00:00.000Z'
          readOnly: true
        createdAt:
          type: string
          format: date-time
          description: Created at date
          example: '2021-01-01T00:00:00.000Z'
          readOnly: true
    User:
      allOf:
        - $ref: '#/components/schemas/BaseObject'
        - type: object
          properties:
            object:
              type: string
              description: Type of the object
              enum:
                - user
              example: user
              readOnly: true
            url:
              type: string
              example: https://api.dock.us/v1/users/RiHO4e0Ju3DS
              description: URL to the resource
              readOnly: true
            firstName:
              type: string
              description: First name of the user
              example: John
              nullable: true
            lastName:
              type: string
              description: Last name of the user
              example: Doe
              nullable: true
            avatar:
              type: string
              format: uri
              description: Avatar of the user
              example: https://dock.us/avatar.png
              nullable: true
            email:
              type: string
              description: Email of the user
              example: john.doe@example.com
            name:
              type: string
              description: Name of the user
              example: John Doe
    Id:
      type: string
      description: Id of the object
      example: RiHO4e0Ju3DS
      readOnly: true
  responses:
    '400':
      description: >-
        The server cannot or will not process the request due to something that
        is perceived to be a client error (e.g., malformed request syntax,
        invalid request message framing, or deceptive request routing)
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - BAD_REQUEST
                    description: A short code indicating the error code returned
                    example: BAD_REQUEST
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: >-
                      The request could not be understood or was missing
                      required parameters
                required:
                  - code
                  - message
            required:
              - error
    '401':
      description: >-
        Although the HTTP standard specifies "unauthorized", semantically this
        response means "unauthenticated". That is, the client must authenticate
        itself to get the requested response
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - UNAUTHORIZED
                    description: A short code indicating the error code returned
                    example: UNAUTHORIZED
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: >-
                      Access denied. You are not authorized to access this
                      resource
                required:
                  - code
                  - message
            required:
              - error
    '403':
      description: >-
        The client does not have access rights to the content; that is, it is
        unauthorized, so the server is refusing to give the requested resource.
        Unlike 401 Unauthorized, the client's identity is known to the server
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - FORBIDDEN
                    description: A short code indicating the error code returned
                    example: FORBIDDEN
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: Access to this resource is restricted
                required:
                  - code
                  - message
            required:
              - error
    '404':
      description: The server cannot find the requested resource
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - NOT_FOUND
                    description: A short code indicating the error code returned
                    example: NOT_FOUND
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: The requested resource could not be found
                required:
                  - code
                  - message
            required:
              - error
    '429':
      description: >-
        The user has sent too many requests in a given amount of time ("rate
        limiting")
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - RATE_LIMIT_EXCEEDED
                    description: A short code indicating the error code returned
                    example: RATE_LIMIT_EXCEEDED
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: Rate limit exceeded. Please try again later
                required:
                  - code
                  - message
            required:
              - error
    '500':
      description: The server has encountered a situation it does not know how to handle
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - INTERNAL_SERVER_ERROR
                    description: A short code indicating the error code returned
                    example: INTERNAL_SERVER_ERROR
                  message:
                    type: string
                    description: A human readable explanation of what went wrong
                    example: >-
                      The server has encountered a situation it does not know
                      how to handle
                required:
                  - code
                  - message
            required:
              - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````