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

# Request file upload URL

> **Individual customers only.** Request a pre-signed URL to upload a legacy 4-slot KYC file for an individual customer.

**For `type=business` customers, do not use this endpoint.** Use the dedicated KYB upload endpoints — `POST /api/external/customer/{customer}/owner/{owner}/file/presigned-url` for owner ID files and `POST /api/external/customer/{customer}/document/presigned-url` for KYB documents. See the [Business customer KYB guide](/guides/kyb/overview).

Upload process:
1. Make a PUT request to the `upload_url`.
2. Include the headers from the response.
3. Send the file as binary data in the request body.
4. Once uploaded, use the `file_id` to attach the file to the customer record via `POST /api/external/customer/{id}/files`.

IMPORTANT — Accepted identity documents: Only a Driver's License, Passport, or Resident Permit is accepted. ID cards (National Identity Cards) are NOT accepted.

IMPORTANT — Document quality: All uploaded documents must be clear, legible, and authentic. Blurry, cropped, obscured, or unclear images will not be reviewed and will be rejected. Fraudulent or falsified documents will not be tolerated — repeated attempts will result in the customer being permanently blacklisted from the platform. There are no exceptions or compromises.

Required scope: `file:upload`.



## OpenAPI

````yaml /api-reference/file/create-openapi.json post /api/external/file/get-presigned-url
openapi: 3.1.0
info:
  title: Blaaiz Platform API - Request file upload URL
  version: 1.0.0
  description: >-
    **Individual customers only.** Get a pre-signed URL to upload legacy 4-slot
    KYC files for an individual customer.


    **For `type=business` customers, use the dedicated KYB upload endpoints
    instead** — `POST
    /api/external/customer/{customer}/owner/{owner}/file/presigned-url` for
    owner ID files and `POST
    /api/external/customer/{customer}/document/presigned-url` for KYB documents.
    See the [Business customer KYB guide](/guides/kyb/overview).


    For the `identity` file category, only a Driver's License, Passport, or
    Resident Permit is accepted. ID cards (National Identity Cards) are NOT
    accepted. All uploaded documents must be clear, legible, and authentic.
    Blurry, cropped, obscured, or unclear images will not be reviewed and will
    be rejected. Fraudulent or falsified documents will not be tolerated —
    repeated attempts will result in the customer being permanently blacklisted
    from the platform. There are no exceptions or compromises.
servers:
  - url: https://api-prod.blaaiz.com
  - url: https://api-dev.blaaiz.com
security: []
tags:
  - name: File
paths:
  /api/external/file/get-presigned-url:
    post:
      tags:
        - File
      summary: Request file upload URL
      description: >-
        **Individual customers only.** Request a pre-signed URL to upload a
        legacy 4-slot KYC file for an individual customer.


        **For `type=business` customers, do not use this endpoint.** Use the
        dedicated KYB upload endpoints — `POST
        /api/external/customer/{customer}/owner/{owner}/file/presigned-url` for
        owner ID files and `POST
        /api/external/customer/{customer}/document/presigned-url` for KYB
        documents. See the [Business customer KYB guide](/guides/kyb/overview).


        Upload process:

        1. Make a PUT request to the `upload_url`.

        2. Include the headers from the response.

        3. Send the file as binary data in the request body.

        4. Once uploaded, use the `file_id` to attach the file to the customer
        record via `POST /api/external/customer/{id}/files`.


        IMPORTANT — Accepted identity documents: Only a Driver's License,
        Passport, or Resident Permit is accepted. ID cards (National Identity
        Cards) are NOT accepted.


        IMPORTANT — Document quality: All uploaded documents must be clear,
        legible, and authentic. Blurry, cropped, obscured, or unclear images
        will not be reviewed and will be rejected. Fraudulent or falsified
        documents will not be tolerated — repeated attempts will result in the
        customer being permanently blacklisted from the platform. There are no
        exceptions or compromises.


        Required scope: `file:upload`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileUploadRequest'
            example:
              customer_id: customer_123
              file_category: identity
      responses:
        '200':
          description: Upload URL generated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileUploadResponse'
              example:
                message: Upload URL generated successfully
                file_id: file_123456789
                url: https://s3.amazonaws.com/bucket/path?signature=xyz
                headers:
                  Content-Type: image/jpeg
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Invalid request parameters
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Invalid or missing access token
      security:
        - oauth2ClientCredentials:
            - file:upload
components:
  schemas:
    FileUploadRequest:
      type: object
      description: >-
        **Individual customers only.** This endpoint provides a presigned URL
        for uploading legacy 4-slot KYC files (`identity`, `identity_back`,
        `proof_of_address`, `liveness_check`) for an individual customer.


        **Do not use this endpoint for `type=business` customers.**
        Business-type customers use dedicated upload endpoints — `POST
        /api/external/customer/{customer}/owner/{owner}/file/presigned-url` for
        owner ID files and `POST
        /api/external/customer/{customer}/document/presigned-url` for KYB
        documents. See the [Business customer KYB guide](/guides/kyb/overview).


        File Category:
         - identity — Identity document. Required to verify an individual customer. Only a Driver's License, Passport, or Resident Permit is accepted. ID cards (National Identity Cards) are NOT accepted.
         - identity_back — Back side of the identity document. Use this when the identity document is two-sided (e.g. driver's license).
         - proof_of_address — Proof of address.
         - liveness_check — Liveness check.

        All uploaded documents must be clear, legible, and authentic. Blurry,
        cropped, obscured, or unclear images will not be reviewed and will be
        rejected. Fraudulent or falsified documents will not be tolerated —
        repeated attempts will result in the customer being permanently
        blacklisted from the platform.
      properties:
        customer_id:
          type: string
          description: Unique identifier of the customer
        file_category:
          type: string
          description: >-
            Category of the file. For the identity category: only a Driver's
            License, Passport, or Resident Permit is accepted for individual
            customers, and only a Certificate of Incorporation for business
            customers. ID cards (National Identity Cards) are NOT accepted. All
            documents must be clear and legible — unclear images will be
            rejected. Fraudulent documents will result in permanent
            blacklisting.
          enum:
            - identity
            - identity_back
            - proof_of_address
            - liveness_check
      required:
        - customer_id
        - file_category
    FileUploadResponse:
      type: object
      properties:
        message:
          type: string
        file_id:
          type: string
          description: Unique identifier for the file
        url:
          type: string
          format: uri
          description: Pre-signed URL to upload the file
        headers:
          type: object
          description: Headers to include when uploading the file
          additionalProperties:
            type: string
      required:
        - message
        - file_id
        - url
        - headers
    Error:
      type: object
      properties:
        message:
          type: string
      required:
        - message
  securitySchemes:
    oauth2ClientCredentials:
      type: oauth2
      description: >-
        Use your OAuth client credentials to obtain a short-lived Bearer token
        from POST /oauth/token.
      flows:
        clientCredentials:
          tokenUrl: /oauth/token
          scopes:
            file:upload: Upload files.

````