REST API reference
Events
Track what people do in your product to target messages, trigger workflows and give context.
Events show up on the person’s activity timeline and power segments (event.<name>.count rules), outbound triggers and goals, and workflows. Tracking needs events:write; reading needs events:read.
From the browser, track events with the Messenger JavaScript API instead — it never exposes an API key.
The event object
One tracked occurrence.
Fields
-
objectstring - Always
event. -
idstring - Unique id.
-
namestring - What happened, e.g.
invoice-paid. -
contactIdstring - Who did it.
-
metadataobject - Details you sent with the event.
-
occurredAttimestamp - When it happened.
{ "object": "event", "id": "0199c530-3a4b-7c5d-8e6f-7a8b9c0d1e2f", "name": "invoice-paid", "contactId": "0199c512-6a7b-7c8d-9e0f-1a2b3c4d5e6f", "metadata": { "invoice": "INV-4412", "amount": 149000, "currency": "eur" }, "occurredAt": "2026-10-02T15:20:00.000Z"} Track an event
POST
/v1 /events events:write Records an event for a person. Fires the event.tracked webhook.
Body
-
namestring required - Up to 255 characters; spaces are collapsed.
-
contactIdstring - The person, by id. With
externalIdandemail: send exactly one. -
externalIdstring - The person, by your user id.
-
emailstring - The person, by email.
-
metadataobject - Up to 20 keys and 8 KB of JSON.
-
occurredAttimestamp - ISO-8601; defaults to now. Can’t be in the future.
curl -X POST https://api.rabbitblaze.com/v1/events \ -H "Authorization: Bearer $RABBITBLAZE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "invoice-paid", "externalId": "usr_48213", "metadata": { "invoice": "INV-4412", "amount": 149000, "currency": "eur" }}' const res = await fetch("https://api.rabbitblaze.com/v1/events", { method: "POST", headers: { Authorization: `Bearer ${process.env.RABBITBLAZE_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ name: "invoice-paid", externalId: "usr_48213", metadata: { invoice: "INV-4412", amount: 149000, currency: "eur", }, }),})const data = await res.json() import osimport requests res = requests.post( "https://api.rabbitblaze.com/v1/events", headers={"Authorization": f"Bearer {os.environ['RABBITBLAZE_API_KEY']}"}, json={ "name": "invoice-paid", "externalId": "usr_48213", "metadata": { "invoice": "INV-4412", "amount": 149000, "currency": "eur", }, },)res.raise_for_status()data = res.json() { "object": "event", "id": "0199c530-3a4b-7c5d-8e6f-7a8b9c0d1e2f", "name": "invoice-paid", "contactId": "0199c512-6a7b-7c8d-9e0f-1a2b3c4d5e6f", "metadata": { "invoice": "INV-4412", "amount": 149000, "currency": "eur" }, "occurredAt": "2026-10-02T15:20:00.000Z"} List events
GET
/v1 /events events:read Tracked events, newest first.
Query parameters
-
namestring - Only events with this name.
-
contactIdstring - Only this person’s events.
-
limitinteger - Items per page, 1–100. Default
25. -
cursorstring - The
nextCursorof the previous page.
curl https://api.rabbitblaze.com/v1/events?name=invoice-paid&contactId=0199c512-6a7b-7c8d-9e0f-1a2b3c4d5e6f \ -H "Authorization: Bearer $RABBITBLAZE_API_KEY" const res = await fetch("https://api.rabbitblaze.com/v1/events?name=invoice-paid&contactId=0199c512-6a7b-7c8d-9e0f-1a2b3c4d5e6f", { headers: { Authorization: `Bearer ${process.env.RABBITBLAZE_API_KEY}`, },})const data = await res.json() import osimport requests res = requests.get( "https://api.rabbitblaze.com/v1/events", headers={"Authorization": f"Bearer {os.environ['RABBITBLAZE_API_KEY']}"}, params={ "name": "invoice-paid", "contactId": "0199c512-6a7b-7c8d-9e0f-1a2b3c4d5e6f", },)res.raise_for_status()data = res.json() { "items": [ { "object": "event", "id": "0199c530-3a4b-7c5d-8e6f-7a8b9c0d1e2f", "name": "invoice-paid", "contactId": "0199c512-6a7b-7c8d-9e0f-1a2b3c4d5e6f", "metadata": { "invoice": "INV-4412", "amount": 149000, "currency": "eur" }, "occurredAt": "2026-10-02T15:20:00.000Z" } ], "nextCursor": "WyIyMDI2LTEwLTAyVDE0OjA1OjMxLjAwMFoiLCIwMTk5YzUyMC03ZThmIl0"}