---
title: "Upload digital download files"
method: POST
path: "/experiences/{experience_id}/files"
tags: ["Experiences"]
---

# Upload digital download files

`POST /experiences/{experience_id}/files`

## Request

- Base URL: `https://api.crevio.co/v1`
- URL: `https://api.crevio.co/v1/experiences/{experience_id}/files`
- Auth: API key in header `Authorization`

Attaches already-uploaded files to a digital download experience as deliverables. Upload the bytes first with `POST /files` (presigned upload), then reference the resulting ids here: `{ "file_ids": ["file_..."] }`. Appends to the existing set and de-duplicates, so re-sending an already-attached id is a safe no-op. Returns the full file list.

## Path parameters

- `experience_id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `file_ids` string[], required: Ids of files already uploaded via POST /files (e.g. "file_abc123") to attach as deliverables

## Response `201`

Files attached

- ListResponseDigitalDownloadFile
  - `object` 'list', required
  - `data` DigitalDownloadFile[], required
    - `id` string, required: Attachment id (`att_...`)
    - `filename` string, required
    - `content_type` string, nullable
    - `byte_size` integer, required
    - `url` string, required
  - `has_more` boolean, required
  - `url` string, required

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `422`: Validation error
- `429`: Rate limit exceeded — 600 requests per minute per credential. Retry after the number of seconds in `Retry-After`.
- `500`: Internal server error

---

[API](https://skmtc.dev/crevio/apis/crevio-api-v1.md) · [All operations](https://skmtc.dev/crevio/apis/crevio-api-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/crevio/apis/crevio-api-v1/revisions/2219f18ad651?raw)
