Contacts ​

Full reference for the Contacts resource in the bluefox.email API. See the API overview for authentication, the response envelope, and pagination.

List custom contact fields ​

GET /v1/projectId/{projectId}/contacts/fields

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.

Responses ​

StatusDescription
200OK
403Missing or invalid API key

Response body ​

FieldTypeRequiredDescription
itemsarray
countintegerTotal matching items across all pages, not just this page.
nextstringFull URL (path + query string) of the next page, or null if this is the last page.

Create a custom contact field ​

POST /v1/projectId/{projectId}/contacts/fields

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.

Request body ​

FieldTypeRequiredDescription
namestringyes
typestring (string | number | boolean | date)yes

Responses ​

StatusDescription
201Created
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key

Response body ​

FieldTypeRequiredDescription
namestringyes
typestring (string | number | boolean | date)yes

Delete a custom contact field ​

DELETE /v1/projectId/{projectId}/contacts/fields/{name}

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
namepathstringyes

Responses ​

StatusDescription
200Deleted
403Missing or invalid API key
404Custom contact field not found

List contacts ​

GET /v1/projectId/{projectId}/contacts

Accepts an API key or a whitelisted Origin header.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
filterqueryobjectmongoose-crudl style filter object.
limitqueryinteger
skipqueryinteger

Responses ​

StatusDescription
200OK
403Missing or invalid API key

Response body ​

FieldTypeRequiredDescription
itemsarray
countintegerTotal matching items across all pages, not just this page.
nextstringFull URL (path + query string) of the next page, or null if this is the last page.

Create a contact ​

POST /v1/projectId/{projectId}/contacts

Accepts an API key or a whitelisted Origin header (for client-side widget use).

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.

Request body ​

FieldTypeRequiredDescription
emailstringyes
namestring
tagsarray of string

Responses ​

StatusDescription
201Created
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
405The operation is blocked by a business rule (e.g. the resource is still in use)

Response body ​

FieldTypeRequiredDescription
_idstring
emailstring
namestring
tagsarray of string
_listsarray of stringNames of subscriber lists this contact belongs to.
createdAtstring
updatedAtstring

Get a contact by email ​

GET /v1/projectId/{projectId}/contacts/{email}

Accepts an API key or a whitelisted Origin header.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
emailpathstringyes

Responses ​

StatusDescription
200OK
403Missing or invalid API key
404Contact not found

Response body ​

FieldTypeRequiredDescription
_idstring
emailstring
namestring
tagsarray of string
_listsarray of stringNames of subscriber lists this contact belongs to.
createdAtstring
updatedAtstring

Update a contact ​

PATCH /v1/projectId/{projectId}/contacts/{email}

Accepts an API key or a whitelisted Origin header.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
emailpathstringyes

Request body ​

FieldTypeRequiredDescription
emailstring
namestring
tagsarray of string

Responses ​

StatusDescription
200OK
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Contact not found
405The operation is blocked by a business rule (e.g. the resource is still in use)

Response body ​

FieldTypeRequiredDescription
_idstring
emailstring
namestring
tagsarray of string
_listsarray of stringNames of subscriber lists this contact belongs to.
createdAtstring
updatedAtstring

Delete a contact ​

DELETE /v1/projectId/{projectId}/contacts/{email}

Also removes the contact from every subscriber list. Accepts an API key or a whitelisted Origin header.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
emailpathstringyes

Responses ​

StatusDescription
200Deleted
403Missing or invalid API key
404Contact not found

Response body ​

FieldTypeRequiredDescription
_idstring
emailstring
namestring
tagsarray of string
_listsarray of stringNames of subscriber lists this contact belongs to.
createdAtstring
updatedAtstring

List contacts (legacy flat URL shape) ​

GET /v1/contacts/{projectId}

Legacy flat URL shape, kept for backward compatibility - identical behavior to GET /v1/projectId/{projectId}/contacts above.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
filterqueryobjectmongoose-crudl style filter object.
limitqueryinteger
skipqueryinteger

Responses ​

StatusDescription
200OK
403Missing or invalid API key

Response body ​

FieldTypeRequiredDescription
itemsarray
countintegerTotal matching items across all pages, not just this page.
nextstringFull URL (path + query string) of the next page, or null if this is the last page.

Create a contact (legacy flat URL shape) ​

POST /v1/contacts/{projectId}

Legacy flat URL shape, kept for backward compatibility - identical behavior to POST /v1/projectId/{projectId}/contacts above. Accepts an API key or a whitelisted Origin header (for client-side widget use).

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.

Request body ​

FieldTypeRequiredDescription
emailstringyes
namestring
tagsarray of string

Responses ​

StatusDescription
201Created
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
405The operation is blocked by a business rule (e.g. the resource is still in use)

Response body ​

