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