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

# Upload Event Form

> Upload a PDF directly as a working form attached to an existing claim or
incident. No template is needed. The form appears in the event's existing
Forms tab with preview, download, and delete actions. It has no document
editor and creates no issued packet or historical issuance date.

Accepts a readable, unencrypted, nonempty PDF up to 20 MB. The original bytes
are stored unchanged. For historical quote/policy issued documents use
[Import Historical Form Packet](./import-historical-form-packet).

**Required permission:** `form.create`, plus `event.view` for the target event.




## OpenAPI

````yaml /openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/forms/generated
openapi: 3.0.3
info:
  title: AI Insurance External API
  description: External API for AI Insurance platform
  version: 1.0.0
  contact:
    email: support@aiinsurance.io
servers:
  - url: https://go.aiinsurance.io
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /api/v1/companies/{companyId}/forms/generated:
    post:
      tags:
        - Forms
      summary: Upload Event Form
      description: >
        Upload a PDF directly as a working form attached to an existing claim or

        incident. No template is needed. The form appears in the event's
        existing

        Forms tab with preview, download, and delete actions. It has no document

        editor and creates no issued packet or historical issuance date.


        Accepts a readable, unencrypted, nonempty PDF up to 20 MB. The original
        bytes

        are stored unchanged. For historical quote/policy issued documents use

        [Import Historical Form Packet](./import-historical-form-packet).


        **Required permission:** `form.create`, plus `event.view` for the target
        event.
      operationId: uploadEventForm
      parameters:
        - $ref: '#/components/parameters/companyId'
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            minLength: 1
            maxLength: 255
            pattern: ^[\x20-\x7E]{1,255}$
          description: >
            A retry with the same key and request returns the original form id
            for

            30 days from the successful first request. Keys are scoped to the
            calling

            credential. Reusing a key with a different request within that
            window

            returns 422 IDEMPOTENCY_KEY_REUSED. Failed attempts store no key.

            After 30 days a request uploads a new form, even with the same key.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - eventId
                - fileName
                - fileBase64
              properties:
                eventId:
                  type: string
                  format: uuid
                  description: Existing live claim or incident id in this company.
                fileName:
                  type: string
                  minLength: 1
                  maxLength: 255
                  description: >-
                    PDF filename ending in .pdf; the extension is removed for
                    the form's display name.
                fileBase64:
                  type: string
                  format: byte
                  minLength: 1
                  maxLength: 26666668
                  description: Base64-encoded PDF bytes, without a data URL prefix.
            examples:
              claimLetter:
                summary: Attach an archived claim letter as a working form
                value:
                  eventId: 550e8400-e29b-41d4-a716-446655440093
                  fileName: Claim letter.pdf
                  fileBase64: JVBERi0xLjcKLi4u
      responses:
        '201':
          description: Working form uploaded and attached to the event.
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                properties:
                  id:
                    type: string
                    format: uuid
              examples:
                uploaded:
                  summary: Uploaded form id
                  value:
                    id: 550e8400-e29b-41d4-a716-446655440094
        '400':
          description: >-
            Invalid request shape or idempotency key, or encoded size limit
            exceeded.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Event not found, deleted, or outside this company.
        '422':
          description: >-
            Invalid, encrypted, empty, or oversized PDF, or idempotency key
            reused with different input.
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  parameters:
    companyId:
      name: companyId
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Company identifier
  responses:
    Unauthorized:
      description: Unauthorized - Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missingApiKey:
              summary: Missing API key
              value:
                error:
                  code: AuthenticationError
                  message: API key authentication required
                  userMessages:
                    - API key authentication required
            invalidApiKey:
              summary: >-
                Invalid API key (e.g. unknown key, or a Bearer token used
                instead of an API key)
              value:
                error:
                  code: AuthenticationError
                  message: Invalid API key
                  userMessages:
                    - Invalid API key
    Forbidden:
      description: Forbidden - Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            insufficientPermissions:
              summary: Insufficient permissions
              value:
                error:
                  code: AuthorizationError
                  message: User is not authorized to perform the requested action
                  userMessages:
                    - User is not authorized to perform the requested action
            companyMismatch:
              summary: A valid API key naming another company in the URL
              value:
                error:
                  code: AuthorizationError
                  message: API key is not scoped to the requested company
                  userMessages:
                    - API key is not scoped to the requested company
    InternalServerError:
      description: Internal Server Error - Unexpected error occurred
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            internalError:
              summary: Unexpected server error
              value:
                error:
                  code: UncaughtActionError
                  message: Uncaught error occurred in <actionName>
                  userMessages:
                    - An unexpected error occurred. Please try again later.
  schemas:
    ErrorResponse:
      type: object
      description: Standard error response for all external API endpoints
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Machine-readable error code
              example: VALIDATION_ERROR
            message:
              type: string
              description: Human-readable error message
              example: 'submissionId: Required field is missing'
            userMessages:
              type: array
              description: >-
                Clean, verbatim-displayable messages — one entry per failure,
                free of error-code tags, field paths, and internal noise.
                Suitable for showing to end users as-is.
              items:
                type: string
              example:
                - Exposures of type 'company' require an address
            details:
              type: array
              description: Additional details for validation errors (field-level errors)
              items:
                type: object
                properties:
                  field:
                    type: string
                    description: The field that caused the error
                    example: submissionId
                  code:
                    type: string
                    description: Stable problem code for this individual validation failure
                    example: BLANK_LIST_ELEMENT
                  reason:
                    type: string
                    description: Stable reason the value violates its canonical contract
                    example: blank-list-element
                  expected:
                    type: string
                    description: The expected canonical value contract
                    example: nonblank trimmed string
                  message:
                    type: string
                    description: Description of the field error
                    example: Required field is missing
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API key authentication. Send your raw API key as the `Authorization`
        header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do
        NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key`
        header; those are not accepted.

````

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