Developers
CRM contacts with VIES validation status.
GET /contacts List contactsPOST /contacts Create or upsert a contact/contactsList contacts
CRM contacts for your account, including VIES validation status.
Required permission:
contacts:contacts.read (Contacts › Contacts › Read)
Pagination: Parameters page and limit. The response includes total, page, limit, pages.
| Name | In | Type | Description |
|---|---|---|---|
page | query | integer | Default: 1 |
limit | query | integer | Default: 50 · maximum: 200 |
200 List of contacts · application/json
| Name | Type | Description |
|---|---|---|
contacts | object[] | |
contacts[].id | string | |
contacts[].firstName | string | |
contacts[].lastName | string | |
contacts[].fullName | string | |
contacts[].email | string (email)nullable | |
contacts[].phone | stringnullable | |
contacts[].nif | stringnullable | |
contacts[].countryCode | stringnullable | |
contacts[].isActive | boolean | |
contacts[].preferredLanguage | string | |
contacts[].viesValid | booleannullable | |
contacts[].viesCheckedAt | string (date-time)nullable | |
contacts[].viesTraderName | stringnullable | |
total | integer | Total items matching the filter. |
page | integer | Page returned (starts at 1). |
limit | integer | Page size applied. |
pages | integer | Total number of pages. |
401 Missing or invalid Bearer token. · application/json
| Name | Type | Description |
|---|---|---|
error | string | Human-readable error message |
required_permission | string | Present on 403 - the missing permission (area:resource.action) |
403 Token lacks the required permission, or the resource is outside the token's tenant. · application/json
| Name | Type | Description |
|---|---|---|
error | string | Human-readable error message |
required_permission | string | Present on 403 - the missing permission (area:resource.action) |
429 Rate limit exceeded. · application/json
| Name | Type | Description |
|---|---|---|
error | string | Human-readable error message |
required_permission | string | Present on 403 - the missing permission (area:resource.action) |
curl -X GET "https://app.bm.consulting/api/v1/contacts?limit=50" \
-H "Authorization: Bearer $BMC_TOKEN" const res = await fetch("https://app.bm.consulting/api/v1/contacts?limit=50", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.BMC_TOKEN}`,
},
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); import os
import requests
res = requests.get(
"https://app.bm.consulting/api/v1/contacts?limit=50",
headers={"Authorization": f"Bearer {os.environ['BMC_TOKEN']}"},
timeout=30,
)
res.raise_for_status()
data = res.json() /contactsCreate or upsert a contact
Creates or updates a CRM contact FOR YOUR ACCOUNT (dedup by NIF → email → phone). A repeat call with the same identity updates the existing contact.
Required permission:
contacts:contacts.create (Contacts › Contacts › Create)
Pagination: Not paginated: returns the full set.
application/json| Name | Type | Description |
|---|---|---|
firstNamerequired | string | |
lastNamerequired | string | |
email | string (email)nullable | |
phone | stringnullable | |
nif | stringnullable | NIF/NIE/CIF - strongest dedup key |
preferredLanguage | string |
200 Contact created or updated · application/json
| Name | Type | Description |
|---|---|---|
id | string | |
firstName | string | |
lastName | string | |
fullName | string | |
email | string (email)nullable | |
phone | stringnullable | |
nif | stringnullable | |
countryCode | stringnullable | |
isActive | boolean | |
preferredLanguage | string | |
viesValid | booleannullable | |
viesCheckedAt | string (date-time)nullable | |
viesTraderName | stringnullable |
400 Validation error · application/json
| Name | Type | Description |
|---|---|---|
error | string | Human-readable error message |
required_permission | string | Present on 403 - the missing permission (area:resource.action) |
401 Missing or invalid Bearer token. · application/json
| Name | Type | Description |
|---|---|---|
error | string | Human-readable error message |
required_permission | string | Present on 403 - the missing permission (area:resource.action) |
403 Token lacks the required permission, or the resource is outside the token's tenant. · application/json
| Name | Type | Description |
|---|---|---|
error | string | Human-readable error message |
required_permission | string | Present on 403 - the missing permission (area:resource.action) |
429 Rate limit exceeded. · application/json
| Name | Type | Description |
|---|---|---|
error | string | Human-readable error message |
required_permission | string | Present on 403 - the missing permission (area:resource.action) |
curl -X POST "https://app.bm.consulting/api/v1/contacts" \
-H "Authorization: Bearer $BMC_TOKEN" \
-H "Content-Type: application/json" \
-d '{"firstName":"string","lastName":"string"}' const res = await fetch("https://app.bm.consulting/api/v1/contacts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BMC_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"firstName": "string",
"lastName": "string"
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); import os
import requests
res = requests.post(
"https://app.bm.consulting/api/v1/contacts",
headers={"Authorization": f"Bearer {os.environ['BMC_TOKEN']}"},
json={
"firstName": "string",
"lastName": "string",
},
timeout=30,
)
res.raise_for_status()
data = res.json()