Get a contact
Overview
GET /contacts/{id} returns a single contact (person) by its ID - useful to back-fill a missed contact.* webhook, reconcile your CRM, or re-fetch a person on demand.
Unlike the contact webhook - which omits fields without a value - this endpoint always returns every field with an explicit
null when unset (consistent with GET /accounts, GET /invoices and GET /payments). The country field is returned verbatim as entered. account_id is the raw ID of the linked account (or null) - call GET /accounts/{id} to fetch the company details. Custom fields configured for your venue are included, also with explicit null when unset. Timestamps are Unix milliseconds.Authentication
All requests require a Bearer token (your BookingShake API key):Path Parameters
string
required
The contact ID - the
id field carried by the contact.created webhook.Request
Response
The contact is returned wrapped in the standard{ message, data } envelope.
Data Fields
Errors
A
404 is returned uniformly whenever the contact is outside your scope, so the existence of another venue’s contact is never disclosed.Next Steps
Contact Events
Receive contact changes in real time via the contact.* webhooks
Get an Account
Fetch the company a contact is attached to
Update a contact
Overview
PATCH /contacts/{id} updates a single contact (person) by its ID. It is a partial update: only the fields you include in the body are modified, everything else is left untouched.
The request body uses the same conventions as the response - the English (snake_case) field names returned by GET /contacts/{id}. So you can read a contact, change a few fields, and send them straight back. Pass null on any field to clear it.
Updating a contact automatically emits the
contact.updated webhook when at least one exposed field changes. The country field is stored verbatim as provided - no ISO normalization.Authentication
All requests require a Bearer token (your BookingShake API key):Path Parameters
string
required
The contact ID - the
id field carried by the contact.* webhooks.Body Parameters
All body fields are optional, but at least one must be provided. String fields are trimmed and limited to 255 characters. Passnull on any field to clear it. id and created_at are read-only and ignored.
string
First name.
string
Last name.
string
Email address. Must be a valid email when provided; pass
null to clear it.string
Mobile phone number.
string
Landline phone number.
string
Contact’s title.
string
Job position.
string
Avatar image URL.
string
Free-text notes about the contact.
string
ID of an existing account (company) to link the contact to. Must reference an account within the contact’s venue or venues group, otherwise the request is rejected with
400. Pass null to unlink.boolean
Marketing communications opt-in. Must be
true, false, or null.boolean
General communications opt-in. Must be
true, false, or null.string
Address.
string
Address, line 2.
string
Postal code.
string
City.
string
Country, stored verbatim.
string | array
Custom fields configured for your venue. A single-value field takes a string; a multi-select field takes an array of strings. An unknown custom field key is rejected with
400.Request
Response
The full contact is returned in its post-update state, wrapped in the standard{ message, data } envelope - identical in shape to GET /contacts/{id}.
Errors
A
404 is returned uniformly whenever the contact is outside your scope, so the existence of another venue’s contact is never disclosed.Next Steps
Get a Contact
Retrieve a contact before updating it
Contact Events
Receive contact changes in real time via the contact.* webhooks
