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

# Confirm upload and create asset record

> After the frontend uploads the file to storage, call this endpoint to verify the upload and create the asset record. The backend HEADs the storage object to read actual size and MIME type.



## OpenAPI

````yaml /api/openapi.public.json post /v1/asset-uploads/{asset_upload_id}/confirmations
openapi: 3.1.0
info:
  title: Runflow API
  version: 0.1.0
  description: >-
    Public Runflow API. Run AI image and video models, manage media, inspect run
    history, and configure webhooks. Auth: HTTP Bearer.


    This document is the customer integration surface only. Admin and internal
    operations plus generic system reference-data tables are intentionally
    omitted.
servers:
  - url: https://api.runflow.io
    description: Production
security:
  - HTTPBearer: []
tags:
  - name: Models
    description: >-
      Browse the model catalog and dispatch model runs. The primary surface for
      running AI image and video generation.
  - name: Runs
    description: >-
      Inspect, cancel, and re-run model executions. Fetch logs, node-runs, and
      callback delivery history.
  - name: Media
    description: >-
      Upload images and videos as inputs. Organize assets into folders.
      Three-step presigned upload flow for large files.
  - name: Batches
    description: >-
      Run a model on multiple inputs in one request. Includes per-item status
      and a single callback when the batch completes.
  - name: Evaluations
    description: >-
      Submit an image generated anywhere for automated quality evaluation, then
      read a pass verdict, a 0-1 score, and structured issues. No Runflow run
      required.
  - name: Webhooks
    description: >-
      Subscribe to platform events. Inspect delivery history, redeliver failed
      callbacks, manage signing secrets.
  - name: Account
    description: Read your account identity and credit balance.
  - name: Status
    description: Health and readiness probes for the API.
paths:
  /v1/asset-uploads/{asset_upload_id}/confirmations:
    post:
      tags:
        - Media
      summary: Confirm upload and create asset record
      description: >-
        After the frontend uploads the file to storage, call this endpoint to
        verify the upload and create the asset record. The backend HEADs the
        storage object to read actual size and MIME type.
      operationId: createAssetUploadConfirmation
      parameters:
        - name: asset_upload_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Asset Upload Id
        - name: X-Organization-Id
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Organization-Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfirmAssetUploadRequest'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/models__asset__Asset__FullValidator'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Forbidden — inspect response body `code` for the specific reason
            (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED,
            ORGANIZATION_MEMBERSHIP_REQUIRED, ROLE_UNRESOLVED,
            IMPERSONATION_READ_ONLY)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Upload session or folder not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Storage service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - HTTPBearer: []
components:
  schemas:
    ConfirmAssetUploadRequest:
      properties:
        folder_id:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Folder Id
      additionalProperties: false
      type: object
      title: ConfirmAssetUploadRequest
      description: POST /v1/asset-uploads/{asset_upload_id}/confirmations body.
    models__asset__Asset__FullValidator:
      properties:
        id:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Id
        org_id:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Org Id
        folder_id:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Folder Id
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
        r2_key:
          anyOf:
            - type: string
            - type: 'null'
          title: R2 Key
        url:
          anyOf:
            - type: string
            - type: 'null'
          title: Url
        thumbnail_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Thumbnail Url
        mime_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Mime Type
        size_bytes:
          anyOf:
            - type: integer
            - type: 'null'
          title: Size Bytes
        asset_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Type
        source_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Source Type
        source_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Source Id
        created_by:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Created By
        created_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Created At
        updated_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Updated At
        deleted_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Deleted At
        deleted_by:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Deleted By
        created_by_user:
          anyOf:
            - $ref: '#/components/schemas/EmbedValidator'
            - type: 'null'
      type: object
      title: FullValidator
      description: Response shape.
    ErrorResponse:
      properties:
        code:
          type: string
          title: Code
        message:
          type: string
          title: Message
        errors:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Errors
      type: object
      required:
        - code
        - message
      title: ErrorResponse
      description: Standard error envelope — matches exception handler output.
    EmbedValidator:
      properties:
        id:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Id
        email:
          anyOf:
            - type: string
            - type: 'null'
          title: Email
        first_name:
          anyOf:
            - type: string
            - type: 'null'
          title: First Name
        last_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Last Name
        avatar_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Avatar Url
      type: object
      required:
        - id
        - email
        - first_name
        - last_name
        - avatar_url
      title: EmbedValidator
      description: |-
        Minimal user shape for embedded user fields.

        Includes only display-relevant fields. Excludes sensitive/admin
        fields: email_verified_at, disabled_at, is_internal, locale_code,
        timezone.
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````