Skip to main content
CRUD and reverse-lookup endpoints for the organization’s contact directory. All contacts are org-scoped; the caller’s organization is derived from the auth context.

Create contact

Create a new contact. At least one of 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

Create a contact and configure one agent’s access in a single transaction using an admin API key. Agent-scoped keys cannot use this endpoint. Send the usual contact fields plus a required 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.
Errors: 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

List contacts visible under the caller’s contact permissions. Profile controls whether the contact is visible; Email, Phone, and Memories can be narrowed while Profile is enabled. Responses include only permitted identifiers and fields; fully hidden contacts are absent. Hosted voice in YOLO mode retains organization-wide contact reads.

Query parameters

Response (200)

Returns an array of contact objects, each with memory_count and latest_memory for the memories currently in effect.

Code examples


Lookup contact

Reverse-lookup contacts by a single field. Useful for routing inbound email or phone calls to a known 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

Fetch a single contact by its UUID.

Path parameters

Code examples


Update contact

Update a contact using JSON-merge-patch semantics:
  • Omit a field to leave it unchanged
  • Send a value to set it
  • Send null on a nullable scalar to clear it
  • Send a list to replace the stored list wholesale (no per-item merge)
After applying the patch, the server re-runs the FN rule against the merged state — if the update would leave every name field empty, the request 400s. The response includes the contact’s current active 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, or review_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.
Delete a contact. Returns 204 No Content on success.

Path parameters

Code examples


Delete contacts in bulk

Delete 1–1,000 contacts with an admin API key or a claimed agent API key. Pass their UUIDs in 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 is 200.
JSON
Each result has 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.

Contact object

Top-level fields

Email item

Phone item

Website item

Date item

Address item

All fields are optional free text.

Custom field item