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

# Create recommendation asset upload

> Registers a media asset (screenshot or video) on the error's recommendation and returns a short-lived presigned URL the browser PUTs the file to directly — the API never proxies the bytes. The upload must send exactly the declared content type. After uploading, call the confirm endpoint to verify the object and make the asset servable. Fails when no assets store is configured in this environment.

Required API key permission: `observe:errors:write`.



## OpenAPI

````yaml /api-reference/openapi/observe.yaml post /observe/errors/{errorID}/recommendation/assets
openapi: 3.1.1
info:
  version: 1.0.0
  title: Corbado API
  description: >
    # Introduction

    This documentation gives an overview of all Corbado API calls to implement
    authentication observe.
  contact:
    name: Corbado team
    email: support@corbado.com
    url: https://www.corbado.com
servers:
  - url: https://api.cloud.corbado.io/v1
security:
  - bearerAuth: []
tags:
  - name: ObserveFlow
    description: Flow search and related APIs
    x-group: Journeys and users
  - name: ObserveSubFlow
    description: Subflow search and related APIs
    x-group: Journeys and users
  - name: ObserveUser
    description: User search and related APIs
    x-group: Journeys and users
  - name: ObserveClientEnv
    description: Client environment search APIs
    x-group: Journeys and users
  - name: ObserveTimeSeries
    description: Time series query APIs
    x-group: Metrics and funnels
  - name: ObserveFunnel
    description: Historical funnel metrics, dictionaries and coverage.
    x-group: Metrics and funnels
  - name: ObserveEvent
    description: Event ingestion and event feed APIs
    x-group: Events
  - name: ObserveError
    description: Named authentication errors and recommendations.
    x-group: Error management
  - name: ObserveErrorFlavour
    description: Error variants and their impact on authentication outcomes.
    x-group: Error management
  - name: ObserveAlert
    description: Authentication alert rules, instances and history.
    x-group: Alert management
  - name: ObserveAnnotation
    description: Annotation APIs (dated notes for analytics context)
    x-group: Annotations
  - name: ObserveTableExport
    description: Table export file listing and download APIs
    x-group: Data exports
  - name: ObserveTimeSeriesExport
    description: Time-series export generation and downloads.
    x-group: Data exports
  - name: ObserveDataExport
    description: Data export APIs
    x-group: User data
  - name: ObserveDataDeletionJob
    description: Data deletion job APIs
    x-group: User data
  - name: ObserveFlowTypeDefinition
    description: Flow type definitions used in authentication journeys.
    x-group: Catalogs and labels
  - name: ObserveCatalog
    description: Catalog APIs
    x-group: Catalogs and labels
  - name: OpenAPI
    description: Downloadable API specification
  - name: ProjectOperationExecution
    description: Project-scoped operation history and pipeline health
  - name: ObserveClassification
    description: Flow and subflow classification APIs
  - name: ObserveIntegrationStats
    description: Integration stats APIs
  - name: ObserveTimeSeriesPrecalculation
    description: Time series precalculation APIs
  - name: ObserveIDList
    x-group: Saved ID lists
    description: Stored ID-list selection APIs
  - name: ObserveDataContext
    description: Schema-loose data context APIs for agent and debugging tooling
  - name: ObserveData
    description: Observe data administration APIs
  - name: ObserveTrackingStats
    description: Tracking ingestion stats APIs
  - name: ObserveExperiment
    x-group: Experiments
    description: Experiment catalog and run APIs
  - name: ObserveDataPolicy
    description: >-
      Project data policy catalogue (retention selected by the SDK's
      meta.dataPolicy code)
  - name: ObserveMetadata
    x-group: Metadata
    description: Authenticator metadata APIs (FIDO MDS + passkey AAGUID)
  - name: ObservePasskey
    x-group: Passkey analysis
    description: Observed passkey search and cohort analysis.
