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

# Upload a file

> Uploads an image to a workspace, as `multipart/form-data`, and returns a file with a
`file_` id. The key must be an owner or admin of the workspace, and the workspace's
plan must include notetaker customization. A workspace takes 60 uploads a minute.

The image is a PNG, JPEG, GIF, WebP or SVG of at most 10 MB. Its type is read from its
bytes, not from its name or declared type.

An accepted file is not always one the notetaker can draw. It draws a PNG, GIF or WebP
under 16 megapixels, a JPEG under 16 megapixels (under 100 for an `image` tile), and an
SVG of at most 1 MB that is strict XML with no DOCTYPE and declares no side of 384,000 px
or more. It leaves out the images an SVG links to or embeds, and shows an animation's
first frame. For any other file the kit keeps it, but a `logo` tile shows the default
logo, an `image` tile shows its background color, and the email shows the file as
uploaded.




## OpenAPI

````yaml /openapi.yaml post /files
openapi: 3.1.0
info:
  title: MeetingKit API
  description: >
    The MeetingKit API lets you build a meetings feature into your product:
    users connect

    a calendar, a notetaker joins their calls, and you get the transcript,
    speakers and

    summary of each meeting.
  version: '2026-10-12'
  contact:
    name: MeetingKit Developer Support
    email: support@meetingkit.com
servers:
  - url: https://api.meetingkit.com/api/v1
security:
  - apiKeyAuth: []
tags:
  - name: Agent sessions
    description: Exchange the code a user hands their AI agent for API credentials.
  - name: Uploads
    description: Get signed URLs to upload media files directly to MeetingKit storage.
  - name: Transcribe
    description: Create transcription orders from media URLs.
  - name: Subtitle
    description: Create subtitling orders from media URLs.
  - name: Translate
    description: Create translation orders from existing conversations.
  - name: Orders
    description: Retrieve and confirm the orders created by the service endpoints.
  - name: Conversations
    description: List, retrieve, update, and delete conversations.
  - name: Exports
    description: Export conversations to text, subtitle, video-editing, and data formats.
  - name: Bots
    description: Send a notetaker bot to Zoom, Google Meet, or Microsoft Teams calls.
  - name: Glossaries
    description: List glossaries to apply custom terminology to orders.
  - name: Style guides
    description: List style guides to apply formatting preferences to orders.
  - name: Workspaces
    description: List the workspaces the authenticated user belongs to.
  - name: Organization memberships
    description: Manage which users belong to a workspace.
  - name: Members
    description: A partner's end users inside a workspace (MeetingKit).
  - name: Meetings
    description: >-
      Every meeting of a workspace, from calendars and bots, with its results
      (MeetingKit).
  - name: Calendar connections
    description: >-
      Members' Google and Microsoft calendars, connected through a hosted
      consent link and synced by MeetingKit.
  - name: Calendar events
    description: Calendar events a partner pushes from its own calendar sync (MeetingKit).
  - name: Settings
    description: >-
      What gets recorded and how, as values you assign to a workspace, a member,
      a meeting category or one meeting (MeetingKit).
  - name: Settings assignments
    description: Where settings apply (MeetingKit).
  - name: Files
    description: Images uploaded to a workspace, to use in a brand kit (MeetingKit).
  - name: Webhook endpoints
    description: Register the receivers of a workspace's webhooks, and test them.
  - name: Webhook events
    description: >-
      The webhooks sent to a workspace's endpoints, how each delivery went, and
      redelivery.
  - name: People
    description: >-
      Language Services. People found in your transcripts (Memory API, private
      beta).
  - name: Companies
    description: >-
      Language Services. Companies found in your transcripts (Memory API,
      private beta).
