Skip to content
Abundance EventsDevelopers

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.

List events: response
FieldDescription
itemsarray of EventsGranted events, ordered by start time and ID.

Example

Request
curl -X GET "https://api.events.abundance.institute/v1/integrations/events" \
  -H "Authorization: Bearer $API_KEY"
Response 200
{
  "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.

Get event data: response
FieldDescription
idstringThe event ID. Every path includes it.
slugstringThe short name used in our URLs.
namestringThe event name.
timezonestringIANA time zone, like America/New_York. Show times in it.
startsAttimestampWhen the event starts.
endsAttimestampWhen the event ends.
venueNamestring or nullThe venue.
citystring or nullThe city.
subEvents[]arrayParts of the event with their own door, like a dinner. A check-in names one of these, or null for the main door.
.idstringThe sub-event ID.
.namestringIts name.
.startsAttimestampWhen it starts.
.endsAttimestampWhen it ends.
tickets[]arrayThe event’s ticket types.
.idstringThe ticket type ID.
.namestringIts name, like General.
.kindenumOne of attendee, speaker, sponsor, vip, staff or media.
.isVipbooleanWhether holders are VIPs.
.subEventIdsarray of stringsSub-events this ticket gets into.
.walkInsbooleanLegacy availability flag. Walk-in registration is outside this vendor contract.
scopesarray of stringsWhat your key may do.

Example

Request
curl -X GET "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a" \
  -H "Authorization: Bearer $API_KEY"
Response 200
{
  "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

List registrants: query parameters
FieldDescription
limitintegerDefault 100; range 1–500.
cursorstringOpaque nextCursor from the previous page. Omit on the first request.

Returns

An object containing items and nextCursor. Stop when nextCursor is null.

List registrants: response
FieldDescription
itemsarray of RegistrantsRegistrants in stable creation order.
nextCursorstring or nullNext page cursor; null at the end.

Example

Request
curl -X GET "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a/registrants" \
  -H "Authorization: Bearer $API_KEY"
Response 200
{
  "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.

Get individual registrant: response
FieldDescription
registrationIdstringThe person’s ID at this event. Use it to match and update your records.
qrPayloadstringPlain registration ID. Print the same value as the badge QR. A transfer retires this registration and issues a replacement ID.
statusenumOne of confirmed, pending_approval, waitlisted, cancelled or declined. Only confirmed gets in.
firstNamestringEmpty for a guest seat nobody has named yet.
lastNamestringFor an unnamed guest seat, a label like Guest of Northwind Energy.
organizationstring or nullCompany or organization.
titlestring or nullJob title.
kindenumOne of attendee, speaker, sponsor, vip, staff or media. A VIP attendee is vip.
ribbonLabelstring or nullText for a badge ribbon, like SPEAKER.
isVipbooleanWhether the person is a VIP.
ticketTypeIdstringTheir ticket type.
ticketNamestringThe ticket type’s name.
sponsorstring or nullThe sponsor’s name, when the person is with one.
tablestring or nullTheir seat from the seating plan, like Table 12.
accessSubEventIdsarray of stringsSub-events this person may enter.
badgePrintedAttimestamp or nullThe latest badge print anyone reported.
checkIns[]arrayCheck-ins that weren’t undone.
.idstringThe check-in ID. Use it to undo.
.subEventIdstring or nullnull for the main door.
.sessionIdstring or nullSet when our staff checked the person into a session.
.attimestampWhen it happened.
eventIdstringThe event this registration belongs to.
versionintegerMonotonically increasing version. Ignore older or equal versions, including webhook retries.
registrantTypeIdenumIdentifier from the registrant types endpoint; separate from ticketTypeId.
.locationstring or nullLocation label supplied when scanning in.
updatedAttimestampThe last change to this record.

Example

Request
curl -X GET "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a/registrants/cm2k9a1bc0004reg8hd2m5k3q" \
  -H "Authorization: Bearer $API_KEY"
Response 200
{
  "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

Record scan-in: request body
FieldDescription
timetimestamp · requiredISO 8601 scan time with Z or an explicit offset.
locationstring · requiredNonempty location label, maximum 100 characters.

Returns

A Check-in result. A refused admission has a null checkIn and an explanatory outcome/message.

Record scan-in: response
FieldDescription
outcomeenumAdmission decision; see outcomes.
messagestringDisplay to the operator.
checkInobject or nullNew or original check-in; null when admission is refused.
.idstringCheck-in ID.
.timetimestampOriginal scan-in time.
.locationstring or nullOriginal location label.
registrantRegistrantCurrent registration, including check-ins and version.

Example

Request
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
check-in.json
{
  "time": "2027-01-20T21:04:00.000Z",
  "location": "Registration desk 2"
}
Response 200
{
  "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.

List registrant types: response
FieldDescription
items[]arrayRegistrant categories.
.idenumOne of attendee, speaker, sponsor, vip, staff or media.
.namestringDisplay label.

Example

Request
curl -X GET "https://api.events.abundance.institute/v1/integrations/events/cm2k8v3qz0001evt7jx4n2p9a/registrant-types" \
  -H "Authorization: Bearer $API_KEY"
Response 200
{
  "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.

Registrant fields
FieldDescription
registrationIdstringThe person’s ID at this event. Use it to match and update your records.
qrPayloadstringPlain registration ID. Print the same value as the badge QR. A transfer retires this registration and issues a replacement ID.
statusenumOne of confirmed, pending_approval, waitlisted, cancelled or declined. Only confirmed gets in.
firstNamestringEmpty for a guest seat nobody has named yet.
lastNamestringFor an unnamed guest seat, a label like Guest of Northwind Energy.
organizationstring or nullCompany or organization.
titlestring or nullJob title.
kindenumOne of attendee, speaker, sponsor, vip, staff or media. A VIP attendee is vip.
ribbonLabelstring or nullText for a badge ribbon, like SPEAKER.
isVipbooleanWhether the person is a VIP.
ticketTypeIdstringTheir ticket type.
ticketNamestringThe ticket type’s name.
sponsorstring or nullThe sponsor’s name, when the person is with one.
tablestring or nullTheir seat from the seating plan, like Table 12.
accessSubEventIdsarray of stringsSub-events this person may enter.
badgePrintedAttimestamp or nullThe latest badge print anyone reported.
checkIns[]arrayCheck-ins that weren’t undone.
.idstringThe check-in ID. Use it to undo.
.subEventIdstring or nullnull for the main door.
.sessionIdstring or nullSet when our staff checked the person into a session.
.attimestampWhen it happened.
eventIdstringThe event this registration belongs to.
versionintegerMonotonically increasing version. Ignore older or equal versions, including webhook retries.
registrantTypeIdenumIdentifier from the registrant types endpoint; separate from ticketTypeId.
.locationstring or nullLocation label supplied when scanning in.
updatedAttimestampThe last change to this record.
Registrant
{
  "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.

Check-in result fields
FieldDescription
outcomeenumAdmission decision; see outcomes.
messagestringDisplay to the operator.
checkInobject or nullNew or original check-in; null when admission is refused.
.idstringCheck-in ID.
.timetimestampOriginal scan-in time.
.locationstring or nullOriginal location label.
registrantRegistrantCurrent registration, including check-ins and version.

Registration webhook

Outbound POST to your configured HTTPS receiver. See signature verification, retries and import synchronization.

Registration webhook fields
FieldDescription
idstringUnique event/delivery ID. Stable across retries and manual replay.
typeenumregistration.created, registration.modified or registration.deleted.
eventIdstringGranted event ID.
registrationIdstringAffected registration ID.
versionintegerApply only when greater than the version stored for this registration.
occurredAttimestampWhen this change was captured.
dataRegistrant or nullImmutable public snapshot; null for a deletion tombstone.
Webhook
{
  "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.

Outcomes
OutcomeMeansExample message
checked_inAdmitted; the scan-in was recorded.Checked in.
already_checked_inPreviously admitted. Original time and location are returned unchanged.Already checked in at 9:14 AM.
not_confirmedPending approval, waitlisted, cancelled or declined. Do not admit.Needs approval. Send to the help desk.
not_allowedNot allowed into the requested admission area.Not included in this ticket.
not_foundNo registration on the selected event roster.Not on the guest list. Send to the help desk.