List the project's media assets
Newest first. Each image also carries a short-lived preview_url; other kinds have null there, so fetch their bytes through GET /v1/media/{slug}.
Only your own uploads by default. Media that CUSTOMERS sent in over WhatsApp is a separate class of data (source: "conversation_inbound") and is excluded. Pass include_inbound=true to include it — that additionally requires the conversations:read scope, and a key without it gets 403 rather than a quietly-filtered list.
include_usage=true adds used_in, the flows and code files referencing each slug. It costs one read per project file, so it is off by default.
Every response also carries storage: how many bytes this project is storing, the ceiling, and the headroom left. An upload past the ceiling is refused with 413 storage_limit_exceeded, so read this before a bulk sync. Media customers sent in over WhatsApp counts toward the total even when it is filtered out of assets.
Required scope: media:read
Authorizations
Project API key issued in Settings → API keys. Send it as Authorization: Bearer pk_live_….
Headers
Target project id, for an MCP OAuth bearer (mcp_at_…) attached to more than one project — get ids from GET /v1/projects. Matched case-insensitively.
Omit it and a READ falls back to the connection's default project; a mutation (any non-GET) on a connection with 2+ projects is rejected with 400 project_required — a write is never defaulted to a guessed project. A connection with exactly one project never needs the header.
Scopes are checked against the SELECTED project only, never a union across the connection.
For a pk_ API key the header selects nothing — one key is one project's context — but it IS validated: omit it and the key's own project is used, send it and it must name that project, otherwise the call is rejected with 403 project_not_attached (a blank value is 400 invalid_project_header, as above).
Query Parameters
Also return used_in for each asset — the flows and code files referencing its slug. Costs one read per project file, so it is off by default.
true, false, 1, 0, Also return media customers sent in over WhatsApp. Requires the conversations:read scope as well.
true, false, 1, 0, 