Zapier, Make and n8n
Use ByDomu events as a trigger and the API as an action, with a secret key.
Create the trigger and copy its URL
All three platforms receive webhooks with a step that gives you a public URL. That URL is what ByDomu will call on each event.
Webhooks by Zapier › Catch HookWebhooks › Custom webhookWebhook node (POST)Subscribe that URL to the events
GET /events lists the catalog with a description and an example per event. Subscribe to exact types (deal.won), a whole object (contact.*) or everything (*). The URL must be public: private or internal ones are rejected.
curl -X POST https://api.bydomu.com/v1/webhooks \
-H "X-API-Key: $BYDOMU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://hooks.zapier.com/hooks/catch/000000/xxxxxx/",
"eventTypes": ["deal.won"],
"description": "Zap: negocios ganados a Google Sheets"
}'You can also create it, test it and rotate its secret in the Webhooks tab of Settings › API Keys. So the platform learns the fields before the first real event, fetch a sample and send it to the URL:
curl https://api.bydomu.com/v1/webhooks/sample/deal.won -H "X-API-Key: $BYDOMU_API_KEY"
# El último deal.won real de tu cuenta (meta.synthetic: false) o, si no hay,
# el árbol de campos con valores null (meta.synthetic: true).Map the fields
Everything comes in data, one object per record: data.deal.title, data.contact.firstName, data.transition.toStageName. Use type to filter and id to avoid processing the same delivery twice.
{
"event": "deal.won",
"id": "5f3a0c1e-7d2b-4f7e-9a51-0b6c1d2e3f40",
"type": "deal.won",
"timestamp": "2026-09-22T14:30:00.000Z",
"organizationId": "clx1org001",
"actor": {
"kind": "USER",
"userId": "clx1usr001"
},
"data": {
"deal": {
"id": "clx1deal001",
"code": "N-0042",
"title": "Compra apartamento Chapinero · Laura Restrepo",
"value": 450000000,
"currency": "COP",
"probability": 100,
"status": "WON",
"intent": "PURCHASE",
"leadSource": "PORTAL",
"lostReason": null,
"aiCreated": false,
"agentId": "clx1usr001",
"contactId": "clx1con001",
"pipelineId": "clx1pip001",
"stageId": "clx1stg005",
"stageName": "Ganado",
"stageEnteredAt": "2026-09-22T14:30:00.000Z",
"expectedCloseDate": "2026-10-31T00:00:00.000Z",
"closedAt": "2026-09-22T14:30:00.000Z",
"createdAt": "2026-09-20T15:05:00.000Z",
"saasPlanId": null,
"saasPlanName": null,
"saasBillingPeriod": null,
"saasMrrAmount": null,
"trialStartedAt": null,
"trialEndsAt": null
},
"contact": {
"id": "clx1con001",
"code": "C-0042",
"firstName": "Laura",
"lastName": "Restrepo",
"fullName": "Laura Restrepo",
"email": "[email protected]",
"phone": "+573000000001",
"source": "WEBSITE",
"status": "QUALIFIED",
"type": "CLIENT",
"score": 72,
"ownerId": "clx1usr001",
"preferredCity": "Bogotá",
"preferredType": "APARTMENT",
"budget": 450000000,
"currency": "COP",
"tags": [
"Compra",
"Chapinero"
],
"createdAt": "2026-09-20T15:04:00.000Z"
},
"transition": {
"fromStageId": "clx1stg003",
"fromStageName": "Negociación",
"toStageId": "clx1stg005",
"toStageName": "Ganado",
"pipelineId": "clx1pip001",
"lostReason": null,
"automated": false
}
}
}Write to ByDomu as an action
To create or change things in ByDomu from another tool, use each platform’s HTTP step with X-API-Key and an Idempotency-Key built from run ids: if the platform retries, nothing is duplicated.
Webhooks by Zapier › Custom RequestHTTP › Make a requestHTTP RequestPOST https://api.bydomu.com/v1/contacts
X-API-Key: domu_sk_live_… (con contacts:write, aprobado por soporte)
Content-Type: application/json
Idempotency-Key: zap-{{zap_meta_id}}-{{row_id}}
{ "firstName": "{{nombre}}", "phone": "{{telefono}}", "source": "WEBSITE", "tags": ["Zapier"] }If something fails
- 403The key lacks webhooks:write (or the action’s :write). Request it in Settings › API Keys.
- 400The URL isn’t public or a type isn’t in the catalog.
- x2It arrived twice: it’s a retry. Drop it by id.
- sigZapier and Make don’t verify the signature on their own: treat the trigger URL as a secret. If you can, verify it in a code step.