Ingestion API
Capture events
Track product usage. Send one event, or up to 100 at once.
Endpoint
POST/api/v1/events
Body
Send one event object, or { "events": [ ... ] } with up to 100.
| Field | Type | Description |
|---|---|---|
event | string | Required. Event name (letters, numbers, spaces and _ . : -). |
anonymousId | string | Visitor id when the user isn't known yet. |
sessionId | string | Groups events into a session. |
timestamp | string | ISO date. Defaults to now. |
properties | object | Event details (max 8 KB). |
externalCustomerId | string | Your id for the customer (preferred). Alias: customerId. |
email | string | Customer email. Used when there's no external id. |
name | string | Customer name. |
company | string | Customer's company. |
plan | string | Plan name, e.g. "pro". |
mrr | number | Monthly revenue from this customer (major units). |
currency | string | 3-letter code for mrr, e.g. USD. |
Each event needs
externalCustomerId, email or anonymousId.Lifecycle events
| Event | Updates the customer's |
|---|---|
user_signed_up | Signup date |
user_activated | Activation date |
trial_started | Trial start |
subscription_started | Paid date |
subscription_renewed | Renewal date |
subscription_cancelled | Churn date |
Example
cURL
curl -X POST https://YOUR-CORVANEOS-HOST/api/v1/events \
-H "Authorization: Bearer atl_sk_..." \
-H "Content-Type: application/json" \
-d '{ "events": [
{ "event": "user_signed_up", "externalCustomerId": "cus_42", "email": "ana@acme.com" },
{ "event": "create_project", "externalCustomerId": "cus_42", "properties": { "template": "blank" } }
] }'Response · 202
{ "success": true, "accepted": 2, "receivedAt": "2026-09-29T10:12:00.000Z" }