niiko/developers

CRM v1 current

crm.contact_added

Adds a person (name, and optionally email, phone and role) to a client's record, naming the client. Does not make them the primary contact and does not create the client. If someone with that email or phone already existed, the reply says so but does not block it.

Last updated

POST /api/v1/actions/crm.contact_added
Key scope
crm.contact_added@1
Workspace permission
api.crm.contact_added off by default
Two permissions, not one

Both are needed: a key with that scope, and the workspace owner having switched the permission on. Holding the key is not enough — they are two decisions made by different people.

Request

fieldtyperules
clientstringrequiredmin 1 · max 200
namestringrequiredmin 1 · max 200
emailstring (email)optionalmax 320
phonestringoptionalmin 5 · max 40
rolestringoptionalmin 1 · max 120

Response — output when status is done

fieldtyperules
clientIdstringrequired
clientNamestringrequired
contactIdstringrequired
possibleDuplicatebooleanrequired

Example

# One request, one idempotency key: retrying with the same key never runs twice.
curl -X POST https://niiko.org/api/v1/actions/crm.contact_added \
  -H "Authorization: Bearer nk_…" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "client": "…",
    "name": "…"
  }'
# 200 → done · 202 → pending_approval (a person signs later) · 4xx → refused, with a named reason

Why it may refuse

Each reason names who can fix it and how. With reason stale, detail.message says what to do.

cliente_no_encontradocliente_ambiguodemasiados_clientessin_permiso

In the clients

@vorluno/niiko-sdkniiko.addedContact()
niiko (Python)niiko.added_contact()
niiko-cliniiko run crm.contact_added
n8n-nodes-niikocrmContactAdded
niiko-mcp-servercrm_contact_added

History