Create contact
given_name, family_name, company_name, or preferred_name must be non-empty (the vCard FN rule). If preferred_name is omitted it is synthesized from the other name fields.
Request body
Request example
JSON
Response (201)
Returns the created contact (see Contact object). If matching emails and phones belong to one suggested contact (review_status: "unreviewed") and none of those identifiers is in conflict, the request saves that suggestion instead of creating a second contact. The contact keeps its ID, memories, correspondence, and existing identifiers. Its memory_count and latest_memory reflect the retained memories, and creation_source stays communication.
The submitted name fields replace the existing name. Supplied non-name profile fields are applied, and omitted non-name fields are preserved. Explicit null clears a supplied nullable non-name field. An explicit empty list clears that supplied non-identifier list.
Saving a matching suggestion through create requires an admin API key or the Inkbox Console. Agent keys receive 409 when identifiers already belong to a contact. Setting review_status through PATCH also requires administrative authority.
Error responses
Code examples
Create contact with permissions
permissions object:
Use either nested
email/phone access objects or address-to-boolean maps; do not mix the two shapes. Contactable addresses must appear in the submitted contact fields. Profile must be enabled before Email, Phone, or Memories can be enabled. Disabling Profile disables every child permission. Otherwise omitted choices preserve existing settings when saving a matching suggestion. Other agents’ settings are preserved. If any permission cannot be applied, neither contact changes nor permissions are saved. The response is the same contact object returned by ordinary creation.
Legacy lists and boolean choices set both receiving and sending permission. Directional lists set only their side and preserve the other; null lists and mixed legacy/directional lists for the same group return 422. New options require SDK/CLI 0.7.3. Python uses ContactChannelAccessUpdate; TypeScript and CLI creation JSON use inboundContactable and outboundContactable. Rust adds create_with_access_options with DirectionalContactCreatePermissions. See directional contact access.
400 for an unavailable or foreign identity, 403 for insufficient authority, 409 for a contact conflict, and 422 for invalid or duplicate permission addresses or values absent from the contact request.
The earlier action-based creation shape remains accepted by the API: its addresses array contains {kind, value, action} items, where kind is email or phone and action is allow or block. The SDKs and CLI accept nested group-access objects and the boolean permission maps.
List contacts
Query parameters
Response (200)
Returns an array of contact objects, each withmemory_count and latest_memory for the memories currently in effect.
Code examples
Lookup contact
Query parameters
Exactly one of the following must be provided:Response (200)
Returns an array of contact objects (up to 200). An empty array means no match.Error responses
Code examples
Get contact
Path parameters
Code examples
Update contact
- Omit a field to leave it unchanged
- Send a value to set it
- Send
nullon a nullable scalar to clear it - Send a list to replace the stored list wholesale (no per-item merge)
memory_count and latest_memory.
Path parameters
Request body
Any subset of the Create contact body fields. Agent-scoped callers cannot change email addresses, phone numbers, orreview_status; they can edit other profile fields only when Profile access is enabled for that agent. Organization administrators can send review_status: "confirmed" to confirm an unreviewed contact. Confirmed contacts cannot transition back to unreviewed.
Editing profile fields as an organization administrator also confirms an unreviewed contact. Confirmation records reviewed_at and reviewed_by in the response.
Code examples
Delete contact
Humans using the Inkbox Console and admin API keys can delete contacts with configured visibility settings directly. No permission reset is required. Deleting a contact does not remove standalone email or phone communication rules.204 No Content on success.
Path parameters
Code examples
Delete contacts in bulk
contact_ids. Duplicate IDs produce one result, in first-occurrence order.
cURL
Response (200)
A missing or inaccessible contact produces an error for that ID without preventing deletion of the remaining contacts. Check every result, even when the HTTP response is200.
JSON
contact_id, a status of deleted or error, an optional error message, and an optional error_code. Human/admin deletion does not require a visibility reset; restricted agent deletions can still fail per contact. Invalid UUIDs, an empty list, or more than 1,000 IDs return 422.

