Contacts
Guests and other contacts of the organization
The contact object
Attributes
iduuidUnique identifier
created_atread-onlytimestamp with time zoneCreation timestamp
updated_atread-onlytimestamp with time zoneLast modification timestamp
addressread-onlytextAddress of the contact, as a single line
avatartext | nullURL of the avatar image
citytextCity of the contact
company_nametextCompany name of the contact, for invoices
countrytextCountry of the contact
country_codeCountryCode | ""ISO 3166-1 alpha-2 country code of the contact, or empty
e_invoice_addresstextE-invoicing address of the contact
e_invoice_schemetextScheme of the contact's e-invoicing address, e.g. a Peppol scheme
emailtextEmail address of the contact
first_nametextFirst name of the contact
ftsread-onlytsvectorFull text search index
languageLanguage | nullLanguage of the contact
last_nametextLast name of the contact
metaArray<{ key: string, value: string }>Metadata of the contact
nameread-onlytextFull name of the contact
notestextPrivate notes about the contact
phonetextPhone number of the contact
provincetextProvince of the contact
sms_opt_inbooleanWhether the contact agreed to receive text messages
statetextState of the contact
streettextStreet address of the contact
street2textSecond line of the street address of the contact
ziptextPostal code of the contact
Related resources
Embed related resources in the response with the select parameter, for example select=*,organizations(*). Resources related through more than one column need the column as a hint, like table!column(*).
contact_bookings(*)arrayThe contact bookings referencing this contact through contact_bookings.contact_id.
{
"id": "00000000-0000-0000-0000-000000000000",
"creator_id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:27:57.861Z",
"updated_at": "2026-10-30T22:27:57.861Z",
"address": "",
"avatar": "",
"city": "",
"company_name": "Summer cottage",
"country": "NL",
"country_code": "NL",
"e_invoice_address": "",
"e_invoice_scheme": "",
"email": "guest@example.com",
"first_name": "John",
"language": "en-US",
"last_name": "Doe",
"meta": {},
"name": "Summer cottage",
"notes": "A short description.",
"phone": "+31612345678",
"province": "",
"sms_opt_in": true,
"state": "",
"street": "",
"street2": "",
"zip": ""
}curl -X GET "https://api.bookingmood.com/v1/contacts?limit=10&select=*,organizations(*),user_profiles(*)" \
-H "Authorization: Bearer YOUR_API_KEY"List contacts
Filters
idFilter<uuid>Unique identifier
organization_idFilter<uuid>Identifier of the organization this contact is defined in
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
addressFilter<text>Address of the contact, as a single line
avatarFilter<text | null>URL of the avatar image
cityFilter<text>City of the contact
company_nameFilter<text>Company name of the contact, for invoices
countryFilter<text>Country of the contact
country_codeFilter<CountryCode | "">ISO 3166-1 alpha-2 country code of the contact, or empty
e_invoice_addressFilter<text>E-invoicing address of the contact
e_invoice_schemeFilter<text>Scheme of the contact's e-invoicing address, e.g. a Peppol scheme
emailFilter<text>Email address of the contact
first_nameFilter<text>First name of the contact
ftsFilter<tsvector>Full text search index
languageFilter<Language | null>Language of the contact
last_nameFilter<text>Last name of the contact
metaFilter<Array<{ key: string, value: string }>>Metadata of the contact
nameFilter<text>Full name of the contact
notesFilter<text>Private notes about the contact
phoneFilter<text>Phone number of the contact
provinceFilter<text>Province of the contact
sms_opt_inFilter<boolean>Whether the contact agreed to receive text messages
stateFilter<text>State of the contact
streetFilter<text>Street address of the contact
street2Filter<text>Second line of the street address of the contact
zipFilter<text>Postal code of the contact
Responses
200A list of contacts with the selected columns
206Partial Content
400The request is malformed, for example an unknown column or an invalid filter.
401The API key is missing or invalid.
code, message, details and hint. See the introduction for more on errors.GET /contactscurl -X GET "https://api.bookingmood.com/v1/contacts?select=*&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "00000000-0000-0000-0000-000000000000",
"creator_id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:27:57.861Z",
"updated_at": "2026-10-30T22:27:57.861Z",
"address": "",
"avatar": "",
"city": "",
"company_name": "Summer cottage",
"country": "NL",
"country_code": "NL",
"e_invoice_address": "",
"e_invoice_scheme": "",
"email": "guest@example.com",
"first_name": "John",
"language": "en-US",
"last_name": "Doe",
"meta": {},
"name": "Summer cottage",
"notes": "A short description.",
"phone": "+31612345678",
"province": "",
"sms_opt_in": true,
"state": "",
"street": "",
"street2": "",
"zip": ""
}
]Create contacts
Body
Partial<Contact> | Array<Partial<Contact>>Read-only attributes are set by the database and can't be written.
Responses
201The newly created contacts with the selected columns
400The request is malformed, for example an unknown column, an invalid filter or an invalid body.
401The API key is missing or invalid.
403The API key has no permission for this change, for example when writing rows of another organization.
409The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.
code, message, details and hint. See the introduction for more on errors.POST /contactscurl -X POST "https://api.bookingmood.com/v1/contacts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"city": "",
"company_name": "Summer cottage",
"country": "NL",
"country_code": "NL",
"e_invoice_address": "",
"e_invoice_scheme": "",
"email": "guest@example.com",
"first_name": "John",
"last_name": "Doe",
"meta": {},
"notes": "A short description.",
"organization_id": "00000000-0000-0000-0000-000000000000",
"phone": "+31612345678",
"province": "",
"sms_opt_in": true,
"state": "",
"street": "",
"street2": "",
"zip": ""
}'[
{
"id": "00000000-0000-0000-0000-000000000000",
"creator_id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:27:57.861Z",
"updated_at": "2026-10-30T22:27:57.861Z",
"address": "",
"avatar": "",
"city": "",
"company_name": "Summer cottage",
"country": "NL",
"country_code": "NL",
"e_invoice_address": "",
"e_invoice_scheme": "",
"email": "guest@example.com",
"first_name": "John",
"language": "en-US",
"last_name": "Doe",
"meta": {},
"name": "Summer cottage",
"notes": "A short description.",
"phone": "+31612345678",
"province": "",
"sms_opt_in": true,
"state": "",
"street": "",
"street2": "",
"zip": ""
}
]Delete contacts
Filters
Without filters, this request deletes all contacts you have access to. Always filter on at least one column, e.g. id=eq.{id}.
idFilter<uuid>Unique identifier
organization_idFilter<uuid>Identifier of the organization this contact is defined in
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
addressFilter<text>Address of the contact, as a single line
avatarFilter<text | null>URL of the avatar image
cityFilter<text>City of the contact
company_nameFilter<text>Company name of the contact, for invoices
countryFilter<text>Country of the contact
country_codeFilter<CountryCode | "">ISO 3166-1 alpha-2 country code of the contact, or empty
e_invoice_addressFilter<text>E-invoicing address of the contact
e_invoice_schemeFilter<text>Scheme of the contact's e-invoicing address, e.g. a Peppol scheme
emailFilter<text>Email address of the contact
first_nameFilter<text>First name of the contact
ftsFilter<tsvector>Full text search index
languageFilter<Language | null>Language of the contact
last_nameFilter<text>Last name of the contact
metaFilter<Array<{ key: string, value: string }>>Metadata of the contact
nameFilter<text>Full name of the contact
notesFilter<text>Private notes about the contact
phoneFilter<text>Phone number of the contact
provinceFilter<text>Province of the contact
sms_opt_inFilter<boolean>Whether the contact agreed to receive text messages
stateFilter<text>State of the contact
streetFilter<text>Street address of the contact
street2Filter<text>Second line of the street address of the contact
zipFilter<text>Postal code of the contact
Responses
200The deleted contacts with the selected columns. Returns 204 without a body when sending the header Prefer: return=minimal.
400The request is malformed, for example an unknown column or an invalid filter.
401The API key is missing or invalid.
403The API key has no permission for this change, for example when writing rows of another organization.
code, message, details and hint. See the introduction for more on errors.DELETE /contactscurl -X DELETE "https://api.bookingmood.com/v1/contacts?id=eq.00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "00000000-0000-0000-0000-000000000000",
"creator_id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:27:57.861Z",
"updated_at": "2026-10-30T22:27:57.861Z",
"address": "",
"avatar": "",
"city": "",
"company_name": "Summer cottage",
"country": "NL",
"country_code": "NL",
"e_invoice_address": "",
"e_invoice_scheme": "",
"email": "guest@example.com",
"first_name": "John",
"language": "en-US",
"last_name": "Doe",
"meta": {},
"name": "Summer cottage",
"notes": "A short description.",
"phone": "+31612345678",
"province": "",
"sms_opt_in": true,
"state": "",
"street": "",
"street2": "",
"zip": ""
}
]Update contacts
Filters
Without filters, this request updates all contacts you have access to. Always filter on at least one column, e.g. id=eq.{id}.
idFilter<uuid>Unique identifier
organization_idFilter<uuid>Identifier of the organization this contact is defined in
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
addressFilter<text>Address of the contact, as a single line
avatarFilter<text | null>URL of the avatar image
cityFilter<text>City of the contact
company_nameFilter<text>Company name of the contact, for invoices
countryFilter<text>Country of the contact
country_codeFilter<CountryCode | "">ISO 3166-1 alpha-2 country code of the contact, or empty
e_invoice_addressFilter<text>E-invoicing address of the contact
e_invoice_schemeFilter<text>Scheme of the contact's e-invoicing address, e.g. a Peppol scheme
emailFilter<text>Email address of the contact
first_nameFilter<text>First name of the contact
ftsFilter<tsvector>Full text search index
languageFilter<Language | null>Language of the contact
last_nameFilter<text>Last name of the contact
metaFilter<Array<{ key: string, value: string }>>Metadata of the contact
nameFilter<text>Full name of the contact
notesFilter<text>Private notes about the contact
phoneFilter<text>Phone number of the contact
provinceFilter<text>Province of the contact
sms_opt_inFilter<boolean>Whether the contact agreed to receive text messages
stateFilter<text>State of the contact
streetFilter<text>Street address of the contact
street2Filter<text>Second line of the street address of the contact
zipFilter<text>Postal code of the contact
Body
Partial<Contact>Read-only attributes are set by the database and can't be written.
Responses
200The updated contacts with the selected columns. Returns 204 without a body when sending the header Prefer: return=minimal.
400The request is malformed, for example an unknown column, an invalid filter or an invalid body.
401The API key is missing or invalid.
403The API key has no permission for this change, for example when writing rows of another organization.
409The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.
code, message, details and hint. See the introduction for more on errors.PATCH /contactscurl -X PATCH "https://api.bookingmood.com/v1/contacts?id=eq.00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"city": ""
}'[
{
"id": "00000000-0000-0000-0000-000000000000",
"creator_id": "00000000-0000-0000-0000-000000000000",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:27:57.861Z",
"updated_at": "2026-10-30T22:27:57.861Z",
"address": "",
"avatar": "",
"city": "",
"company_name": "Summer cottage",
"country": "NL",
"country_code": "NL",
"e_invoice_address": "",
"e_invoice_scheme": "",
"email": "guest@example.com",
"first_name": "John",
"language": "en-US",
"last_name": "Doe",
"meta": {},
"name": "Summer cottage",
"notes": "A short description.",
"phone": "+31612345678",
"province": "",
"sms_opt_in": true,
"state": "",
"street": "",
"street2": "",
"zip": ""
}
]