Build on event67
Three ways in and out of an event: read it through the Partner API, get told when it changes over signed webhooks, and pull a partner's records into it with no code. This is the narrative documentation; the endpoint reference is generated from the server itself.
What you can build
Everything here is scoped to one organization. A key you create belongs to your organization, reaches only your events, and cannot see anybody else's data.
Pull, with the Partner API
A read-mostly REST API at https://api.event67.com/partner/v1. It serves events, sessions, tracks, rooms, speakers, sponsors and published info sections; attendees, with create and update; and the engagement record, meaning check-ins, session attendance, form submissions and feedback. Typical uses are a nightly sync into a CRM, a badge printer that reads the attendee list, or a reporting job that pulls check-ins the morning after.
Push, with webhooks
Register an HTTPS endpoint and event67 signs and POSTs a small JSON body every time something happens: an attendee is created, updated or checked in, a session moves, a form is submitted, feedback arrives. Deliveries are retried for a day and logged for thirty. Use this instead of polling when you want to react in near real time.
Import, with data sources
Point event67 at a partner's JSON API, look at what comes back, map its fields onto attendees or sessions in a form, and let it run on a schedule. No code and no deployment on your side. This is the path for a registration platform or a ticketing tool that has an API but no integration with us.
Who can use it
Two conditions, and the API checks both on every request.
- You are an admin of the organization. Keys, webhook endpoints and data sources are created in the organizer console by an org admin. There is no self-service developer signup separate from your event67 account.
- The organization is on a paid plan. That means a card on file or an active annual plan. The free event allowance does not unlock integrations: it covers running an event, not automating one.
Adding a card does not charge you anything. event67 bills per activated attendee, so a card on file with no activated attendees is a bill of nothing. If integrations are locked, every screen still works and you can read and clean up whatever you already have; only creating, running and calling are refused, with 402 PAYMENT_REQUIRED.
If your organization is suspended or closed, integrations are blocked for a different reason and the fix is not a card. The refusal carries details.reason so you can tell the two apart. Authentication lists every reason and what it means.
Quick start
Five minutes, assuming you are already an admin of a paid organization.
1. Create a key
In the console, open Integrations then API keys, and create one. Give it a name you will recognise in six months and only the scopes it needs. The full key is shown once, on the screen that creates it, and is never retrievable afterwards. Store it in your secret manager before you close the dialog.
2. Check the key works
GET /me needs no scope and answers with the organization the key belongs to. It is the cheapest way to prove a key, a header and a base URL are all correct.
curl -s https://api.event67.com/partner/v1/me \
-H "Authorization: Bearer e67_live_7Kq2Yb3dR1sVpN8xL4mZ0aC6tE5wJ9uH"{
"data": {
"org": { "id": "0f9c41d2-6b1e-4a37-9d55-2c8ab0e71f34", "name": "Northwind Events" },
"key": {
"id": "3a77c1b8-52ee-4f0d-8c19-9b4d6e2af013",
"name": "Registration sync",
"prefix": "e67_live_7Kq2Yb3d",
"scopes": ["events:read", "attendees:read", "attendees:write"],
"expiresAt": null
}
}
}3. Find your event
Every other path hangs off an event id. List them, or filter to the published ones.
curl -s "https://api.event67.com/partner/v1/events?status=published&limit=25" \
-H "Authorization: Bearer $E67_KEY"{
"data": [
{
"id": "8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40",
"slug": "northwind-summit-2026",
"name": "Northwind Summit 2026",
"description": "Two days on supply chains, in New York.",
"status": "published",
"startAt": "2026-10-29T15:00:00.000Z",
"endAt": "2026-10-30T23:00:00.000Z",
"timezone": "America/New_York",
"location": "Javits Center, New York",
"createdAt": "2026-06-02T09:14:22.117Z",
"updatedAt": "2026-09-01T11:40:03.882Z"
}
],
"meta": { "nextCursor": null }
}4. Page through the attendees
Lists are cursor paginated. Ask for up to 200 at a time and followmeta.nextCursor until it comes back null. Do not build your own cursors: they are opaque and their contents will change.
curl -s "https://api.event67.com/partner/v1/events/$EVENT_ID/attendees?limit=200" \
-H "Authorization: Bearer $E67_KEY"
# Then follow meta.nextCursor until it comes back null.
curl -s "https://api.event67.com/partner/v1/events/$EVENT_ID/attendees?limit=200&cursor=$CURSOR" \
-H "Authorization: Bearer $E67_KEY"5. Get told when something changes
Back in the console, open Webhooks, add your HTTPS endpoint, choose the event types you care about and copy the signing secret, which is also shown once. Send the test ping, then verify the signature before you trust a body.
The endpoint reference
The per-endpoint reference is not on this site. It is served by the API, generated from the same schemas that validate incoming requests, so it cannot describe a parameter the server does not accept.
- https://api.event67.com/partner/v1/docs — the browsable reference.
- https://api.event67.com/partner/v1/openapi.json — the OpenAPI 3.1 document behind it, for client generation. Both are public and need no key.
A snapshot of that document is committed to the event67 repository and a test fails the build if the running server and the snapshot disagree, or if the spec version moved without achangelog entry in the same commit.
Limits at a glance
| Limit | Value |
|---|---|
| Requests | 600 a minute, per key |
| Page size | 1 to 200 records, 50 by default |
| API keys | 100 active keys per organization |
| Webhook endpoints | 20 per organization |
| Webhook attempts | 7 over 24 hours, then the delivery is exhausted |
| Delivery log | 30 days |
| Data-source run | 5,000 records or 60 seconds, whichever comes first |
| Data-source fetch | 20 seconds and 5 MB per request, JSON only |
The rest of these docs
- Authentication — API keys, scopes, the two ways to send a key, and what each refusal means.
- API conventions — Versioning, the response envelope, pagination, errors, rate limits and every endpoint.
- Webhooks — The event catalogue, signature verification, retries and the delivery log.
- Data sources — Pull a partner JSON API into your event with no code: connect, preview, map, schedule.
- Changelog — Every change to the Partner API, dated, and marked additive or breaking.
Keys and endpoints are managed in the console at https://admin.event67.com, under Integrations. If something on these pages is wrong, or the API did something these pages do not describe, tell us rather than working around it.