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

# Post apitransfers complete

> Finalize an upload transfer.

Optional request body fields control the metadata-extraction behavior:

* ``extracted_metadata`` (object) — pre-extracted metadata from the
  staged-upload preview. When provided, persists this verbatim and
  suppresses the post-commit auto-extraction hook.
* ``skip_extraction`` (bool) — when ``true``, suppresses auto-extraction
  and leaves metadata fields empty. The user explicitly opted out.

When neither field is set, behavior is unchanged: the auto-extraction
completion hook fires after commit. This preserves the contract for
callers (e.g. the electron app) that pre-date the staging UX.



## OpenAPI

````yaml /api-reference/openapi.yaml post /api/transfers/{id}/complete/
openapi: 3.0.3
info:
  title: Console API
  version: 1.0.0
  description: Central control plane API for the Dataerai platform.
servers:
  - url: https://{server}
    description: Your Dataerai deployment (the API is served under /api)
    variables:
      server:
        default: your-deployment.dataerai.com
        description: Host of your Dataerai deployment
security: []
paths:
  /api/transfers/{id}/complete/:
    post:
      tags:
        - api
      description: |-
        Finalize an upload transfer.

        Optional request body fields control the metadata-extraction behavior:

        * ``extracted_metadata`` (object) — pre-extracted metadata from the
          staged-upload preview. When provided, persists this verbatim and
          suppresses the post-commit auto-extraction hook.
        * ``skip_extraction`` (bool) — when ``true``, suppresses auto-extraction
          and leaves metadata fields empty. The user explicitly opted out.

        When neither field is set, behavior is unchanged: the auto-extraction
        completion hook fires after commit. This preserves the contract for
        callers (e.g. the electron app) that pre-date the staging UX.
      operationId: api_transfers_complete_create
      parameters:
        - in: path
          name: id
          schema:
            type: string
            format: uuid
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransferCompleteRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TransferCompleteRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/TransferCompleteRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transfer'
          description: ''
      security:
        - cookieAuthCsrfExempt: []
components:
  schemas:
    TransferCompleteRequest:
      type: object
      properties:
        extracted_metadata:
          nullable: true
        skip_extraction:
          type: boolean
          default: false
    Transfer:
      type: object
      description: |-
        Read-only representation of a transfer.

        Includes denormalized labels (``project_name``, ``repository_name``,
        ``asset_content_title``) so the client can render one row per
        transfer without extra round-trips. Transfers are visible only to
        the user who initiated them (GET /transfers/ lists the caller's own
        transfers), and the labels reflect what the initiator could see at
        initiation time — they remain readable even if the underlying
        access grant is later revoked. ``project_*`` and ``repository_*``
        fields are nullable — an asset may have no owning project, and its
        storage allocation may have been detached — clients MUST handle
        null.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        asset_content_id:
          type: string
          format: uuid
          readOnly: true
        type:
          allOf:
            - $ref: '#/components/schemas/TransferTypeEnum'
          readOnly: true
        status:
          allOf:
            - $ref: '#/components/schemas/TransferStatusEnum'
          readOnly: true
        origin:
          allOf:
            - $ref: '#/components/schemas/TransferOriginEnum'
          readOnly: true
        bytes_transferred:
          type: integer
          readOnly: true
        expires_at:
          type: string
          format: date-time
          readOnly: true
        initiated_by_id:
          type: string
          format: uuid
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        asset_content_title:
          type: string
          readOnly: true
        project_id:
          type: string
          format: uuid
          readOnly: true
        project_name:
          type: string
          readOnly: true
        repository_id:
          type: string
          format: uuid
          readOnly: true
        repository_name:
          type: string
          readOnly: true
        total_bytes:
          type: integer
          readOnly: true
          default: 0
        direction_supports_progress:
          type: boolean
          readOnly: true
        executor:
          allOf:
            - $ref: '#/components/schemas/ExecutorEnum'
          readOnly: true
        delivery_target:
          readOnly: true
        claimed_by_endpoint_id:
          type: string
          format: uuid
          readOnly: true
          nullable: true
        claimed_endpoint_name:
          type: string
          readOnly: true
        lease_expires_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
      required:
        - asset_content_id
        - asset_content_title
        - bytes_transferred
        - claimed_by_endpoint_id
        - claimed_endpoint_name
        - created_at
        - delivery_target
        - direction_supports_progress
        - executor
        - expires_at
        - id
        - initiated_by_id
        - lease_expires_at
        - origin
        - project_id
        - project_name
        - repository_id
        - repository_name
        - status
        - total_bytes
        - type
        - updated_at
    TransferTypeEnum:
      enum:
        - upload
        - download
      type: string
      description: |-
        * `upload` - Upload
        * `download` - Download
    TransferStatusEnum:
      enum:
        - pending
        - claimed
        - in_progress
        - completed
        - failed
        - expired
      type: string
      description: |-
        * `pending` - Pending
        * `claimed` - Claimed
        * `in_progress` - In Progress
        * `completed` - Completed
        * `failed` - Failed
        * `expired` - Expired
    TransferOriginEnum:
      enum:
        - user
        - system
      type: string
      description: |-
        * `user` - User
        * `system` - System
    ExecutorEnum:
      enum:
        - browser
        - client
      type: string
      description: |-
        * `browser` - Browser
        * `client` - Client (SDK endpoint)

````