API reference
Six endpoints, all under /v1/integrations/events and all authenticated with your key. New here? Start with Getting started.
List events
GET/v1/integrations/events
Scope: checkin:read
Only events explicitly granted to your integration.
Returns
An object containing items.
| Field | Type | Description |
|---|---|---|
itemsarray of Events | array of Events | Granted events, ordered by start time and ID. |
Example
curl -X GET "https://api.events.abundance.institute/v1/integrations/events" \
-H "Authorization: Bearer $API_KEY"{
"items": [
{
"id": "cm2k8v3qz0001evt7jx4n2p9a",
"slug": "sample-summit-2027",
"name": "Sample Summit 2027",
"timezone": "America/New_York",
"startsAt": "2027-01-20T21:00:00.000Z",
"endsAt": "2027-01-21T22:00:00.000Z",
"venueName": "Main Hall",
"city": "Washington, DC",
"subEvents": [],
"tickets": [
{
"id": "cm2k8w0de0002tkt6fh3n8r1s",
"name": "General",
"kind": "attendee",
"isVip": false,
"subEventIds": [],
"walkIns": true
}
],
"scopes": [
"checkin:read",
"checkin:write"
]
}
]
}Get event data
GET/v1/integrations/events/{eventId}
Scope: Any integration scope
Event details, dates, time zone, tickets and sub-events.
Returns
An Event object.
| Field | Type | Description |
|---|---|---|
idstring | string | The event ID. Every path includes it. |
slugstring | string | The short name used in our URLs. |
namestring | string | The event name. |
timezonestring | string | IANA time zone, like America/New_York. Show times in it. |
startsAttimestamp | timestamp | When the event starts. |
endsAttimestamp | timestamp | When the event ends. |
venueNamestring or null | string or null | The venue. |
citystring or null | string or null | The city. |
subEvents[]array | array | Parts of the event with their own door, like a dinner. A check-in names one of these, or null for the main door. |
.idstring | string | The sub-event ID. |
.namestring | string | Its name. |
.startsAttimestamp | timestamp | When it starts. |
.endsAttimestamp | timestamp | When it ends. |
tickets[]array | array | The event’s ticket types. |
.idstring | string | The ticket type ID. |
.namestring | string | Its name, like General. |
.kindenum | enum | One of attendee, speaker, sponsor, vip, staff or media. |
.isVipboolean | boolean | Whether holders are VIPs. |
.subEventIdsarray of strings | array of strings | Sub-events this ticket gets into. |
.walkInsboolean | boolean | Legacy availability flag. Walk-in registration is outside this vendor contract. |
scopesarray of strings | array of strings | What your key may do. |
Example
curl -X GET "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a" \
-H "Authorization: Bearer $API_KEY"{
"id": "cm2k8v3qz0001evt7jx4n2p9a",
"slug": "sample-summit-2027",
"name": "Sample Summit 2027",
"timezone": "America/New_York",
"startsAt": "2027-01-20T21:00:00.000Z",
"endsAt": "2027-01-21T22:00:00.000Z",
"venueName": "Main Hall",
"city": "Washington, DC",
"subEvents": [],
"tickets": [
{
"id": "cm2k8w0de0002tkt6fh3n8r1s",
"name": "General",
"kind": "attendee",
"isVip": false,
"subEventIds": [],
"walkIns": true
}
],
"scopes": [
"checkin:read",
"checkin:write"
]
}List registrants
GET/v1/integrations/events/{eventId}/registrants
Scope: checkin:read
Paginated registrations, including non-confirmed statuses so the desk can explain refusals.
- Unfinished payment registrations are excluded.
- Keep the same event, key and limit on subsequent pages. Cursors expire after 24 hours.
- This is a bounded traversal, not a frozen snapshot. Queue webhooks before the import, then apply queued changes by registrationId and version.
Query
| Field | Type | Description |
|---|---|---|
limitinteger | integer | Default 100; range 1–500. |
cursorstring | string | Opaque nextCursor from the previous page. Omit on the first request. |
Returns
An object containing items and nextCursor. Stop when nextCursor is null.
| Field | Type | Description |
|---|---|---|
itemsarray of Registrants | array of Registrants | Registrants in stable creation order. |
nextCursorstring or null | string or null | Next page cursor; null at the end. |
Example
curl -X GET "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a/registrants" \
-H "Authorization: Bearer $API_KEY"{
"items": [
{
"registrationId": "cm2k9a1bc0004reg8hd2m5k3q",
"eventId": "cm2k8v3qz0001evt7jx4n2p9a",
"version": 1,
"qrPayload": "cm2k9a1bc0004reg8hd2m5k3q",
"status": "confirmed",
"firstName": "Maya",
"lastName": "Chen",
"organization": "Northwind Energy",
"title": "Head of Partnerships",
"kind": "attendee",
"registrantTypeId": "attendee",
"ribbonLabel": "ATTENDEE",
"isVip": false,
"ticketTypeId": "cm2k8w0de0002tkt6fh3n8r1s",
"ticketName": "General",
"sponsor": null,
"table": null,
"accessSubEventIds": [],
"badgePrintedAt": null,
"checkIns": [],
"updatedAt": "2027-01-20T20:58:12.000Z"
}
],
"nextCursor": null
}Get individual registrant
GET/v1/integrations/events/{eventId}/registrants/{registrationId}
Scope: checkin:read
Fetch the current public registration by its CUID.
- Unknown, deleted, unfinished-payment or wrong-event registrations return 404.
Returns
A Registrant object.
| Field | Type | Description |
|---|---|---|
registrationIdstring | string | The person’s ID at this event. Use it to match and update your records. |
qrPayloadstring | string | Plain registration ID. Print the same value as the badge QR. A transfer retires this registration and issues a replacement ID. |
statusenum | enum | One of confirmed, pending_approval, waitlisted, cancelled or declined. Only confirmed gets in. |
firstNamestring | string | Empty for a guest seat nobody has named yet. |
lastNamestring | string | For an unnamed guest seat, a label like Guest of Northwind Energy. |
organizationstring or null | string or null | Company or organization. |
titlestring or null | string or null | Job title. |
kindenum | enum | One of attendee, speaker, sponsor, vip, staff or media. A VIP attendee is vip. |
ribbonLabelstring or null | string or null | Text for a badge ribbon, like SPEAKER. |
isVipboolean | boolean | Whether the person is a VIP. |
ticketTypeIdstring | string | Their ticket type. |
ticketNamestring | string | The ticket type’s name. |
sponsorstring or null | string or null | The sponsor’s name, when the person is with one. |
tablestring or null | string or null | Their seat from the seating plan, like Table 12. |
accessSubEventIdsarray of strings | array of strings | Sub-events this person may enter. |
badgePrintedAttimestamp or null | timestamp or null | The latest badge print anyone reported. |
checkIns[]array | array | Check-ins that weren’t undone. |
.idstring | string | The check-in ID. Use it to undo. |
.subEventIdstring or null | string or null | null for the main door. |
.sessionIdstring or null | string or null | Set when our staff checked the person into a session. |
.attimestamp | timestamp | When it happened. |
eventIdstring | string | The event this registration belongs to. |
versioninteger | integer | Monotonically increasing version. Ignore older or equal versions, including webhook retries. |
registrantTypeIdenum | enum | Identifier from the registrant types endpoint; separate from ticketTypeId. |
.locationstring or null | string or null | Location label supplied when scanning in. |
updatedAttimestamp | timestamp | The last change to this record. |
Example
curl -X GET "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a/registrants/cm2k9a1bc0004reg8hd2m5k3q" \
-H "Authorization: Bearer $API_KEY"{
"registrationId": "cm2k9a1bc0004reg8hd2m5k3q",
"eventId": "cm2k8v3qz0001evt7jx4n2p9a",
"version": 1,
"qrPayload": "cm2k9a1bc0004reg8hd2m5k3q",
"status": "confirmed",
"firstName": "Maya",
"lastName": "Chen",
"organization": "Northwind Energy",
"title": "Head of Partnerships",
"kind": "attendee",
"registrantTypeId": "attendee",
"ribbonLabel": "ATTENDEE",
"isVip": false,
"ticketTypeId": "cm2k8w0de0002tkt6fh3n8r1s",
"ticketName": "General",
"sponsor": null,
"table": null,
"accessSubEventIds": [],
"badgePrintedAt": null,
"checkIns": [],
"updatedAt": "2027-01-20T20:58:12.000Z"
}Record scan-in
PATCH/v1/integrations/events/{eventId}/registrants/{registrationId}/check-in
Scope: checkin:write
Record arrival at the event entrance. The registration ID is in the URL; time and location are in the JSON body.
- Only confirmed registrations are admitted. Repeated and concurrent scans return the first admission without changing its time or location.
- Location is a descriptive desk/door label. It does not select a sub-event.
- For offline devices, send the original scan time after reconnecting.
Request body
| Field | Type | Description |
|---|---|---|
timetimestamp · required | timestamp | ISO 8601 scan time with Z or an explicit offset. |
locationstring · required | string | Nonempty location label, maximum 100 characters. |
Returns
A Check-in result. A refused admission has a null checkIn and an explanatory outcome/message.
| Field | Type | Description |
|---|---|---|
outcomeenum | enum | Admission decision; see outcomes. |
messagestring | string | Display to the operator. |
checkInobject or null | object or null | New or original check-in; null when admission is refused. |
.idstring | string | Check-in ID. |
.timetimestamp | timestamp | Original scan-in time. |
.locationstring or null | string or null | Original location label. |
registrantRegistrant | Registrant | Current registration, including check-ins and version. |
Example
curl -X PATCH "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a/registrants/cm2k9a1bc0004reg8hd2m5k3q/check-in" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
--data @check-in.json{
"time": "2027-01-20T21:04:00.000Z",
"location": "Registration desk 2"
}{
"outcome": "checked_in",
"message": "Checked in.",
"checkIn": {
"id": "cm2kb7tuv0009chk5ny3w8p2e",
"time": "2027-01-20T21:04:00.000Z",
"location": "Registration desk 2"
},
"registrant": {
"registrationId": "cm2k9a1bc0004reg8hd2m5k3q",
"eventId": "cm2k8v3qz0001evt7jx4n2p9a",
"version": 2,
"qrPayload": "cm2k9a1bc0004reg8hd2m5k3q",
"status": "confirmed",
"firstName": "Maya",
"lastName": "Chen",
"organization": "Northwind Energy",
"title": "Head of Partnerships",
"kind": "attendee",
"registrantTypeId": "attendee",
"ribbonLabel": "ATTENDEE",
"isVip": false,
"ticketTypeId": "cm2k8w0de0002tkt6fh3n8r1s",
"ticketName": "General",
"sponsor": null,
"table": null,
"accessSubEventIds": [],
"badgePrintedAt": null,
"checkIns": [
{
"id": "cm2kb7tuv0009chk5ny3w8p2e",
"subEventId": null,
"sessionId": null,
"at": "2027-01-20T21:04:00.000Z",
"location": "Registration desk 2"
}
],
"updatedAt": "2027-01-20T20:58:12.000Z"
}
}List registrant types
GET/v1/integrations/events/{eventId}/registrant-types
Scope: checkin:read
Stable identifiers and display labels. Registrants carry the identifier in registrantTypeId.
- Registrant categories and ticket products are separate.
Returns
An object containing items.
| Field | Type | Description |
|---|---|---|
items[]array | array | Registrant categories. |
.idenum | enum | One of attendee, speaker, sponsor, vip, staff or media. |
.namestring | string | Display label. |
Example
curl -X GET "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a/registrant-types" \
-H "Authorization: Bearer $API_KEY"{
"items": [
{
"id": "attendee",
"name": "Attendee"
},
{
"id": "speaker",
"name": "Speaker"
},
{
"id": "sponsor",
"name": "Sponsor"
},
{
"id": "vip",
"name": "VIP"
},
{
"id": "staff",
"name": "Staff"
},
{
"id": "media",
"name": "Media"
}
]
}The Registrant object
One registration, shared by paginated reads, individual reads, check-in responses and webhook snapshots.
| Field | Type | Description |
|---|---|---|
registrationIdstring | string | The person’s ID at this event. Use it to match and update your records. |
qrPayloadstring | string | Plain registration ID. Print the same value as the badge QR. A transfer retires this registration and issues a replacement ID. |
statusenum | enum | One of confirmed, pending_approval, waitlisted, cancelled or declined. Only confirmed gets in. |
firstNamestring | string | Empty for a guest seat nobody has named yet. |
lastNamestring | string | For an unnamed guest seat, a label like Guest of Northwind Energy. |
organizationstring or null | string or null | Company or organization. |
titlestring or null | string or null | Job title. |
kindenum | enum | One of attendee, speaker, sponsor, vip, staff or media. A VIP attendee is vip. |
ribbonLabelstring or null | string or null | Text for a badge ribbon, like SPEAKER. |
isVipboolean | boolean | Whether the person is a VIP. |
ticketTypeIdstring | string | Their ticket type. |
ticketNamestring | string | The ticket type’s name. |
sponsorstring or null | string or null | The sponsor’s name, when the person is with one. |
tablestring or null | string or null | Their seat from the seating plan, like Table 12. |
accessSubEventIdsarray of strings | array of strings | Sub-events this person may enter. |
badgePrintedAttimestamp or null | timestamp or null | The latest badge print anyone reported. |
checkIns[]array | array | Check-ins that weren’t undone. |
.idstring | string | The check-in ID. Use it to undo. |
.subEventIdstring or null | string or null | null for the main door. |
.sessionIdstring or null | string or null | Set when our staff checked the person into a session. |
.attimestamp | timestamp | When it happened. |
eventIdstring | string | The event this registration belongs to. |
versioninteger | integer | Monotonically increasing version. Ignore older or equal versions, including webhook retries. |
registrantTypeIdenum | enum | Identifier from the registrant types endpoint; separate from ticketTypeId. |
.locationstring or null | string or null | Location label supplied when scanning in. |
updatedAttimestamp | timestamp | The last change to this record. |
{
"registrationId": "cm2k9a1bc0004reg8hd2m5k3q",
"eventId": "cm2k8v3qz0001evt7jx4n2p9a",
"version": 1,
"qrPayload": "cm2k9a1bc0004reg8hd2m5k3q",
"status": "confirmed",
"firstName": "Maya",
"lastName": "Chen",
"organization": "Northwind Energy",
"title": "Head of Partnerships",
"kind": "attendee",
"registrantTypeId": "attendee",
"ribbonLabel": "ATTENDEE",
"isVip": false,
"ticketTypeId": "cm2k8w0de0002tkt6fh3n8r1s",
"ticketName": "General",
"sponsor": null,
"table": null,
"accessSubEventIds": [],
"badgePrintedAt": null,
"checkIns": [],
"updatedAt": "2027-01-20T20:58:12.000Z"
}The Check-in result
What happened to the scan-in. Repeated scans return the original check-in time and location.
| Field | Type | Description |
|---|---|---|
outcomeenum | enum | Admission decision; see outcomes. |
messagestring | string | Display to the operator. |
checkInobject or null | object or null | New or original check-in; null when admission is refused. |
.idstring | string | Check-in ID. |
.timetimestamp | timestamp | Original scan-in time. |
.locationstring or null | string or null | Original location label. |
registrantRegistrant | Registrant | Current registration, including check-ins and version. |
Registration webhook
Outbound POST to your configured HTTPS receiver. See signature verification, retries and import synchronization.
| Field | Type | Description |
|---|---|---|
idstring | string | Unique event/delivery ID. Stable across retries and manual replay. |
typeenum | enum | registration.created, registration.modified or registration.deleted. |
eventIdstring | string | Granted event ID. |
registrationIdstring | string | Affected registration ID. |
versioninteger | integer | Apply only when greater than the version stored for this registration. |
occurredAttimestamp | timestamp | When this change was captured. |
dataRegistrant or null | Registrant or null | Immutable public snapshot; null for a deletion tombstone. |
{
"id": "a6ae4401-3c86-4c37-9a46-a176c03a563b",
"type": "registration.created",
"eventId": "cm2k8v3qz0001evt7jx4n2p9a",
"registrationId": "cm2k9a1bc0004reg8hd2m5k3q",
"version": 1,
"occurredAt": "2027-01-20T20:58:12.000Z",
"data": {
"registrationId": "cm2k9a1bc0004reg8hd2m5k3q",
"eventId": "cm2k8v3qz0001evt7jx4n2p9a",
"version": 1,
"qrPayload": "cm2k9a1bc0004reg8hd2m5k3q",
"status": "confirmed",
"firstName": "Maya",
"lastName": "Chen",
"organization": "Northwind Energy",
"title": "Head of Partnerships",
"kind": "attendee",
"registrantTypeId": "attendee",
"ribbonLabel": "ATTENDEE",
"isVip": false,
"ticketTypeId": "cm2k8w0de0002tkt6fh3n8r1s",
"ticketName": "General",
"sponsor": null,
"table": null,
"accessSubEventIds": [],
"badgePrintedAt": null,
"checkIns": [],
"updatedAt": "2027-01-20T20:58:12.000Z"
}
}Check-in outcomes
The same rules our own staff app uses. Show the message as it comes; the examples below are typical.
| Outcome | Means | Example message |
|---|---|---|
checked_in | Admitted; the scan-in was recorded. | Checked in. |
already_checked_in | Previously admitted. Original time and location are returned unchanged. | Already checked in at 9:14 AM. |
not_confirmed | Pending approval, waitlisted, cancelled or declined. Do not admit. | Needs approval. Send to the help desk. |
not_allowed | Not allowed into the requested admission area. | Not included in this ticket. |
not_found | No registration on the selected event roster. | Not on the guest list. Send to the help desk. |