Contacts
Contacts of the company: profile fields, consent state, suppressions, custom fields, purposes of processing (consents), activities and GDPR export and erasure.
Technická reference je anglicky (stejně jako strojově čitelný dokument OpenAPI). Celou skupinu pro AI agenta načtete z /api/openapi.json?tag=Contacts.
Přihlášení: Authorization: Bearer pst_... nebo HTTP Basic (e-mail člena firmy a API klíč).
Operace
| Metoda | Cesta | Popis |
|---|---|---|
| GET | /api/v1/tenants/{tenant}/contacts | List contacts (search, filters, paging) |
| POST | /api/v1/tenants/{tenant}/contacts | Create a contact |
| POST | /api/v1/tenants/{tenant}/contacts/bulk | Start a bulk action over contacts in the background |
| GET | /api/v1/tenants/{tenant}/contacts/duplicates | Find possible duplicate contacts |
| GET | /api/v1/tenants/{tenant}/contacts/summary | Count contacts by status |
| GET | /api/v1/tenants/{tenant}/contacts/{contact_id} | Get a contact |
| PATCH | /api/v1/tenants/{tenant}/contacts/{contact_id} | Update a contact |
| DELETE | /api/v1/tenants/{tenant}/contacts/{contact_id} | Delete a contact |
| GET | /api/v1/tenants/{tenant}/contacts/{contact_id}/activities | List activities of a contact |
| POST | /api/v1/tenants/{tenant}/contacts/{contact_id}/activities | Add a manual activity (note) to a contact |
| GET | /api/v1/tenants/{tenant}/contacts/{contact_id}/automation-runs | The real journey of a contact through the automations (runs and steps) |
| POST | /api/v1/tenants/{tenant}/contacts/{contact_id}/blacklist | Blacklist a contact |
| DELETE | /api/v1/tenants/{tenant}/contacts/{contact_id}/blacklist | Remove a contact from the blacklist |
| GET | /api/v1/tenants/{tenant}/contacts/{contact_id}/coupons | List coupons given to a contact |
| POST | /api/v1/tenants/{tenant}/contacts/{contact_id}/erase | Erase a contact (GDPR, irreversible) |
| GET | /api/v1/tenants/{tenant}/contacts/{contact_id}/export | Export all data of a contact (GDPR access) |
| GET | /api/v1/tenants/{tenant}/contacts/{contact_id}/neighbors | Previous and next contact of a filtered list |
| GET | /api/v1/tenants/{tenant}/contacts/{contact_id}/purposes | List consents (purposes) of a contact |
| POST | /api/v1/tenants/{tenant}/contacts/{contact_id}/purposes | Record a consent (purpose) of a contact |
| POST | /api/v1/tenants/{tenant}/contacts/{contact_id}/purposes/{consent_id}/withdraw | Withdraw a consent of a contact |
| GET | /api/v1/tenants/{tenant}/contacts/{contact_id}/segments | List segments a contact belongs to |
| POST | /api/v1/tenants/{tenant}/contacts/{contact_id}/unsubscribe | Unsubscribe a contact from everything |
| GET | /api/v1/tenants/{tenant}/custom-fields | List custom fields |
| POST | /api/v1/tenants/{tenant}/custom-fields | Create a custom field |
| PATCH | /api/v1/tenants/{tenant}/custom-fields/{field_id} | Update a custom field |
| DELETE | /api/v1/tenants/{tenant}/custom-fields/{field_id} | Delete a custom field |
| GET | /api/v1/tenants/{tenant}/purposes | List purposes of processing (consent types) |
| POST | /api/v1/tenants/{tenant}/purposes | Create a purpose of processing |
| PATCH | /api/v1/tenants/{tenant}/purposes/{purpose_id} | Update a purpose of processing |
| DELETE | /api/v1/tenants/{tenant}/purposes/{purpose_id} | Delete a purpose of processing |
| POST | /api/v1/tenants/{tenant}/purposes/{purpose_id}/to-contact-list | Create a list of the contacts with a purpose |
| GET | /api/v1/tenants/{tenant}/search | Search contacts, campaigns, templates and more |
| GET | /api/v1/tenants/{tenant}/suppressions | List suppressed addresses |
| POST | /api/v1/tenants/{tenant}/suppressions | Suppress an address |
| POST | /api/v1/tenants/{tenant}/suppressions/blacklist-import | Import addresses to the blacklist |
| DELETE | /api/v1/tenants/{tenant}/suppressions/{email} | Remove one suppression |
List contacts (search, filters, paging)
GET /api/v1/tenants/{tenant}/contacts
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full · Nástroj MCP: search_contacts
Searches contacts. Filters: q (e-mail, name or #id), tab (all, bounced, no_list, blacklisted, complained), status (pending, subscribed, unsubscribed, bounced, complained), engagement (A to E, N), shop. Paged, newest first.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
createdFrom | query | string | ne | |
createdTo | query | string | ne | |
engagement | query | string | ne | Engagement grade A to E or N (unknown). |
engagementOp | query | string | ne | |
fields | query | string | ne | |
import | query | string | ne | |
list | query | string | ne | |
listOp | query | string | ne | |
page | query | integer | ne | Page number, from 1. default 1, min 1 |
pageSize | query | integer | ne | Items per page, 1 to 100. default 25, min 1, max 100 |
q | query | string | ne | Search text. max 200 chars |
shop | query | string | ne | Shop id filter. |
sort | query | string | ne | Sort fields separated by commas, "-" = descending, at most 3 (e.g. name,-id). |
source | query | string | ne | |
sourceOp | query | string | ne | |
state | query | string | ne | |
stateOp | query | string | ne | |
status | query | one of: pending, subscribed, unsubscribed, bounced, complained | ne | Contact status. |
tab | query | one of: all, bounced, no_list, blacklisted, complained | ne | Tab filter. |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | q |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Create a contact
POST /api/v1/tenants/{tenant}/contacts
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: create_contact (přes MCP jen s náhledem a potvrzením)
Creates a contact by hand (like one import row). Needs a purpose of processing and consentConfirmed true (the user confirms a documented consent). Other profile fields by their API names: titleBefore, titleAfter, mobile, companyId, street, postalCode, country, nameDay, note, salutation, salutationFormal, vocativeFirstName, vocativeLastName, affiliateId.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
Tělo požadavku (application/json): Required by the server: email, shopId.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
email | string | ano | |
shopId | string | ano | |
purposeId | string | ano | |
consentConfirmed | boolean | ano | |
listIds | array of string | ne | |
validFrom | string | ne | SE's "Od kdy účel platí" (KK-17): a day (YYYY-MM-DD) or an ISO date-time; default now. |
firstName | string | ne | |
lastName | string | ne | |
titleBefore | string | ne | |
titleAfter | string | ne | |
salutation | string | ne | |
salutationFormal | string | ne | |
vocativeFirstName | string | ne | |
vocativeLastName | string | ne | |
gender | one of: f, m, null | ne | |
language | string | ne | |
company | string | ne | |
companyId | string | ne | |
phone | string | ne | |
mobile | string | ne | |
street | string | ne | |
city | string | ne | |
postalCode | string | ne | |
country | string or null | ne | |
birthday | string or null | ne | |
nameDay | string or null | ne | |
note | string | ne | |
affiliateId | string | ne | |
customFields | map of boolean or string or number or array of string or null | ne |
Odpovědi
- 201 Created:
application/jsonContactDetail
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Start a bulk action over contacts in the background
POST /api/v1/tenants/{tenant}/contacts/bulk
Oprávnění: modul contacts, úroveň full; klíč s přístupem full
SE's bulk actions of the contacts grid as a background job (core/contacts_bulk.py, KG-08): body {action: add_to_list | blacklist | delete, contactIds: [ids] (the ticked rows) or all: true (every contact matching the grid filters given as the query string of GET /contacts), listIds for add_to_list}. Contacts on the blacklist are left out. 202 {jobId, count}; the end comes as the notification contacts_bulk_done.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
createdFrom | query | string | ne | |
createdTo | query | string | ne | |
engagement | query | string | ne | |
engagementOp | query | string | ne | |
fields | query | string | ne | |
import | query | string | ne | |
list | query | string | ne | |
listOp | query | string | ne | |
page | query | integer | ne | Page number, from 1. default 1, min 1 |
pageSize | query | integer | ne | Items per page, 1 to 100. default 25, min 1, max 100 |
q | query | string | ne | Search text (case and diacritics insensitive). max 200 chars |
shop | query | string | ne | Only objects of this shop (shop id). |
sort | query | string | ne | Sort fields separated by commas, "-" = descending, at most 3 (e.g. name,-id). |
source | query | string | ne | |
sourceOp | query | string | ne | |
state | query | string | ne | |
stateOp | query | string | ne | |
status | query | string | ne | Status filter. |
tab | query | string | ne |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
action | one of: blacklist, add_to_list, delete | ano | |
contactIds | array of string | ne | The ticked contacts; or all: every contact matching the grid query (no cap). |
all | boolean | ne | |
listIds | array of string | ne | add_to_list: the manual lists. |
Odpovědi
- 200 OK:
application/jsonContactsBulkStarted
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | all, contactIds, q |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Find possible duplicate contacts
GET /api/v1/tenants/{tenant}/contacts/duplicates
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full
Possible duplicates (core/contacts.possible_duplicates): groups of contacts with the same phone or the same name and company. A report only, nothing is merged.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
Odpovědi
- 200 OK:
application/jsonDuplicateReport
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Count contacts by status
GET /api/v1/tenants/{tenant}/contacts/summary
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
createdFrom | query | string | ne | |
createdTo | query | string | ne | |
engagement | query | string | ne | |
engagementOp | query | string | ne | |
fields | query | string | ne | |
list | query | string | ne | |
listOp | query | string | ne | |
page | query | integer | ne | Page number, from 1. default 1, min 1 |
pageSize | query | integer | ne | Items per page, 1 to 100. default 25, min 1, max 100 |
q | query | string | ne | Search text (case and diacritics insensitive). max 200 chars |
shop | query | string | ne | Only objects of this shop (shop id). |
sort | query | string | ne | Sort fields separated by commas, "-" = descending, at most 3 (e.g. name,-id). |
source | query | string | ne | |
sourceOp | query | string | ne | |
state | query | string | ne | |
stateOp | query | string | ne | |
status | query | string | ne | Status filter. |
tab | query | string | ne |
Odpovědi
- 200 OK:
application/jsonContactSummary
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Get a contact
GET /api/v1/tenants/{tenant}/contacts/{contact_id}
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full · Nástroj MCP: get_contact
Contact card: profile fields, status and consent, lists, last 90 days of e-mail activity, recent activities and orders (totals per currency).
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Odpovědi
- 200 OK:
application/jsonContactDetail
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Update a contact
PATCH /api/v1/tenants/{tenant}/contacts/{contact_id}
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: update_contact (přes MCP jen s náhledem a potvrzením)
Changes profile fields and custom fields of a contact (never its e-mail, status or consent). Other profile fields by their API names: titleBefore, titleAfter, mobile, companyId, street, postalCode, country, nameDay, note, salutation, salutationFormal, vocativeFirstName, vocativeLastName, affiliateId.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
firstName | string | ne | |
lastName | string | ne | |
titleBefore | string | ne | |
titleAfter | string | ne | |
salutation | string | ne | |
salutationFormal | string | ne | |
vocativeFirstName | string | ne | |
vocativeLastName | string | ne | |
gender | one of: f, m, null | ne | |
language | string | ne | |
company | string | ne | |
companyId | string | ne | |
phone | string | ne | |
mobile | string | ne | |
street | string | ne | |
city | string | ne | |
postalCode | string | ne | |
country | string or null | ne | |
birthday | string or null | ne | |
nameDay | string or null | ne | |
note | string | ne | |
affiliateId | string | ne | |
customFields | map of boolean or string or number or array of string or null | ne |
Odpovědi
- 200 OK:
application/jsonContactDetail
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Delete a contact
DELETE /api/v1/tenants/{tenant}/contacts/{contact_id}
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: delete_contact (přes MCP jen s náhledem a potvrzením)
Deletes a contact (its suppression stays, so it is never mailed again by mistake). For a data erasure request use erase_contact.
204, 404, or 423 recently_sent: a campaign e-mail to the contact is queued or went out within 24 hours (SE's HTTP 423, core/contact_data.py RECENT_SEND).
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Odpovědi
- 204 No content
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 423 | recently_sent | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
List activities of a contact
GET /api/v1/tenants/{tenant}/contacts/{contact_id}/activities
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
from | query | string | ne | Start of the period (YYYY-MM-DD local day, or ISO time where noted). |
page | query | integer | ne | Page number, from 1. default 1, min 1 |
pageSize | query | integer | ne | Items per page, 1 to 100. default 25, min 1, max 100 |
q | query | string | ne | Search text (case and diacritics insensitive). max 200 chars |
to | query | string | ne | End of the period (YYYY-MM-DD local day, or ISO time where noted). |
type | query | string | ne |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | q, type |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Add a manual activity (note) to a contact
POST /api/v1/tenants/{tenant}/contacts/{contact_id}/activities
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: add_contact_activity
Adds a note, call, deal or other activity to a contact.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Tělo požadavku (application/json): Required by the server: kind, title.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
kind | one of: other, note, call, deal | ano | |
title | string | ano | |
body | string | ne | |
at | string | ne | ISO time; default now. |
Odpovědi
- 201 Created:
application/jsonContactActivity
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
The real journey of a contact through the automations (runs and steps)
GET /api/v1/tenants/{tenant}/contacts/{contact_id}/automation-runs
Oprávnění: modul campaigns, úroveň read; klíč s přístupem read nebo full
The real journey of one contact through the automations (contact card, tab Automatizace): its runs, newest first, each with {automation: {id, name, status}, nodes: {key: {type, name}}} and its real steps (outcome, branch, next node, reason). Paged. 404 for a contact of another tenant.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
page | query | integer | ne | Page number, from 1. default 1, min 1 |
pageSize | query | integer | ne | Items per page, 1 to 100. default 25, min 1, max 100 |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Blacklist a contact
POST /api/v1/tenants/{tenant}/contacts/{contact_id}/blacklist
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: blacklist_contact
Puts the contact on the blacklist (manual suppression: never mailed).
Card menu "Přidat na blacklist" (KK-02): 201 newly added, 200 already there (the note stays); 409 suppression_locked with params.reason when the address is suppressed for another reason.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
note | string | ano |
Odpovědi
- 200 OK: it already existed or nothing changed:
application/jsonBlacklistResult - 201 Created (200 when it already existed or nothing changed):
application/jsonBlacklistResult
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | email, note |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 409 | suppression_locked | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Remove a contact from the blacklist
DELETE /api/v1/tenants/{tenant}/contacts/{contact_id}/blacklist
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: unblacklist_contact (přes MCP jen s náhledem a potvrzením)
Takes the contact off the blacklist (it stays unsubscribed until it subscribes again).
Card menu "Odebrat z blacklistu": 204; 404 when the contact is not on the blacklist; 409 suppression_locked when its suppression has another reason (only a confirmed double opt-in lifts those).
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Odpovědi
- 204 No content
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 409 | suppression_locked | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
List coupons given to a contact
GET /api/v1/tenants/{tenant}/contacts/{contact_id}/coupons
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full
The codes of one contact (tab Slevové kupóny): code, stack, status, assigned and used.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Erase a contact (GDPR, irreversible)
POST /api/v1/tenants/{tenant}/contacts/{contact_id}/erase
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: erase_contact (přes MCP jen s náhledem a potvrzením)
Erasure on request (GDPR): erases the person and their data, keeps only a keyed hash that blocks a new import.
Erasure on request: the tenant's data in the request's transaction, then the consent log as the platform role (only after the tenant transaction committed). When that second step fails, the same request again finishes it (review of batch 4): the contact is gone, but its consent log rows still name the address (cd.erasure_state); a contact that was never erased here stays 404.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Tělo požadavku (application/json): Required by the server: confirm.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
confirm | boolean | ano |
Odpovědi
- 200 OK:
application/jsonEraseResult
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | confirm |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Export all data of a contact (GDPR access)
GET /api/v1/tenants/{tenant}/contacts/{contact_id}/export
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: export_contact_data
Everything stored about one contact (data access request), as JSON.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Odpovědi
- 200 OK:
application/jsonmap of any
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Previous and next contact of a filtered list
GET /api/v1/tenants/{tenant}/contacts/{contact_id}/neighbors
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
createdFrom | query | string | ne | |
createdTo | query | string | ne | |
engagement | query | string | ne | |
engagementOp | query | string | ne | |
fields | query | string | ne | |
import | query | string | ne | |
list | query | string | ne | |
listOp | query | string | ne | |
page | query | integer | ne | Page number, from 1. default 1, min 1 |
pageSize | query | integer | ne | Items per page, 1 to 100. default 25, min 1, max 100 |
q | query | string | ne | Search text (case and diacritics insensitive). max 200 chars |
shop | query | string | ne | Only objects of this shop (shop id). |
sort | query | string | ne | Sort fields separated by commas, "-" = descending, at most 3 (e.g. name,-id). |
source | query | string | ne | |
sourceOp | query | string | ne | |
state | query | string | ne | |
stateOp | query | string | ne | |
status | query | string | ne | Status filter. |
tab | query | string | ne |
Odpovědi
- 200 OK:
application/jsonContactNeighbors
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | q |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
List consents (purposes) of a contact
GET /api/v1/tenants/{tenant}/contacts/{contact_id}/purposes
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full · Nástroj MCP: get_contact_consents
Consents (purposes of processing) of a contact.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Record a consent (purpose) of a contact
POST /api/v1/tenants/{tenant}/contacts/{contact_id}/purposes
Oprávnění: modul contacts, úroveň full; klíč s přístupem full
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Tělo požadavku (application/json): Required by the server: purposeId.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
validFrom | string | ne | |
validUntil | string | ne | |
purposeId | string | ano |
Odpovědi
- 201 Created:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Withdraw a consent of a contact
POST /api/v1/tenants/{tenant}/contacts/{contact_id}/purposes/{consent_id}/withdraw
Oprávnění: modul contacts, úroveň full; klíč s přístupem full
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
consent_id | path | string | ano | Id of the consent (string of digits). |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 409 | conflict | status |
| 429 | 429 rate_limited: wait Retry-After seconds. |
List segments a contact belongs to
GET /api/v1/tenants/{tenant}/contacts/{contact_id}/segments
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Unsubscribe a contact from everything
POST /api/v1/tenants/{tenant}/contacts/{contact_id}/unsubscribe
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: unsubscribe_contact (přes MCP jen s náhledem a potvrzením)
Unsubscribes a contact from all e-mails, as its own unsubscribe link would (only a new double opt-in subscribes it again).
Unsubscribes the contact from everything, as its own unsubscribe link would (store.unsubscribe: status unsubscribed, the address suppressed, queued e-mails skipped, the consent log). Only a new double opt-in subscribes it again. Body optional {note}: up to 500 characters for the consent log. Answers the contact detail.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
contact_id | path | string | ano | Id of the contact (string of digits). |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
note | string | ne | Reason for the consent log, up to 500 characters. max 500 chars |
Odpovědi
- 200 OK:
application/jsonContactDetail
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | note |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
List custom fields
GET /api/v1/tenants/{tenant}/custom-fields
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full · Nástroj MCP: list_custom_fields
Custom contact fields (id, name, type, options).
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Create a custom field
POST /api/v1/tenants/{tenant}/custom-fields
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: create_custom_field
Creates a custom contact field.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name | string | ano | |
type | one of: number, text, date, checkbox, textarea, select, multi_checkbox, radio | ano | |
options | array of string | ne |
Odpovědi
- 201 Created:
application/jsonCustomField
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Update a custom field
PATCH /api/v1/tenants/{tenant}/custom-fields/{field_id}
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: update_custom_field
Renames a custom field or changes its options.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
field_id | path | string | ano | Id of the field (string of digits). |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name | string | ne | |
options | array of string | ne |
Odpovědi
- 200 OK:
application/jsonCustomField
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Delete a custom field
DELETE /api/v1/tenants/{tenant}/custom-fields/{field_id}
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: delete_custom_field (přes MCP jen s náhledem a potvrzením)
Deletes a custom field and its values.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
field_id | path | string | ano | Id of the field (string of digits). |
Odpovědi
- 204 No content
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
List purposes of processing (consent types)
GET /api/v1/tenants/{tenant}/purposes
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full · Nástroj MCP: list_purposes
Purposes of processing (consents) with legal basis and validity.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Create a purpose of processing
POST /api/v1/tenants/{tenant}/purposes
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: create_purpose
Creates a purpose of processing.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name | string | ano | |
legalBasis | one of: consent, contract, legal_obligation, legitimate_interest, vital_interest, public_interest | ano | |
validityDays | number or null | ne | Older callers send whole days; the purpose form sends validity. |
validity | ValidityLength or null | ne | |
notes | string | ano |
Odpovědi
- 201 Created:
application/jsonPurpose
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Update a purpose of processing
PATCH /api/v1/tenants/{tenant}/purposes/{purpose_id}
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: update_purpose
Changes a purpose of processing.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
purpose_id | path | string | ano | Id of the purpose (string of digits). |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name | string | ne | |
legalBasis | one of: consent, contract, legal_obligation, legitimate_interest, vital_interest, public_interest | ne | |
validityDays | number or null | ne | Older callers send whole days; the purpose form sends validity. |
validity | ValidityLength or null | ne | |
notes | string | ne |
Odpovědi
- 200 OK:
application/jsonPurpose
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Delete a purpose of processing
DELETE /api/v1/tenants/{tenant}/purposes/{purpose_id}
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: delete_purpose (přes MCP jen s náhledem a potvrzením)
Deletes an unused purpose of processing.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
purpose_id | path | string | ano | Id of the purpose (string of digits). |
Odpovědi
- 204 No content
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 409 | conflict | in_use |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Create a list of the contacts with a purpose
POST /api/v1/tenants/{tenant}/purposes/{purpose_id}/to-contact-list
Oprávnění: modul contacts, úroveň full; klíč s přístupem full
SE "Přidat ke kontaktům v seznamu": body {listId}; answers {count} of the consents added.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
purpose_id | path | string | ano | Id of the purpose (string of digits). |
Tělo požadavku (application/json): Required by the server: listId.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
listId | string | ano |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | listId |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Search contacts, campaigns, templates and more
GET /api/v1/tenants/{tenant}/search
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full · Nástroj MCP: search
Quick search over contacts and lists (at least 2 characters).
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
q | query | string | ne | Search text. max 200 chars |
Odpovědi
- 200 OK:
application/jsonSearchResults
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | q |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
List suppressed addresses
GET /api/v1/tenants/{tenant}/suppressions
Oprávnění: modul contacts, úroveň read; klíč s přístupem read nebo full · Nástroj MCP: list_suppressions
Suppression list (addresses never mailed) with reason.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
page | query | integer | ne | Page number, from 1. default 1, min 1 |
pageSize | query | integer | ne | Items per page, 1 to 100. default 25, min 1, max 100 |
q | query | string | ne | Search text. max 200 chars |
reason | query | string | ne | Reason filter (manual, unsubscribed, hard_bounce, complaint...). |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | q |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Suppress an address
POST /api/v1/tenants/{tenant}/suppressions
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: add_suppression
Adds an address to the suppression list (manual blacklist), also when it is not a contact.
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
email | string | ano | Address. |
detail | string | ne | Note. |
Odpovědi
- 200 OK: it already existed or nothing changed:
application/jsonobject - 201 Created (200 when it already existed or nothing changed):
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | detail, email |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Import addresses to the blacklist
POST /api/v1/tenants/{tenant}/suppressions/blacklist-import
Oprávnění: modul contacts, úroveň full; klíč s přístupem full
SmartEmailing's blacklist on the tenant's blacklist (core/blacklist.py, migration 0180): body {contacts: the SmartEmailing backup list (blacklisted.json) or {emails: [addresses]}, apply: true to write (default: a dry run that writes nothing)}. Idempotent; nothing is sent, no automation starts, no other suppression or contact changes. 200 with the counts (never an address).
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
Tělo požadavku (application/json)
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
apply | any | ne | |
contacts | any | ne | |
emails | any | ne |
Odpovědi
- 200 OK:
application/jsonobject
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | apply, contacts |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Remove one suppression
DELETE /api/v1/tenants/{tenant}/suppressions/{email}
Oprávnění: modul contacts, úroveň full; klíč s přístupem full · Nástroj MCP: remove_suppression (přes MCP jen s náhledem a potvrzením)
Removes a manual suppression of an address (other reasons are locked).
Parametry
| Název | Kde | Typ | Povinné | Popis |
|---|---|---|---|---|
tenant | path | string (uuid) | ano | Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page. |
email | path | string | ano | E-mail address (URL encoded). |
Odpovědi
- 204 No content
Chyby
| Stav | Kód | Hodnoty message |
|---|---|---|
| 400 | validation | |
| 401 | 401 unauthorized: missing, unknown, revoked, expired or idle API key. | |
| 403 | 403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack. | |
| 404 | not_found | |
| 409 | suppression_locked | |
| 429 | 429 rate_limited: wait Retry-After seconds. |
Schémata
Activity
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | |
type | ActivityType | ano | |
at | string | ano | |
title | string | ano | Campaign, form or order name; tenant data, shown as is. |
ActivityDetail
What the expanded activity card shows (SE: E-mail, Newsletter or Automatizace, Šablona, Zdroj); null = none.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
email | string or null | ano | |
messageKind | one of: campaign, automation, null | ano | |
campaignId | string or null | ano | |
campaignName | string or null | ano | |
automationId | string or null | ano | |
automationName | string or null | ano | |
templateId | string or null | ano | |
templateName | string or null | ano | |
source | string or null | ano | |
orderId | string or null | ano |
ActivityType
one of: other, unsubscribed, bounced, form, sent, opened, clicked, doi, order, status_change, web_tracking, note, call, deal
AutomationRunStatus
one of: active, completed, exited
AutomationStatus
one of: active, draft, paused
AutomationStepOutcome
one of: expired, queued, failed, skipped, goal, reset, end, yes, no, entered, passed, variant, released, jumped
BlacklistResult
A blacklist entry made from the contact card (POST /contacts/{id}/blacklist).
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
email | string | ano | |
reason | one of: invalid, manual, unsubscribed, hard_bounce, complaint, soft_bounce_limit | ano | |
source | string | ano | |
detail | string | ano | The note why (empty when none was given). |
createdAt | string | ano | |
created | boolean | ano | False when the contact was already on the blacklist (its note stays). |
ConsentBasis
one of: none, soft_opt_in_customer, double_opt_in, imported
ContactActivity
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
body | string | ano | Text of a custom activity, '' for the others. |
detail | ActivityDetail | ne | References of the activity (missing from older servers). |
id | string | ano | |
type | ActivityType | ano | |
at | string | ano | |
title | string | ano | Campaign, form or order name; tenant data, shown as is. |
ContactAutomationRun
A run of one contact with its automation (contact card, tab Automatizace).
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
automation | object | ano | |
nodes | map of object | ano | The nodes of the automation by key: type and name (the name may be empty). |
id | string | ano | |
contact | object | ano | |
status | AutomationRunStatus | ano | |
node | string or null | ano | |
entryKey | string | ano | |
enteredAt | string | ano | |
dueAt | string or null | ano | |
finishedAt | string or null | ano | |
exitReason | string or null | ano | |
steps | array of object | ano | The real steps (automation_steps): reason = why a step was skipped or failed, messageId = the e-mail it queued. |
trigger | string or null | ne | The trigger node the run came in through. |
ContactConsent
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | |
purposeId | string | ano | |
name | string | ano | |
legalBasis | one of: consent, contract, legal_obligation, legitimate_interest, vital_interest, public_interest | ano | |
validFrom | string | ano | |
validUntil | string or null | ano | |
withdrawnAt | string or null | ano | |
source | string | ano | |
state | one of: expired, valid, future, withdrawn | ano |
ContactCoupon
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | |
code | string | ano | |
status | CouponStatus | ano | |
assignedAt | string or null | ano | |
usedAt | string or null | ano | |
stackId | string | ano | |
stackName | string | ano | |
shopId | string | ano |
ContactCreateInput
A contact added by hand: like a one-row import (purpose and confirmation required).
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
email | string | ano | |
shopId | string | ano | |
purposeId | string | ano | |
consentConfirmed | boolean | ano | |
listIds | array of string | ne | |
validFrom | string | ne | SE's "Od kdy účel platí" (KK-17): a day (YYYY-MM-DD) or an ISO date-time; default now. |
firstName | string | ne | |
lastName | string | ne | |
titleBefore | string | ne | |
titleAfter | string | ne | |
salutation | string | ne | |
salutationFormal | string | ne | |
vocativeFirstName | string | ne | |
vocativeLastName | string | ne | |
gender | one of: f, m, null | ne | |
language | string | ne | |
company | string | ne | |
companyId | string | ne | |
phone | string | ne | |
mobile | string | ne | |
street | string | ne | |
city | string | ne | |
postalCode | string | ne | |
country | string or null | ne | |
birthday | string or null | ne | |
nameDay | string or null | ne | |
note | string | ne | |
affiliateId | string | ne | |
customFields | map of boolean or string or number or array of string or null | ne |
ContactDetail
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
guid | string or null | ne | SE's contact GUID (32 hex characters): the grid search finds it as #GUID (KG-07). |
sources | array of ContactSourceRecord | ne | Source records (CSV import, Shoptet, SmartEmailing ...); the contact's own state is the most restrictive one. |
editedFields | array of string | ne | Fields a person edited in Poštárna: imports and syncs never overwrite them. |
phone | string | ano | |
mobile | string | ano | |
titleBefore | string | ano | |
titleAfter | string | ano | |
salutation | string | ano | |
salutationFormal | string | ano | |
vocativeFirstName | string | ano | |
vocativeLastName | string | ano | |
gender | one of: f, m, null | ano | |
language | string | ano | |
company | string | ano | |
companyId | string | ano | |
street | string | ano | |
city | string | ano | |
postalCode | string | ano | |
country | string or null | ano | |
birthday | string or null | ano | |
nameDay | string or null | ano | MM-DD |
note | string | ano | |
affiliateId | string | ano | |
source | ContactSource | ano | |
consentBasis | ConsentBasis | ano | |
consentWeak | boolean | ano | |
statusAt | string | ano | When the current status (ContactListItem.status) started; always set. |
consentAt | string or null | ano | When the current consent was given; null without one (e.g. weak consent). |
softBounces | number | ano | |
lastSentAt | string or null | ano | |
lastOpenAt | string or null | ano | |
lastClickAt | string or null | ano | |
suppressedAt | string or null | ano | |
suppressionNote | string or null | ano | Note given when the address was put on the blacklist by hand (suppressionReason 'manual'), else null. |
stats90d | ContactStats | ano | |
lists | array of ContactListMembership | ano | |
recentActivities | array of Activity | ano | Newest first, at most 20. |
orders | array of ContactOrder | ano | Newest first, at most 20. |
orderTotals | array of OrderTotal | ano | |
engagementAt | string or null | ano | When the engagement grade last changed (weekly recomputation). |
customFields | map of CustomFieldValue | ano | Values of custom fields by field id. |
updatedAt | string | ano | |
id | string | ano | |
email | string | ano | |
firstName | string | ano | |
lastName | string | ano | |
status | one of: pending, subscribed, unsubscribed, bounced, complained, customer | ano | |
engagement | one of: A, B, C, D, E, N | ano | |
excluded | boolean | ano | SE "Vyloučené": long inactive yet mailed often (recomputed weekly with the engagement). |
shopId | string or null | ano | Main e-shop (contacts.shop_id), null when unknown. |
suppressionReason | one of: invalid, manual, unsubscribed, hard_bounce, complaint, soft_bounce_limit, null | ano | Set when the address is on the tenant suppression list. |
blacklisted | boolean | ne | On the tenant's blacklist ("Na blacklistu"): a manual entry, or an entry of SmartEmailing's blacklist that keeps its own reason (migration 0180). Older servers leave it out: then suppressionReason 'manual' decides. |
blacklistedAt | string or null | ne | When the address went on the blacklist (the suppression's time), null when it is not on it ("Přidán na blacklist"). |
state | one of: active, bounced, blacklisted | ne | SmartEmailing's 3-value contact state; older servers leave it out (contactState derives it). |
createdAt | string | ano | |
extra | map of boolean or string or number or null | ne | Values of the extra columns asked for (ContactQuery.fields): dates as YYYY-MM-DD, times as ISO. |
ContactListItem
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | |
email | string | ano | |
firstName | string | ano | |
lastName | string | ano | |
status | one of: pending, subscribed, unsubscribed, bounced, complained, customer | ano | |
engagement | one of: A, B, C, D, E, N | ano | |
excluded | boolean | ano | SE "Vyloučené": long inactive yet mailed often (recomputed weekly with the engagement). |
shopId | string or null | ano | Main e-shop (contacts.shop_id), null when unknown. |
suppressionReason | one of: invalid, manual, unsubscribed, hard_bounce, complaint, soft_bounce_limit, null | ano | Set when the address is on the tenant suppression list. |
blacklisted | boolean | ne | On the tenant's blacklist ("Na blacklistu"): a manual entry, or an entry of SmartEmailing's blacklist that keeps its own reason (migration 0180). Older servers leave it out: then suppressionReason 'manual' decides. |
blacklistedAt | string or null | ne | When the address went on the blacklist (the suppression's time), null when it is not on it ("Přidán na blacklist"). |
state | one of: active, bounced, blacklisted | ne | SmartEmailing's 3-value contact state; older servers leave it out (contactState derives it). |
createdAt | string | ano | |
extra | map of boolean or string or number or null | ne | Values of the extra columns asked for (ContactQuery.fields): dates as YYYY-MM-DD, times as ISO. |
ContactListMembership
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
listId | string | ano | |
name | string | ano | |
state | ListMembershipState | ano | |
changedAt | string | ano | |
listSize | number | ano |
ContactNeighbors
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
prevId | string or null | ano | |
nextId | string or null | ano |
ContactOrder
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | |
shopId | string | ano | |
code | string | ano | |
status | OrderStatus | ano | |
sourceStatus | string | ano | State name in the e-shop |
currency | Currency | ano | |
totalWithVat | string or null | ano | Decimal string with VAT in the order currency, as sent by the e-shop. |
orderedAt | string | ano | |
paidAt | string or null | ano | |
items | array of OrderItemPreview | ano | First items only; itemCount is the full number of lines. |
itemCount | number | ano |
ContactPatch
Profile changes; the address, state and consent never change here. A null custom field value removes it.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
firstName | string | ne | |
lastName | string | ne | |
titleBefore | string | ne | |
titleAfter | string | ne | |
salutation | string | ne | |
salutationFormal | string | ne | |
vocativeFirstName | string | ne | |
vocativeLastName | string | ne | |
gender | one of: f, m, null | ne | |
language | string | ne | |
company | string | ne | |
companyId | string | ne | |
phone | string | ne | |
mobile | string | ne | |
street | string | ne | |
city | string | ne | |
postalCode | string | ne | |
country | string or null | ne | |
birthday | string or null | ne | |
nameDay | string or null | ne | |
note | string | ne | |
affiliateId | string | ne | |
customFields | map of boolean or string or number or array of string or null | ne |
ContactSegment
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | |
name | string | ano | |
shopId | string | ano | |
refresh | one of: static, daily | ano | |
computedAt | string or null | ano | |
updatedAt | string | ano | |
tags | array of string | ano | The segment's labels (SE's column Štítky). |
active | number | ano | Contacts of the segment that can be e-mailed (SE's Aktivní kontakty). |
ContactSource
one of: manual, shoptet, smartemailing, api, erp_order, signup_form, import
ContactSourceRecord
One source record of a contact (provenance): what that source says about consent.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
source | one of: manual, shoptet, csv, smartemailing, api, form, erp | ano | |
consent | one of: unsubscribed, hard_bounce, blacklisted, opt_in, none | ano | |
consentAt | string or null | ano | |
firstSeenAt | string | ano | |
lastSeenAt | string | ano |
ContactStats
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
received | number | ano | |
opened | number | ano | |
clicked | number | ano | |
bestHour | number or null | ano | Hour of day (0 to 23, tenant time zone) with the most opens, null without data. |
preferredDeliveryTime | string or null | ne | SE's preferredDeliveryTime 'HH:MM' (KK-20): the same ideal time the automations' Individuální čas and the campaigns' Ideální čas odeslání use; null without an open. |
ContactSummary
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
total | number | ano | |
byStatus | object | ano | |
blacklisted | number | ano |
ContactsBulkRequest
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
action | one of: blacklist, add_to_list, delete | ano | |
contactIds | array of string | ne | The ticked contacts; or all: every contact matching the grid query (no cap). |
all | boolean | ne | |
listIds | array of string | ne | add_to_list: the manual lists. |
ContactsBulkStarted
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
jobId | string | ano | |
count | number | ano | Contacts the action will go over (blacklisted ones left out). |
CouponStatus
one of: free, assigned, used
Currency
one of: CZK, EUR
CustomActivityInput
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
kind | one of: other, note, call, deal | ano | |
title | string | ano | |
body | string | ne | |
at | string | ne | ISO time; default now. |
CustomField
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | |
name | string | ano | |
type | one of: number, text, date, checkbox, textarea, select, multi_checkbox, radio | ano | Fixed once created. |
options | array of string | ano | |
used | number | ano | Contacts with a value. |
createdAt | string | ano |
CustomFieldInput
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name | string | ano | |
type | one of: number, text, date, checkbox, textarea, select, multi_checkbox, radio | ano | |
options | array of string | ne |
CustomFieldValue
boolean or string or number or array of string
DuplicateGroup
Possible duplicates: contacts with the same phone or the same name and company (a report, nothing is merged).
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
kind | one of: phone, name_company | ano | |
contacts | array of object | ano |
DuplicateReport
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
groups | array of DuplicateGroup | ano | |
truncated | boolean | ano | More groups exist than the report shows (200). |
EraseResult
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
erased | boolean | ano | |
consentLogRows | number | ano | Consent log rows whose address and evidence were blanked. |
Error
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
error | object | ano |
{
"error": {
"code": "validation",
"message": "email"
}
}ListMembershipState
one of: unsubscribed, confirmed, unconfirmed, removed
OrderItemPreview
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name | string | ano | |
quantity | string | ano | decimal string, orders can have fractional quantities |
priceWithVat | string or null | ano |
OrderStatus
one of: cancelled, other, pending, completed
OrderTotal
One row per currency. CZK and EUR are never added together or converted.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
currency | Currency | ano | |
count | number | ano | |
totalWithVat | string | ano |
Purpose
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | |
name | string | ano | |
legalBasis | one of: consent, contract, legal_obligation, legitimate_interest, vital_interest, public_interest | ano | |
validityDays | number or null | ano | How long a consent lasts in whole days; null = no fixed period. |
validity | ValidityLength or null | ne | The same length as entered (number and unit); null = no fixed period. |
notes | string | ano | |
consents | number | ano | Active (not withdrawn) consents. |
createdAt | string | ano |
PurposeInput
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name | string | ano | |
legalBasis | one of: consent, contract, legal_obligation, legitimate_interest, vital_interest, public_interest | ano | |
validityDays | number or null | ne | Older callers send whole days; the purpose form sends validity. |
validity | ValidityLength or null | ne | |
notes | string | ano |
SearchResults
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
contacts | array of ContactListItem | ano | |
lists | array of object | ano |
ValidityLength
Length of a purpose's validity as entered (months count 30 days and years 365 for the consent ends).
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
value | number | ano | |
unit | one of: seconds, minutes, hours, days, weeks, months, years | ano |