Contacts and fields
The contacts of your account feed the campaigns of the console. Keep them in sync from your system — a new player, a changed name, a fresh deposit — with POST /v1/contacts. The endpoints need a key with the contacts permission.
Custom fields
Besides the number and the name, a contact has custom fields: values your account defines in the console (Settings → Fields). A campaign template refers to a field as a variable with its key, for example {{promo_code}}, and every recipient gets their own value.
GET /v1/fields lists the fields:
json
{
"data": [
{ "key": "promo_code", "label": "Promo code", "type": "text", "fallback": "BONUS10" },
{ "key": "amount", "label": "Deposit amount", "type": "money", "fallback": null },
{ "key": "vip_since", "label": "VIP since", "type": "date", "fallback": null }
]
}| Type | Send | Kept as |
|---|---|---|
text | any text up to 255 characters | as sent |
number | 1234.5, 1 234,5 | 1234.5 |
money | an amount in the currency of the account: 150, 1,234.50, $1 234,50 | 1234.5 |
date | 2026-10-30, 30.10.2026, 30/10/2026 (day first) | 2026-10-30 |
A campaign formats numbers, amounts and dates in the language of the message.
Create or update a contact
POST /v1/contacts finds the contact by its number: it creates it (201) or changes it (200).
json
{
"to": "+5521998120937",
"name": "Ana Souza",
"fields": { "promo_code": "VIP25", "amount": "150", "vip_since": "2026-09-14" }
}namereplaces the name;nullor an empty string clears it; leave it out to keep it.fieldschanges only the keys you send;nullremoves a value.- An unknown key is refused (
fields.<key>with the codein), and so is a value that does not fit the type (field_value). Nothing is saved when any field is refused.
A contact created through the API belongs to no contact list (its source is manual).