FieldTypeRequiredDescription
_idstring
emailstring
namestring
tagsarray of string
_listsarray of stringNames of subscriber lists this contact belongs to.
createdAtstring
updatedAtstring

Get a contact by email (legacy flat URL shape) ​

GET /v1/contacts/{projectId}/{email}

Legacy flat URL shape, kept for backward compatibility - identical behavior to GET /v1/projectId/{projectId}/contacts/{email} above.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
emailpathstringyes

Responses ​

StatusDescription
200OK
403Missing or invalid API key
404Contact not found

Response body ​

FieldTypeRequiredDescription
_idstring
emailstring
namestring
tagsarray of string
_listsarray of stringNames of subscriber lists this contact belongs to.
createdAtstring
updatedAtstring

Update a contact (legacy flat URL shape) ​

PATCH /v1/contacts/{projectId}/{email}

Legacy flat URL shape, kept for backward compatibility - identical behavior to PATCH /v1/projectId/{projectId}/contacts/{email} above. Accepts an API key or a whitelisted Origin header.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
emailpathstringyes

Request body ​

FieldTypeRequiredDescription
emailstring
namestring
tagsarray of string

Responses ​

StatusDescription
200OK
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Contact not found
405The operation is blocked by a business rule (e.g. the resource is still in use)

Response body ​

FieldTypeRequiredDescription
_idstring
emailstring
namestring
tagsarray of string
_listsarray of stringNames of subscriber lists this contact belongs to.
createdAtstring
updatedAtstring

Delete a contact (legacy flat URL shape) ​

DELETE /v1/contacts/{projectId}/{email}

Legacy flat URL shape, kept for backward compatibility - identical behavior to DELETE /v1/projectId/{projectId}/contacts/{email} above.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
emailpathstringyes

Responses ​

StatusDescription
200Deleted
403Missing or invalid API key
404Contact not found

Response body ​

FieldTypeRequiredDescription
_idstring
emailstring
namestring
tagsarray of string
_listsarray of stringNames of subscriber lists this contact belongs to.
createdAtstring
updatedAtstring

List contacts ​

GET /v1/projectId/{projectId}/contacts/tags

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
limitqueryintegerMax items per page. Capped at 30.
skipqueryintegerNumber of items to skip, for pagination.
sortquerystringField to sort by.
orderquerystring
filter[<field>]querystringExact-match filter on a top-level field, e.g. filter[name]=Welcome. Repeatable for multiple fields.

Responses ​

StatusDescription
200OK
403Missing or invalid API key

Response body ​

FieldTypeRequiredDescription
itemsarray
countintegerTotal matching items across all pages, not just this page.
nextstringFull URL (path + query string) of the next page, or null if this is the last page.

Create a contact ​

POST /v1/projectId/{projectId}/contacts/tags

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.

Request body ​

FieldTypeRequiredDescription
valuestringyes

Responses ​

StatusDescription
201Created
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
409The resource already exists

Response body ​

FieldTypeRequiredDescription
_idstring
valuestring
createdAtstring
updatedAtstring

Get a single contact ​

GET /v1/projectId/{projectId}/contacts/tags/{id}

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
idpathstringyes

Responses ​

StatusDescription
200OK
403Missing or invalid API key
404Contacts not found

Response body ​

FieldTypeRequiredDescription
_idstring
valuestring
createdAtstring
updatedAtstring

Partially update a contact ​

PATCH /v1/projectId/{projectId}/contacts/tags/{id}

Merges the given fields into the existing document - omitted fields are left unchanged. Nothing is required (unlike create) since every field is optional on a partial update.

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
idpathstringyes

Request body ​

FieldTypeRequiredDescription
valuestring

Responses ​

StatusDescription
200OK
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Contacts not found

Response body ​

FieldTypeRequiredDescription
_idstring
valuestring
createdAtstring
updatedAtstring

Delete a contact ​

DELETE /v1/projectId/{projectId}/contacts/tags/{id}

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
idpathstringyes

Responses ​

StatusDescription
200Deleted
403Missing or invalid API key
404Contacts not found

Response body ​

FieldTypeRequiredDescription
_idstring
valuestring
createdAtstring
updatedAtstring

Resend a double opt-in verification email ​

POST /v1/projectId/{projectId}/subscriber-lists/{subscriberListId}/contacts/{email}/resend-verification-email

Only works while the contact is still "unverified" on the given list, and only when double opt-in is enabled (either on the list, or on the signup form they originally used).

Parameters ​

NameInTypeRequiredDescription
projectIdpathstringyesThe project _id, found in the app under Project Settings.
subscriberListIdpathstringyes
emailpathstringyes

Responses ​

StatusDescription
200OK
400Invalid request body or query - every violation found (missing/invalid/unexpected fields) is reported in one response, semicolon-separated, not just the first one hit.
403Missing or invalid API key
404Contact not found

Response body ​

FieldTypeRequiredDescription
successboolean