← Back to home

API Reference

REST endpoints for sending events, bulk imports, and CSV uploads.

Authentication

All requests require a Bearer token in the Authorization header. Create API keys in your dashboard. Keys start with zo_live_.

Authorization: Bearer zo_live_your_api_key

Base URL

https://api.zoody.io

Rate limits

API requests are limited to 120 requests per minute per IP. Monthly event limits depend on your plan:

PlanEvents / month
Free1,000
Pro50,000
Growth500,000

POST

/v1/events

Send up to 100 events per request. Events are processed asynchronously and synced to HubSpot based on your mapping configuration.

Request

curl -X POST https://api.zoody.io/v1/events \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer zo_live_your_api_key" \
  -d '{
    "events": [
      {
        "eventName": "feature_used",
        "email": "user@example.com",
        "timestamp": "2026-03-12T10:30:00Z",
        "properties": {
          "feature": "dashboard",
          "duration_seconds": 120
        }
      }
    ]
  }'

Response (202 Accepted)

{
  "accepted": 1,
  "rejected": 0,
  "requestId": "req_abc123",
  "eventIds": ["evt_def456"]
}

Event fields

FieldTypeRequiredDescription
eventNamestringYesMax 255 characters
emailstring*Contact matching
domainstring*Company matching
timestampstringNoISO 8601 (defaults to now)
eventIdstringNoFor deduplication (auto-generated)
propertiesobjectNoMax 50 keys

* At least one of email or domain is required.

Error responses

StatusMeaning
400Validation error (check the errors array)
401Invalid or revoked API key
402Monthly event limit exceeded
429Rate limit exceeded (120 req/min)

POST

/v1/events/bulk

Send up to 10,000 events for historical backfill. Events are queued as a background job and processed in 500-event chunks.

Request

curl -X POST https://api.zoody.io/v1/events/bulk \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer zo_live_your_api_key" \
  -d '{
    "events": [
      {
        "eventName": "feature_used",
        "email": "user1@example.com",
        "timestamp": "2026-01-15T08:00:00Z",
        "properties": { "feature": "reports" }
      },
      {
        "eventName": "feature_used",
        "email": "user2@example.com",
        "timestamp": "2026-01-15T09:30:00Z",
        "properties": { "feature": "dashboard" }
      }
    ]
  }'

Response (202 Accepted)

{
  "jobId": "job_abc123",
  "totalEvents": 2,
  "status": "queued"
}

POST

/v1/backfill/csv

Upload a CSV file of historical events. Max 50 MB, up to 10,000 rows.

Request

curl -X POST https://api.zoody.io/v1/backfill/csv \
  -H "Authorization: Bearer zo_live_your_api_key" \
  -F "file=@events.csv"

CSV format

Required columns: event_name, timestamp, and at least one of email or domain. All other columns become event properties.

event_name,email,timestamp,feature,plan
feature_used,user1@example.com,2026-01-15T08:00:00Z,reports,pro
feature_used,user2@example.com,2026-01-15T09:30:00Z,dashboard,free
login,user1@example.com,2026-01-16T10:00:00Z,,pro