---
title: "Attach a file to the client brief"
method: POST
path: "/v1/intakes/{id}/brief/files"
tags: ["Intakes"]
---

# Attach a file to the client brief

`POST /v1/intakes/{id}/brief/files`

## Request

- Base URL: `https://api.briefgate.dev`
- URL: `https://api.briefgate.dev/v1/intakes/{id}/brief/files`
- Auth: HTTP bearer

Attaches a file to the client brief — the information and documents you hand the client, shown at the top of the portal before the requested items (see `client_brief` on POST /v1/intakes). Goes through the same pipeline a client's own upload does: real content-type sniffing rather than trusting the declared MIME, HEIC→JPEG conversion, and an antivirus scan before the file is stored — an infected upload is refused outright (422), not stored and hidden. A brief holds at most 10 files; an 11th returns 422. Counts against the account's storage quota. Refused with 409 (reason `intake_archived`) on an archived intake.

## Path parameters

- `id` string, required

## Response `201`

File attached

- object
  - `file` object
    - `id` string, required
    - `filename` string, required
    - `mime` string, required
    - `size` integer, required
    - `av_status` 'pending' | 'clean' | 'infected' | 'error' | 'skipped', required
    - `created_at` string, date-time, required

## Other responses

- `401`: Missing or invalid API key
- `403`: Authenticated but not allowed to perform this action
- `404`: Resource not found
- `409`: Intake is archived (`intake_archived`)
- `422`: No file, an empty file, an infected file, or the 10-file cap already reached

---

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