Skip to content

Track events from your product

POST
/api/v1/events
curl --request POST \
--url https://dashboard.azimea.com/api/v1/events \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "events": [ { "id": "evt_7f3c2a", "name": "user.signed_up", "occurredAt": "2026-10-05T09:30:00+00:00", "contact": { "externalId": "user_123", "email": "ana@example.com" }, "properties": { "plan": "trial", "source": "landing-page" } } ] }'

Tells Azimea what people did in your product (user.signed_up, trial.ending, kyc.completed). Each event is recorded on the person’s timeline and starts every published flow whose trigger is that event name; the person is found, or created, from contact (the same object POST /contacts takes, with at least id, externalId or email). Send up to 100 events per call; a call counts once for the rate limit. id is your own id, unique in your account: sending it again is counted as a duplicate, so retries are safe. Names use lowercase letters, digits, _ and ., start with a letter, at most 64 characters; the prefixes order., cart., customer., subscriber., contact., email. and azimea. are reserved. occurredAt may be up to 30 days in the past and not in the future; properties is a JSON object of at most 16 KB and 3 levels. Each event is accepted or rejected on its own, with activity.* codes per field. Needs the events:write permission.

Media typeapplication/json
object
events
required
Array<object>
>= 1 characters
object
id
string
nullable
Example
evt_7f3c2a
name
string
nullable
Example
user.signed_up
occurredAt
string format: date-time
nullable
Example
2026-10-05T09:30:00+00:00
contact
nullable
Example
{
"externalId": "user_123",
"email": "ana@example.com"
}
properties
nullable
Example
{
"plan": "trial",
"source": "landing-page"
}
Example
[
{
"id": "evt_7f3c2a",
"name": "user.signed_up",
"occurredAt": "2026-10-05T09:30:00+00:00",
"contact": {
"externalId": "user_123",
"email": "ana@example.com"
},
"properties": {
"plan": "trial",
"source": "landing-page"
}
}
]
Example
{
"events": [
{
"id": "evt_7f3c2a",
"name": "user.signed_up",
"occurredAt": "2026-10-05T09:30:00+00:00",
"contact": {
"externalId": "user_123",
"email": "ana@example.com"
},
"properties": {
"plan": "trial",
"source": "landing-page"
}
}
]
}

How many events were accepted, were duplicates, or were rejected (with the reasons per event)

Media typeapplication/json
object
isSuccess
boolean
value
One of:
object
accepted
integer format: int32
duplicates
integer format: int32
rejected
Array<object>
object
index
integer format: int32
errors
Array<object>
object
code
string
field
string
params
object
key
additional properties
status
integer format: int32
errors
Array<object>
object
code
string
message
string
params
object
key
additional properties
fieldErrors
object
key
additional properties
Array<object>
object
code
string
message
string
params
object
key
additional properties
Example
{
"isSuccess": true,
"value": {
"accepted": 1,
"duplicates": 0,
"rejected": []
},
"status": 0,
"errors": [],
"fieldErrors": null
}

Validation failed: no events, or more than 100 (activity.batch_too_large)

Media typeapplication/problem+json
object
statusCode
integer format: int32
default: 400
message
string
default: One or more errors occurred!
errors
object
key
additional properties
Array<string>
Example
{
"statusCode": 400,
"message": "One or more errors occurred!"
}

Missing or invalid API key

The key lacks the events:write permission