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

# Delete an asset

> Permanently delete an asset's stored content.

This is irreversible. Every stored version of the content is erased rather
than hidden, so the bytes cannot be recovered afterwards. The asset record
is retained with a `deleted` status and its usage and billing history stay
intact, but the content is no longer downloadable.

Deleting an asset that is already deleted succeeds and does nothing.

Returns `409` when work that is still in progress needs the content —
either as an input to it, or as the output it is still producing — or when
the content is shared with another resource, in which case delete that
resource instead.



## OpenAPI

````yaml /openapi.json delete /v1/assets/{asset_id}
openapi: 3.1.0
info:
  description: >
    Create realtime avatar sessions.


    ### Authentication

    All `/v1/*` endpoints require a live API key:


    ```

    Authorization: Bearer sk_live_...

    ```


    Keys are minted in the dashboard and are scoped to a single environment

    (staging or prod).


    ### Idempotency

    `POST /v1/sessions` may include an `Idempotency-Key` header (any opaque
    string,

    <= 255 chars). Retries with the same key inside 24 hours return the first

    response. The header is optional.


    ### Errors

    Every non-2xx response is a JSON body of the form:


    ```json

    {
      "error": {
        "type": "invalid_request",
        "code": "transport.unsupported",
        "message": "transport.type=pipecat is not supported",
        "param": "transport.type",
        "request_id": "req_01HXY..."
      }
    }

    ```


    Switch on `error.code` (stable lower_snake_case), not `error.message`.


    ### Pagination

    List endpoints use cursor pagination:


    ```

    GET /v1/sessions?limit=20&starting_after=sess_01HXY...

    ```


    Response shape:


    ```json

    {
      "object": "list",
      "data": [...],
      "has_more": true,
      "next_cursor": "sess_01HXY..."
    }

    ```
  summary: Protoface — realtime avatar API for developers.
  title: Protoface API
  version: 0.1.0
servers:
  - description: Production
    url: https://api.protoface.com
security: []
tags:
  - description: >-
      Create, retrieve, list, and end realtime avatar sessions. Sessions stream
      audio in and video out; their lifecycle drives billing.
    name: sessions
  - description: >-
      Avatar definitions. Includes platform stock avatars and customer-uploaded
      avatars.
    name: avatars
  - description: Reusable multimodal inputs and outputs for asynchronous model runs.
    name: assets
  - description: Provider-neutral model contracts and modality capabilities.
    name: models
  - description: Async model execution with typed multimodal inputs and outputs.
    name: runs
  - description: Aggregate usage for billing reconciliation.
    name: usage
  - description: >-
      Public platform metadata — currently just status. Unauthenticated.
      Internal load-balancer and task health probes exist on this host but are
      not part of the documented surface.
    name: platform
  - description: Direct media sessions for the `pipecat-protoface` avatar video service.
    name: pipecat
  - description: Public billing plan metadata for signup and pricing UI.
    name: billing
paths:
  /v1/assets/{asset_id}:
    delete:
      tags:
        - assets
      summary: Delete an asset
      description: >-
        Permanently delete an asset's stored content.


        This is irreversible. Every stored version of the content is erased
        rather

        than hidden, so the bytes cannot be recovered afterwards. The asset
        record

        is retained with a `deleted` status and its usage and billing history
        stay

        intact, but the content is no longer downloadable.


        Deleting an asset that is already deleted succeeds and does nothing.


        Returns `409` when work that is still in progress needs the content —

        either as an input to it, or as the output it is still producing — or
        when

        the content is shared with another resource, in which case delete that

        resource instead.
      operationId: delete_asset
      parameters:
        - in: path
          name: asset_id
          required: true
          schema:
            title: Asset Id
            type: string
      responses:
        '204':
          description: Successful Response
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
          description: The asset is a system asset, which cannot be deleted.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
          description: >-
            Work that is still in progress needs the content, or the content is
            shared with another resource. Retry once the work has finished, or
            delete the owning resource instead.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorEnvelope'
          description: Request body or parameters failed validation.
      security:
        - ApiKey: []
components:
  schemas:
    ApiErrorEnvelope:
      additionalProperties: false
      description: Wire format for every non-2xx public API response.
      examples:
        - error:
            code: transport.unsupported
            message: transport.type=pipecat is not supported
            param: transport.type
            request_id: req_01HXY5K8E7QYG3X8Z6N9R7S0VR
            type: invalid_request
      properties:
        error:
          $ref: '#/components/schemas/ApiError'
      required:
        - error
      title: ApiErrorEnvelope
      type: object
    ApiError:
      additionalProperties: false
      description: Concrete error returned inside `ApiErrorEnvelope.error`.
      properties:
        code:
          description: >-
            Stable machine-readable subcode (lower_snake_case). SDKs should
            switch on this, not `message`.
          type: string
        message:
          description: Human-readable summary. Not stable; do not parse.
          type: string
        param:
          anyOf:
            - type: string
            - type: 'null'
          description: Offending request field (dot-path), if applicable.
        request_id:
          description: Echo of the `X-Request-Id` response header for support.
          type: string
        type:
          $ref: '#/components/schemas/ErrorType'
      required:
        - type
        - code
        - message
        - request_id
      title: ApiError
      type: object
    ErrorType:
      description: |-
        Top-level error categories. Maps roughly to HTTP status.

        `code` (a free-form lower_snake_case string on `ApiError`) is the
        machine-readable subcode SDKs should switch on; `type` is the broad
        category.
      enum:
        - invalid_request
        - authentication
        - permission
        - not_found
        - conflict
        - unprocessable
        - rate_limit
        - quota_exceeded
        - internal
        - service_unavailable
      title: ErrorType
      type: string
  securitySchemes:
    ApiKey:
      bearerFormat: sk_live_*
      description: >-
        Live API key minted in the dashboard. Pass as `Authorization: Bearer
        sk_live_…`. Keys are scoped to a single environment (staging / prod).
      scheme: bearer
      type: http

````

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