Recipes
Common jobs, start to finish: a customer and a deal, reacting to a win, tickets, meetings, syncing.
Common jobs, start to finish. Each one is a handful of calls; the reference has every field.
#Add a customer and open a deal
# 1. the customer (people:write)
curl -X POST https://synconone.com/api/v1/people -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" -H "Idempotency-Key: order-1042-customer" \
-d '{"display_name": "Emily Carter", "email": "[email protected]"}'
# → { "data": { "id": "pr_…" } }
# 2. the pipelines, each with its stage ids (pipelines:read)
curl https://synconone.com/api/v1/pipelines -H "Authorization: Bearer $KEY"
# 3. the deal (opportunities:write)
curl -X POST https://synconone.com/api/v1/opportunities -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" -H "Idempotency-Key: order-1042-deal" \
-d '{"name": "Annual plan", "person": "pr_…", "stage": "STAGE_ID", "amount": 1200}'#React the moment a deal is won
- Subscribe to
opportunity.won(Webhooks). - Verify the signature, then read the deal with
GET https://synconone.com/api/v1/opportunities/{data.publicId}. - Do your work, and answer
200quickly. Do slow work after you have answered.
#Open a ticket and resolve it
curl -X POST https://synconone.com/api/v1/tickets -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"subject": "Invoice shows the wrong ABN", "person": "pr_…", "priority": "high"}'
# → { "data": { "id": "1042", "number": 1042, "status": "new" } }
curl -X PATCH https://synconone.com/api/v1/tickets/1042 -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" -d '{"status": "resolved"}'A ticket can only move along its lifecycle. A move it cannot make answers 409. Tickets are closed, never deleted.
#Schedule a meeting
curl -X POST https://synconone.com/api/v1/meetings -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Quarterly review",
"starts_at": "2026-11-12T10:00:00+11:00",
"duration_minutes": 45,
"time_zone": "Australia/Sydney",
"person": "pr_…",
"attendees": [{ "email": "[email protected]" }],
"notify": false
}'With notify left on, the meeting goes on the owner's connected calendar and the attendees are invited. Set it to false to save it without telling anyone. The response's notice says who was told.
#Answer a live chat
See The live chat inbox: join the conversation, reply, and hand it back.
#Keep another system in step
- Do a first full read of the list, paging with
cursor, and remember the newestupdated_at. - Subscribe to
record.created,record.updatedandrecord.deletedand apply each change as it arrives. - On a schedule, and after any outage, read
?sort=-updated_at&updated_since=…to catch anything a delivery missed.