paths:
  /observe/errors/{errorID}/recommendation/assets:
    post:
      tags:
        - ObserveError
      summary: Create recommendation asset upload
      description: >-
        Registers a media asset (screenshot or video) on the error's
        recommendation and returns a short-lived presigned URL the browser PUTs
        the file to directly — the API never proxies the bytes. The upload must
        send exactly the declared content type. After uploading, call the
        confirm endpoint to verify the object and make the asset servable. Fails
        when no assets store is configured in this environment.


        Required API key permission: `observe:errors:write`.
      operationId: ObserveErrorRecommendationAssetCreate
      parameters:
        - name: errorID
          in: path
          required: true
          description: Error ID (format `err-<number>`).
          schema:
            type: string
          x-oapi-codegen-extra-tags:
            validate: required,id=err
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/observeAssetCreateReq'
      responses:
        '200':
          description: The pending asset plus the presigned upload URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/observeAssetCreateRsp'
        default:
          $ref: '#/components/responses/error'
      security:
        - bearerAuth:
            - observe:errors:write
components:
  schemas:
    observeAssetCreateReq:
      type: object
      required:
        - fileName
        - contentType
        - sizeBytes
      properties:
        fileName:
          type: string
          description: Original file name, for display.
          x-oapi-codegen-extra-tags:
            validate: required,min=1,max=255
        contentType:
          type: string
          description: >
            MIME type of the upload. Allowed: image/png, image/jpeg, image/webp,
            image/gif (up to 20 MB) and video/mp4, video/webm, video/quicktime
            (up to 500 MB). The presigned URL is bound to it — the browser's PUT
            must send exactly this content type.
          x-oapi-codegen-extra-tags:
            validate: >-
              required,oneof=image/png image/jpeg image/webp image/gif video/mp4
              video/webm video/quicktime
        sizeBytes:
          type: integer
          format: int64
          minimum: 1
          description: >-
            Exact file size in bytes; verified against the uploaded object on
            confirm.
          x-oapi-codegen-extra-tags:
            validate: required,min=1
    observeAssetCreateRsp:
      type: object
      required:
        - asset
        - uploadUrl
        - uploadExpiresAtMs
      properties:
        asset:
          $ref: '#/components/schemas/observeAsset'
        uploadUrl:
          type: string
          description: >-
            Presigned URL to PUT the file to, with the declared content type as
            the Content-Type header.
        uploadExpiresAtMs:
          type: integer
          format: int64
          description: When the upload URL stops working, in milliseconds since epoch.
    observeAsset:
      type: object
      description: >
        One user-uploaded media file (screenshot or video). The bytes live in a
        private object store; viewing goes through short-lived presigned URLs
        (see the downloadUrl endpoint), so this object carries metadata only.
      required:
        - id
        - fileName
        - contentType
        - sizeBytes
        - status
        - createdMs
      properties:
        id:
          type: string
          description: Asset ID (format `ast-<number>`).
        fileName:
          type: string
          description: Original file name, for display.
        contentType:
          type: string
          description: >-
            MIME type (image/png, image/jpeg, image/webp, image/gif, video/mp4,
            video/webm, video/quicktime).
        sizeBytes:
          type: integer
          format: int64
          description: Declared (and, once ready, verified) file size in bytes.
        status:
          type: string
          enum:
            - pending
            - ready
          description: Upload lifecycle — pending until the uploaded object was confirmed.
        createdMs:
          type: integer
          format: int64
          description: Creation time in milliseconds since epoch.
    errorRspV2:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - message
          properties:
            message:
              description: Error message
              type: string
              example: Validation failed
            details:
              description: Validation error details per field
              type: array
              items:
                type: object
                required:
                  - field
                  - message
                properties:
                  field:
                    description: Field name that failed validation
                    type: string
                    example: projectID
                  message:
                    description: Validation error message
                    type: string
                    example: required
  responses:
    error:
      description: Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/errorRspV2'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Use an Observe API key from the management console. The key selects the
        project and must grant the permission listed on the operation. Keep this
        key on your server.

````