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

# Upload customer document

> Uploads one PDF, JPEG, PNG, WebP, or HEIF/HEIC document up to 25 MB as `multipart/form-data`. Send the raw binary in the `file` part; base64 JSON is not accepted. Returns metadata for task submissions.



## OpenAPI

````yaml /openapi.json post /v3/customers/{customerId}/documents
openapi: 3.1.0
info:
  title: Swipelux API
  version: 3.1.0
servers:
  - url: https://platform.swipelux.com
    description: Production and sandbox; environment selected by API key
security:
  - apiKey: []
tags:
  - name: customers
    x-displayName: Customers
    description: >-
      Create, list, update, export, and archive individual and business
      customers and their related parties.
  - name: capabilities
    x-displayName: Capabilities
    description: >-
      Discover, request, inspect, and cancel customer capabilities and their
      institution applications.
  - name: accounts
    x-displayName: Accounts
    description: Create, inspect, update, and archive customer accounts.
  - name: recipients
    x-displayName: Recipients
    description: Create third-party recipients and their payout destinations.
  - name: Tasks
    x-displayName: Tasks
    description: Inspect customer, capability, application, account, and transfer tasks.
  - name: Task submissions
    x-displayName: Task submissions
    description: Submit and inspect immutable answers to customer tasks.
  - name: documents
    x-displayName: Documents
    description: Upload and inspect customer documents used in task submissions.
  - name: money-movement
    x-displayName: Money movement
    description: Create quotes, execute quote-backed transfers, and inspect transfer state.
  - name: rules
    x-displayName: Rules
    description: >-
      Standing instructions that act on incoming funds. A rule watches a
      custodial wallet account (`trigger`) and, when funds become available on
      it, transfers them to a target (`action`) — most commonly a sweep to a
      non-custodial wallet destination.


      Rules match at the account credit, not at the deposit rail: fiat deposits
      settle into the issued bank account's settlement wallet account, so a rule
      on that wallet account catches ACH/SEPA/SWIFT deposits, stablecoin
      deposits, and internal transfers alike.


      The action target reuses the money-movement vocabulary (`account` for the
      customer's own accounts, `destination` for recipient destinations). At
      most one non-archived rule may watch a given trigger account. Statuses:
      `active ⇄ paused → archived` — pause and resume through PATCH, archive
      (terminal) through DELETE.
  - name: sandbox
    x-displayName: Sandbox
    description: Simulate supported account, task, capability, and transfer outcomes.
  - name: institutions
    x-displayName: Institutions
    description: List institutions referenced by capabilities and applications.
  - name: webhooks
    x-displayName: Webhooks
    description: Configure webhook endpoints and inspect delivery activity.
externalDocs:
  description: Swipelux Documentation
  url: https://docs.swipelux.com
paths:
  /v3/customers/{customerId}/documents:
    post:
      tags:
        - documents
      summary: Upload customer document
      description: >-
        Uploads one PDF, JPEG, PNG, WebP, or HEIF/HEIC document up to 25 MB as
        `multipart/form-data`. Send the raw binary in the `file` part; base64
        JSON is not accepted. Returns metadata for task submissions.
      operationId: postV3CustomersByCustomerIdDocuments
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 255
          example: idem_20260626_0001
          description: >-
            Required for effectful v3 requests (POST, PATCH, PUT, DELETE). Reuse
            the same key with the same body to replay the cached response.
        - schema:
            type: string
          in: path
          name: customerId
          required: true
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
                  description: >-
                    Raw PDF, JPEG, PNG, WebP, or HEIF/HEIC file bytes (max 25
                    MB); not a base64 string.
                type:
                  type: string
                  description: Optional document type.
      responses:
        '201':
          description: Document uploaded
          headers:
            Idempotency-Replayed:
              description: >-
                Present with value `true` when an idempotent request is
                replayed.
              schema:
                type: string
                enum:
                  - 'true'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        description: Document identifier (`doc_...`).
                      type:
                        type: string
                        description: Document type.
                      fileName:
                        type: string
                        description: Uploaded file name.
                      contentType:
                        type: string
                        description: Uploaded content type.
                      sizeBytes:
                        type: number
                        description: Uploaded file size in bytes.
                      createdAt:
                        type: string
                        description: Created at.
                      updatedAt:
                        type: string
                        description: Updated at.
                      status:
                        enum:
                          - uploaded
                        description: >-
                          Document status. Closed enum — exhaustive; additions
                          would be a breaking change.
                      archivedAt:
                        description: 'Always null: archived documents are not returned here.'
                        nullable: true
                    required:
                      - id
                      - type
                      - fileName
                      - contentType
                      - sizeBytes
                      - createdAt
                      - updatedAt
                      - status
                      - archivedAt
                required:
                  - data
        '400':
          description: Invalid multipart upload
          content:
            application/problem+json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - type
                  - title
                  - status
                  - code
                  - detail
                  - correlationId
                properties:
                  type:
                    type: string
                    format: uri
                    enum:
                      - https://docs.swipelux.com/errors/validation-error
                    description: Documentation URL for this stable problem code.
                  title:
                    type: string
                    description: Short human-readable problem title.
                  status:
                    type: integer
                    enum:
                      - 400
                    description: HTTP status code.
                  code:
                    type: string
                    enum:
                      - validation_error
                    description: Stable snake_case error code.
                  detail:
                    type: string
                    description: Actionable problem detail for legitimate callers.
                  correlationId:
                    type: string
                    description: Request correlation id. Mirrors `X-Request-Id`.
                  errors:
                    type: array
                    description: Field-level validation errors.
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - pointer
                        - code
                        - message
                      properties:
                        pointer:
                          type: string
                          description: JSON Pointer into the request body.
                        code:
                          type: string
                          description: Machine-readable field error code.
                        message:
                          type: string
                          description: Human-readable field error message.
        '401':
          description: Authentication required.
          content:
            application/problem+json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - type
                  - title
                  - status
                  - code
                  - detail
                  - correlationId
                  - retryable
                properties:
                  type:
                    type: string
                    format: uri
                    enum:
                      - https://docs.swipelux.com/errors/unauthorized
                    description: Documentation URL for this stable problem code.
                  title:
                    type: string
                    description: Short human-readable problem title.
                  status:
                    type: integer
                    enum:
                      - 401
                    description: HTTP status code.
                  code:
                    type: string
                    enum:
                      - unauthorized
                    description: Stable snake_case error code.
                  detail:
                    type: string
                    description: Actionable problem detail for legitimate callers.
                  correlationId:
                    type: string
                    description: Request correlation id. Mirrors `X-Request-Id`.
                  errors:
                    type: array
                    description: Field-level validation errors.
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - pointer
                        - code
                        - message
                      properties:
                        pointer:
                          type: string
                          description: JSON Pointer into the request body.
                        code:
                          type: string
                          description: Machine-readable field error code.
                        message:
                          type: string
                          description: Human-readable field error message.
                  retryable:
                    type: boolean
                    enum:
                      - false
                    description: Whether retrying the same request may succeed.
        '403':
          description: Insufficient permissions.
          content:
            application/problem+json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - type
                  - title
                  - status
                  - code
                  - detail
                  - correlationId
                  - retryable
                properties:
                  type:
                    type: string
                    format: uri
                    enum:
                      - https://docs.swipelux.com/errors/forbidden
                    description: Documentation URL for this stable problem code.
                  title:
                    type: string
                    description: Short human-readable problem title.
                  status:
                    type: integer
                    enum:
                      - 403
                    description: HTTP status code.
                  code:
                    type: string
                    enum:
                      - forbidden
                    description: Stable snake_case error code.
                  detail:
                    type: string
                    description: Actionable problem detail for legitimate callers.
                  correlationId:
                    type: string
                    description: Request correlation id. Mirrors `X-Request-Id`.
                  errors:
                    type: array
                    description: Field-level validation errors.
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - pointer
                        - code
                        - message
                      properties:
                        pointer:
                          type: string
                          description: JSON Pointer into the request body.
                        code:
                          type: string
                          description: Machine-readable field error code.
                        message:
                          type: string
                          description: Human-readable field error message.
                  retryable:
                    type: boolean
                    enum:
                      - false
                    description: Whether retrying the same request may succeed.
        '404':
          description: Resource not found.
          content:
            application/problem+json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - type
                  - title
                  - status
                  - code
                  - detail
                  - correlationId
                properties:
                  type:
                    type: string
                    format: uri
                    enum:
                      - https://docs.swipelux.com/errors/customer-not-found
                    description: Documentation URL for this stable problem code.
                  title:
                    type: string
                    description: Short human-readable problem title.
                  status:
                    type: integer
                    enum:
                      - 404
                    description: HTTP status code.
                  code:
                    type: string
                    enum:
                      - customer_not_found
                    description: Stable snake_case error code.
                  detail:
                    type: string
                    description: Actionable problem detail for legitimate callers.
                  correlationId:
                    type: string
                    description: Request correlation id. Mirrors `X-Request-Id`.
                  errors:
                    type: array
                    description: Field-level validation errors.
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - pointer
                        - code
                        - message
                      properties:
                        pointer:
                          type: string
                          description: JSON Pointer into the request body.
                        code:
                          type: string
                          description: Machine-readable field error code.
                        message:
                          type: string
                          description: Human-readable field error message.
        '409':
          description: Request conflict.
          content:
            application/problem+json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - type
                  - title
                  - status
                  - code
                  - detail
                  - correlationId
                  - retryable
                properties:
                  type:
                    type: string
                    format: uri
                    enum:
                      - https://docs.swipelux.com/errors/idempotency-conflict
                    description: Documentation URL for this stable problem code.
                  title:
                    type: string
                    description: Short human-readable problem title.
                  status:
                    type: integer
                    enum:
                      - 409
                    description: HTTP status code.
                  code:
                    type: string
                    enum:
                      - idempotency_conflict
                    description: Stable snake_case error code.
                  detail:
                    type: string
                    description: Actionable problem detail for legitimate callers.
                  correlationId:
                    type: string
                    description: Request correlation id. Mirrors `X-Request-Id`.
                  errors:
                    type: array
                    description: Field-level validation errors.
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - pointer
                        - code
                        - message
                      properties:
                        pointer:
                          type: string
                          description: JSON Pointer into the request body.
                        code:
                          type: string
                          description: Machine-readable field error code.
                        message:
                          type: string
                          description: Human-readable field error message.
                  retryable:
                    type: boolean
                    enum:
                      - false
                    description: Whether retrying the same request may succeed.
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                type: object
                additionalProperties: false
                required:
                  - type
                  - title
                  - status
                  - code
                  - detail
                  - correlationId
                  - retryable
                properties:
                  type:
                    type: string
                    format: uri
                    enum:
                      - https://docs.swipelux.com/errors/internal-error
                    description: Documentation URL for this stable problem code.
                  title:
                    type: string
                    description: Short human-readable problem title.
                  status:
                    type: integer
                    enum:
                      - 500
                    description: HTTP status code.
                  code:
                    type: string
                    enum:
                      - internal_error
                    description: Stable snake_case error code.
                  detail:
                    type: string
                    description: Actionable problem detail for legitimate callers.
                  correlationId:
                    type: string
                    description: Request correlation id. Mirrors `X-Request-Id`.
                  errors:
                    type: array
                    description: Field-level validation errors.
                    items:
                      type: object
                      additionalProperties: false
                      required:
                        - pointer
                        - code
                        - message
                      properties:
                        pointer:
                          type: string
                          description: JSON Pointer into the request body.
                        code:
                          type: string
                          description: Machine-readable field error code.
                        message:
                          type: string
                          description: Human-readable field error message.
                  retryable:
                    type: boolean
                    enum:
                      - true
                    description: Whether retrying the same request may succeed.
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key

````

## Related topics

- [Capabilities and tasks](/integration/onboarding/capabilities-and-requirements.md)
- [Individual onboarding API workflow](/knowledge-base/individual-onboarding/api-workflow.md)
- [KYB workflow](/knowledge-base/business-onboarding/kyb-workflow.md)
- [Business onboarding FAQ](/knowledge-base/business-onboarding/faq.md)
- [Archive customer document](/api-reference/documents/delete-v3-customers-by-customer-id-documents-by-document-id.md)