paths:
  /files:
    post:
      tags:
        - Files
      summary: Upload a file
      description: >
        Uploads an image to a workspace, as `multipart/form-data`, and returns a
        file with a

        `file_` id. The key must be an owner or admin of the workspace, and the
        workspace's

        plan must include notetaker customization. A workspace takes 60 uploads
        a minute.


        The image is a PNG, JPEG, GIF, WebP or SVG of at most 10 MB. Its type is
        read from its

        bytes, not from its name or declared type.


        An accepted file is not always one the notetaker can draw. It draws a
        PNG, GIF or WebP

        under 16 megapixels, a JPEG under 16 megapixels (under 100 for an
        `image` tile), and an

        SVG of at most 1 MB that is strict XML with no DOCTYPE and declares no
        side of 384,000 px

        or more. It leaves out the images an SVG links to or embeds, and shows
        an animation's

        first frame. For any other file the kit keeps it, but a `logo` tile
        shows the default

        logo, an `image` tile shows its background color, and the email shows
        the file as

        uploaded.
      operationId: uploadFile
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/FileCreate'
      responses:
        '201':
          description: File uploaded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/File'
        '400':
          description: >-
            The request names no workspace and the key does not belong to
            exactly one (`missing`, on `workspace_id`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: >-
            The key is not an owner or admin of the workspace
            (`workspace_update_not_allowed`), or its plan does not include
            notetaker customization (`plan_upgrade_required`). Nothing is
            uploaded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '404':
          description: '`workspace_id` is not a workspace the key belongs to.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '422':
          description: >-
            A field failed validation: `file` or `purpose` is missing
            (`missing`), `file` is not sent as a multipart file, is not one of
            the five image types or is over 10 MB (`invalid`), or `purpose` is
            not one of its values (`inclusion`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    FileCreate:
      type: object
      required:
        - file
        - purpose
      properties:
        file:
          type: string
          format: binary
          description: The image, a PNG, JPEG, GIF, WebP or SVG of at most 10 MB.
        purpose:
          type: string
          enum:
            - brand_kit
          description: 'What the file is for. `brand_kit`: an image for a brand kit.'
        workspace_id:
          type: string
          description: >-
            The workspace the file belongs to. Optional when the key belongs to
            exactly one workspace, which is then used. A `wks_` id; integer
            workspace ids are still accepted.
          example: wks_01k6a2r9s8x7c2dvq3m5n6p4ab
    File:
      type: object
      required:
        - id
        - object
        - purpose
        - workspace_id
        - filename
        - content_type
        - size
        - url
        - created_at
      properties:
        id:
          type: string
          description: File ID, beginning with `file_`.
        object:
          type: string
          description: Always `file`.
        purpose:
          type: string
          enum:
            - brand_kit
          description: 'What the file is for. `brand_kit`: an image for a brand kit.'
        workspace_id:
          type: string
          description: The workspace the file belongs to, a `wks_` id.
        filename:
          type: string
          description: >-
            The name the file was uploaded with. Its extension is replaced when
            it does not match the image type.
        content_type:
          type: string
          enum:
            - image/png
            - image/jpeg
            - image/gif
            - image/webp
            - image/svg+xml
          description: |
            The image type, read from the file's bytes.

            - `image/png`: PNG.
            - `image/jpeg`: JPEG.
            - `image/gif`: GIF.
            - `image/webp`: WebP.
            - `image/svg+xml`: SVG.
        size:
          type: integer
          description: Size in bytes.
        url:
          type: string
          format: uri
          description: >-
            A signed URL to download the file, valid for one year. Every read
            returns a fresh one. An SVG is served as a download, never inline.
        created_at:
          type: string
          format: date-time
          description: When the file was uploaded, in ISO 8601.
      example:
        id: file_01k6d8q4z7m2n5p8r1s3t6v9wx
        object: file
        purpose: brand_kit
        workspace_id: wks_01k6a2r9s8x7c2dvq3m5n6p4ab
        filename: logo.png
        content_type: image/png
        size: 48213
        url: >-
          https://assets.meetingkit.com/files/logo.png?Expires=1822298280&Signature=…
        created_at: '2026-09-30T09:58:00Z'
    Errors:
      type: object
      required:
        - errors
      description: >
        Every error the API returns, `401` and `429` included. See
        [Errors](/api-reference/errors).
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
        retry_in_seconds:
          type: integer
          description: >-
            On `429`, how long to wait before retrying. Also sent as
            `Retry-After`.
      example:
        errors:
          - code: invalid
            field: recording.methods.bot.mode
            message: 'must be one of: audio_and_video, audio_only, inherit'
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: >-
            A stable snake_case word, safe to branch on. See
            [Errors](/api-reference/errors) for the list.
        message:
          type: string
          description: A sentence for humans. It may change; do not parse it.
        field:
          type: string
          description: >-
            The dotted path to the request field at fault, such as
            `recording.methods.bot.mode`. Present only when one field is.
  responses:
    Unauthorized:
      description: >-
        Your API key is missing (`missing_api_key`) or wrong
        (`invalid_api_key`), or it may not access this resource
        (`unauthorized`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    TooManyRequests:
      description: >-
        Rate limit reached (`rate_limited`). Wait `retry_in_seconds`, also sent
        as `Retry-After`, before retrying.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Your API key, sent bare. See
        [Authentication](/api-reference/authentication).

````

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