Merge a contact
Merges the loser contact into this one, re-pointing its interactions, tasks, notes, pipeline entries, and ownership links, then soft-deleting it. Confirmation-gated: echo the loser id and pass `confirm: true`.
Merges the loser contact into this one, re-pointing its interactions, tasks, notes, pipeline entries, and ownership links, then soft-deleting it. Confirmation-gated: echo the loser id and pass confirm: true.
Authorization
bearerAuth contacts:createA gallery API key, sent as Authorization: Bearer gpk_… (or the x-api-key header).
In: header
Scope: contacts:create
Path Parameters
Header Parameters
Optional. Send a unique key per logical operation to make retries safe: a retry with the same key replays the stored success for 14 days instead of re-running the write. Reusing a key with a different body returns 400.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Merge the loser contact into this one (confirmation-gated).
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
{ "id": "string", "contact_type": "collector", "name": "string", "company": "string", "email": "string", "phone": "string", "notes": "string", "assignee_ids": [ "string" ], "lead_status": "new", "form_of_address": "string", "do_not_email": true, "archived_at": "string", "created_at": "string", "updated_at": "string", "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" }, "recent_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" } ], "open_tasks": [ { "id": "string", "contact_id": "string", "created_by": "string", "assignee_id": "string", "title": "string", "due_at": "string", "done_at": "string", "created_at": "string", "updated_at": "string" } ], "pipelines": [ { "list_id": "string", "contact_id": "string", "stage_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" } ], "private_notes": [ { "id": "string", "contact_id": "string", "author_id": "string", "body": "string", "created_at": "string" } ]}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "string", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "string", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "string", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "string", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "string", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "string", "retry": "permanent", "details": null}List contacts GET
Lists the gallery's CRM contacts with cursor pagination. Filter by `q` (name/email/company substring), `type`, `assigned_to` (assigned gallery member), `lead_status`, `list_id` (pipeline membership), `has_interaction_since`, or `ids` (comma-separated, max 50) for an explicit set.
Forget a saved payment method DELETE
Deletes the saved method and detaches it at Stripe so it can no longer be charged.