Export a contact's full record
Returns one contact's complete record — profile, interactions, tasks, notes, pipeline memberships, ownership links, offer history, and memory — as structured JSON for GDPR data-portability (Art. 20).
Returns one contact's complete record — profile, interactions, tasks, notes, pipeline memberships, ownership links, offer history, and memory — as structured JSON for GDPR data-portability (Art. 20).
Authorization
bearerAuth contacts:read, offers:read, gallery:readA gallery API key, sent as Authorization: Bearer gpk_… (or the x-api-key header).
In: header
Scope: contacts:read, offers:read, gallery:read
Path Parameters
The contact id.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
{ "contact": { "id": "string", "contact_type": "collector", "name": "string", "company": "string", "email": "string", "phone": "string", "notes": "string", "assignee_ids": [ "string" ], "last_interaction_at": "string", "last_interaction_type": "note", "lead_status": "new", "form_of_address": "string", "do_not_email": true, "archived_at": "string", "created_at": "string", "updated_at": "string", "save_state": "new", "custom_fields": { "property1": null, "property2": null }, "collector_profile": { "collecting_focus": "string", "budget_band": "string", "wishlist_notes": "string", "preferred_contact_method": "string", "vip": true, "tax_exempt": true, "created_at": "string", "updated_at": "string" }, "institution_profile": { "institution_kind": "string", "tax_exempt": true, "acquisition_process": "string", "primary_contact_name": "string", "created_at": "string", "updated_at": "string" }, "metadata": { "property1": "string", "property2": "string" } }, "interactions": [ { "id": "string", "contact_id": "string", "actor_id": "string", "type": "note", "direction": "inbound", "subject": "string", "body": "string", "artwork_id": "string", "occurred_at": "string", "created_at": "string", "updated_at": "string" } ], "tasks": [ { "id": "string", "contact_id": "string", "subject_type": "string", "subject_id": "string", "created_by": "string", "assignee_id": "string", "title": "string", "due_at": "string", "done_at": "string", "created_at": "string", "updated_at": "string" } ], "private_notes": [ { "id": "string", "contact_id": "string", "author_id": "string", "body": "string", "created_at": "string" } ], "list_memberships": [ { "list_id": "string", "contact_id": "string", "position": -9007199254740991, "note": "string", "created_at": "string" } ], "ownership": [ { "id": "string", "artwork_id": "string", "contact_id": "string", "role": "string", "acquired_at": "string", "note": "string", "created_at": "string" } ], "offers": [ { "property1": null, "property2": null } ], "memory": [ { "property1": null, "property2": null } ], "exported_at": "string"}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}Mint a signed contact-document upload URL POST
Returns a one-time signed target for uploading a document directly to Storage. The server derives the gallery-scoped object key; the client then uploads the bytes and registers the object via POST /documents. Requires a first-party session.
Contacts due a follow-up GET
Surface contacts who have gone quiet — a logged touch exists, but the most recent one predates `inactive_days` (default 30) ago and no open task is already tracking the follow-up. Ordered most-recently-quiet first (the timely nudges). Detection is a plain inactivity query — no model call.