- Public Contacts Bulk Upsert
Upsert key
Public Contacts List
Public Contacts Get
Public Contacts Patch
Public Contacts Delete
Public Contacts Bulk Upse...
Bulk-upsert contacts (async).
Each row carries its own parent_type (customer or supplier) and parent_id (the parent's partner-supplied identifier — customer_id for customers, supplier_id for suppliers). A single batch may mix both kinds.
Upsert key. When external_id is set on a contact it is the primary upsert key against the parent. Without it, the worker falls back to dedup by email, then (name, phone) — same priority as the internal ERP sync path. Rows whose parent cannot be resolved fail at the per-row level and surface in the job's errors[]; the rest of the batch is unaffected.
Response.
202 AcceptedwithJobAck { job_id, status_url }on the first call.200 OKwith the sameJobAckon an idempotent replay.
Idempotency. Pass an Idempotency-Key header (≤ 255 chars). Same key with a different body returns 422 IDEMPOTENCY_KEY_MISMATCH.
- Mock serverhttps://docs.mercura.ai/_mock/openapi/contacts
- https://docs.mercura.ai/api/public/v1https://docs.mercura.ai/api/public/v1/contacts
- Productionhttps://prod-euapi.mercura.ai/api/public/v1/contacts
curl -i -X POST \
https://docs.mercura.ai/_mock/openapi/contacts \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: string' \
-H 'authorization: string' \
-d '{
"contacts": [
{
"email": "t.weber@mustermann-elektro.example",
"external_id": "ASP-00815",
"is_default": true,
"name": "Thomas Weber",
"parent_id": "K-10042",
"parent_type": "customer",
"phone": "+49 211 5551020"
}
]
}'Response
{ "job_id": "4242", "status_url": "/api/public/v1/jobs/4242" }