Export Contacts as CSV
Stream contacts as a CSV download. Same filters as the list endpoint.
account_id, and at most 500 rows — see the caveat below) as text/csv. The column set is fixed — it does not track the raw table 1:1. In particular, several export columns are computed by flattening capture_payload.enrichment rather than being raw columns:
id, first_name, last_name, title, company, email, phone, stage, source, tags, notes, owner_id, created_at, updated_at, target_at, lead_at, contact_at, disqualified_at, captured_by_card_id, agent_demo_id, agent_demo_url, agent_demo_phone, converted_to_account_id, converted_to_deal_id, converted_at. Array/object cells are flattened (tags joined with ; , any nested object JSON-encoded); empty cells are the empty string, not null.
Accepts the same filters as List contacts, except there’s no account_id filter here. Free-text q matches the same fields (first/last name, email, title, company, company_domain).
Auth
Requires a CRM read scope and an active organization on the token. Any ofcontacts:read, deals:read, companies:read, or activities:read qualifies, as does any *:manage scope — manage implies read.
Response
200 — text/csv body with a Content-Disposition: attachment; filename="contacts-<timestamp>.csv" header. No JSON envelope.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Funnel stage filter: a single value ('contact') or a comma list ('target,lead').
Filter to contacts owned by this Logto user id.
Filter by origin tag; exact match. Values written by the backend: 'manual', 'import' (CSV import), 'customer_intel', 'scan_badge', 'scan_card', 'share_back'.
Filter by disqualification: true for disqualified only, false for active only.
Free-text search across first/last name, email, title, company, and company domain.
Requested row count. Accepted up to 10000, but the export currently returns at most 500 rows — larger values (including the 5000 default) have no effect and the CSV is truncated with no indicator. Page GET /contacts with limit/offset and X-Total-Count for a full extract.
Response
Successful Response