Events

Record an event

Records a custom event, optionally attached to a contact. Events drive segment membership and workflow triggers, so a matching enabled workflow starts as a result of this call.

contact_id must already exist in this project — unlike POST /api/track, this endpoint never creates contacts. Omit it for a project-level event.

Reserved system event names (email.*, contact.subscribed/unsubscribed, segment.*.entry/.exit) are rejected with 422: they are written by Sendly's own pipeline and accepting them from a caller would corrupt the series segments read.

This endpoint does NOT require an Idempotency-Key. Events are append-only and the highest-volume write on the surface; a duplicate is a data-quality question for the caller, not a money-path hazard.

Sending-only (pk_*) keys cannot record events — they hold the send capability and nothing else.

Requires the events:write scope — Record custom events for your contacts.

post/api/v1/events

Request

  • Base URL: https://api.sendly.now
  • URL: https://api.sendly.now/api/v1/events
  • Auth: one of:
    • HTTP bearer
    • API key in cookie better-auth.session_token
    • OAuth 2 (authorization code, authorization URL https://app.sendly.now/api/auth/oauth2/authorize, token URL https://app.sendly.now/api/auth/oauth2/token, scopes: events:write)

Request body

contact_idstring uuid

Contact the event belongs to. Must already exist in this project — unlike the legacy POST /api/track, this endpoint never creates contacts. Omit for a project-level event.

namestring required

Event name, e.g. user.signup.

payloadobject

Arbitrary event payload.

Response

Event recorded

contact_idstring uuid nullable required
created_atstring date-time required
email_idstring uuid nullable required
idstring uuid required
namestring required
payloadobject nullable required

The payload recorded with the event, or null.

Changes

No recorded changes to this operation across all 1 revision of this API.