Skip to main content
POST
Batch track events
Endpoint behaviour is stable; the SDK batching wrapper is the recommended path today. Use vf.events.batch() for buffered emission — it auto-flushes by size and age and handles retries.
Emit multiple events in a single POST. Useful for backfills, data-warehouse syncs, and any path where per-event HTTP overhead dominates.

Request

Body

events
Event[]
required
Array of events. Each event has the same shape as the single-event endpoint body (external_user_id, name, properties). Maximum 100 events per batch.
suppressTriggers
boolean
default:"false"
When true, every tracked user touched by this batch is marked as historical — trigger rules (welcome, onboarding stall, etc.) will not fire for those users retroactively, even if the events would otherwise match. Use this when seeding your existing user base into Vibefollow so customers don’t get a “welcome” email weeks or months after they actually signed up.Mechanics: every TrackedUser created or first-seen by a suppressed batch gets suppressTriggersUntil set to a far-future date. The trigger-rules cron skips users with a non-null suppressTriggersUntil. The watermark dissolves automatically the first time the user emits a normal (non-suppressed) event, so going live after a backfill is a one-flip switch.Defaults to false — live signups DO fire welcomes, the normal case.

Response

data.accepted
boolean
Always true on success. The response confirms the batch was enqueued. Per-event validation happens server-side.
If one event in the batch fails validation, the whole batch is rejected with 422 and errors[0].field indicates the offending event index (e.g. events[3].external_user_id).

Examples

Common errors

Missing or malformed Authorization header.
Any event in the batch failed validation; errors[0].field indicates the offending index.
Wait Retry-After seconds.
Retry — the Idempotency-Key prevents duplicates.

Sizing

Max events per batch

100

Max event name length

64 characters

Max body size

5 MB
If you hit these limits, split the batch on your side. The SDK’s events.batch() defaults to maxSize: 100, which matches the server-side ceiling exactly.