Appearance
Events
Events, their agenda sessions, registration bundles, exhibitor booths, booth staff and pricing rules. Paging, updated_since, the deleted short form and /ids work as described in Paging and Keeping a copy in sync.
Money values on this page are objects such as { "amount": "125.00", "currency": "USD" }. amount is a decimal written as a string, so it keeps its exact value. currency is always USD.
Events
An event is a conference, meeting or other gathering people register for. Each record carries its days, contacts, registration settings, guest rules, fee policies, registration questions and exhibitor settings. Sessions, bundles, booths, classes and registrations have their own lists.
| Endpoint | Meaning |
|---|---|
GET /events | One page of events. |
GET /events/ids | Every live event id, for finding deletions. |
GET /events/{id} | One event. |
| Parameter | Type | Meaning |
|---|---|---|
q | string | Only events whose name contains this text. At most 200 characters. |
starts_after | date or date-time | Only events that start at or after this time, in UTC. Send a date (2026-10-01) or a UTC date-time without an offset (2026-10-01T13:00:00). |
starts_before | date or date-time | Only events that start at or before this time, in UTC, in the same format as starts_after. A date alone means the start of that day, so starts_before=2026-10-31 leaves out events that start later on 31 October. |
json
{
"id": "3f0c…",
"name": "Annual Conference 2026",
"code": "AC26",
"type": "Conference",
"description": "Two days of sessions for members.",
"starts_at": "2026-12-01T13:00:00Z",
"ends_at": "2026-12-02T22:00:00Z",
"is_free": false,
"default_price": { "amount": "250.00", "currency": "USD" },
"capacity": 400,
"has_classes": true,
"has_exhibitors": true,
"registration": {
"is_open": true,
"opens_at": "2026-09-01T12:00:00Z",
"closes_at": "2026-11-20T23:59:00Z",
"capacity_counts_paid_only": false,
"payment_exempt": false
},
"guests": { "enabled": true, "allowed": true, "max_per_registrant": 2, "unlimited": false },
"days": [
{
"id": "7a21…",
"name": "Day 1",
"starts_at": "2026-12-01T13:00:00Z",
"ends_at": "2026-12-01T22:00:00Z",
"url": null,
"venue": {
"id": "c4d8…",
"name": "Riverside Convention Center",
"address_line_1": "100 River Road",
"address_line_2": null,
"city": "Springfield",
"state": "IL",
"postal_code": "62701",
"country": "United States"
}
}
],
"contacts": [
{
"person_id": "91be…",
"first_name": "Dana",
"last_name": "Reyes",
"email": "dana.reyes@example.org",
"is_finance_contact": false,
"for": "all"
}
],
"fee_policies": [
{
"id": "e510…",
"name": "Cancellation fee",
"type": "cancellation",
"applies": "before_event",
"is_active": true,
"ranges": [
{ "from_days": 0, "to_days": 14, "fee": { "amount": "50.00", "currency": "USD" }, "fee_percentage": null }
]
}
],
"questions": [
{
"id": "b2f9…",
"text": "Dietary requirements",
"description": null,
"type": "dropdown",
"is_required": false,
"is_active": true,
"order": 1,
"options": [ { "id": "0d3e…", "text": "Vegetarian" }, { "id": "0d3f…", "text": "None" } ]
}
],
"exhibitors": {
"is_active": true,
"registration_opens_at": "2026-08-01T12:00:00Z",
"registration_closes_at": "2026-11-01T23:59:00Z",
"max_booth_preferences": 3,
"additional_staff_allowed": true,
"max_additional_staff": 2,
"additional_staff_price": { "amount": "75.00", "currency": "USD" }
},
"created_at": "2026-06-10T15:22:41Z",
"updated_at": "2026-10-02T14:05:11Z"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The event id. |
name | string | The event's name. |
code | string or null | The event's short code. |
type | string or null | The event type's name. |
description | string or null | The event's description. |
starts_at | date-time or null | When the event starts. |
ends_at | date-time or null | When the event ends. |
is_free | boolean | true if the event is free. |
default_price | object or null | The event's default price. |
default_price.amount | string | The amount. |
default_price.currency | string | Always USD. |
capacity | integer or null | The most registrants the event takes. |
has_classes | boolean | true if the event offers classes. List them with GET /classes?event_id=. |
has_exhibitors | boolean | true if the event takes exhibitors. |
registration.is_open | boolean | true if registration is turned on. |
registration.opens_at | date-time or null | When registration opens. |
registration.closes_at | date-time or null | When registration closes. |
registration.capacity_counts_paid_only | boolean or null | true if only paid registrations count towards capacity. null if the event has no registration settings. |
registration.payment_exempt | boolean or null | true if the event is marked payment exempt. null if the event has no registration settings. |
guests.enabled | boolean | true if guest registration is turned on. |
guests.allowed | boolean | true if registrants can bring guests. false if the event has no guest rules. |
guests.max_per_registrant | integer or null | The most guests one registrant can bring. null if guests are unlimited or the event has no guest rules. |
guests.unlimited | boolean | true if there is no limit on guests. |
days | array | The event's days, earliest first. |
days[].id | UUID | The day's id. Bundle items of type day use this id. |
days[].name | string or null | The day's name. |
days[].starts_at | date-time or null | When the day starts. |
days[].ends_at | date-time or null | When the day ends. |
days[].url | string or null | The day's custom link. |
days[].venue | object or null | Where the day takes place. null if no venue is set. |
days[].venue.id | UUID | The venue's id. |
days[].venue.name | string or null | The venue's name. |
days[].venue.address_line_1 | string or null | First address line. |
days[].venue.address_line_2 | string or null | Second address line. |
days[].venue.city | string or null | City. |
days[].venue.state | string or null | State. |
days[].venue.postal_code | string or null | Postal code. |
days[].venue.country | string or null | Country. |
contacts | array | The event's contacts. Finance contacts come last. |
contacts[].person_id | UUID | The contact's id from /people. |
contacts[].first_name | string or null | First name. null if the person has been deleted. |
contacts[].last_name | string or null | Last name. null if the person has been deleted. |
contacts[].email | string or null | Email address. null if the person has been deleted. |
contacts[].is_finance_contact | boolean | true for the event's finance contact. |
contacts[].for | string | Who the contact is for: all, attendees or exhibitors. |
fee_policies | array | Fees charged for cancelling or changing a registration. |
fee_policies[].id | UUID | The policy's id. |
fee_policies[].name | string or null | The policy's name. |
fee_policies[].type | string | cancellation, modification or other. |
fee_policies[].applies | string | When the policy applies: before_event, before_registration_closes, after_registration_closes or other. |
fee_policies[].is_active | boolean | true if the policy is in use. |
fee_policies[].ranges | array | The policy's day ranges, in display order. |
fee_policies[].ranges[].from_days | integer or null | First day of the range. |
fee_policies[].ranges[].to_days | integer or null | Last day of the range. |
fee_policies[].ranges[].fee | object or null | A fixed fee for the range, as amount (string) and currency (USD). |
fee_policies[].ranges[].fee_percentage | string or null | A percentage fee for the range, as a decimal string, for example "10.00". |
questions | array | Questions asked when people register, in display order. Answers are on /registration-answers. |
questions[].id | UUID | The question's id. |
questions[].text | string or null | The question as plain text. |
questions[].description | string or null | Help text shown with the question. |
questions[].type | string | date, date_range, dropdown, multi_select_dropdown, text, text_area, radio, file_upload, number, checkbox, email, phone, multiple_inputs or other. |
questions[].is_required | boolean | true if an answer is required. |
questions[].is_active | boolean | true if the question is in use. |
questions[].order | integer or null | Display position. |
questions[].options | array | The choices for a choice question, in display order. Empty for other types. |
questions[].options[].id | UUID | The option's id. |
questions[].options[].text | string or null | The option's text. |
exhibitors | object or null | Exhibitor registration settings. null if the event has none. |
exhibitors.is_active | boolean | true if exhibitor registration is in use. |
exhibitors.registration_opens_at | date-time or null | When exhibitor registration opens. |
exhibitors.registration_closes_at | date-time or null | When exhibitor registration closes. |
exhibitors.max_booth_preferences | integer or null | The most booth preferences an exhibitor can give. |
exhibitors.additional_staff_allowed | boolean | true if exhibitors can add extra booth staff. |
exhibitors.max_additional_staff | integer or null | The most extra booth staff an exhibitor can add. |
exhibitors.additional_staff_price | object or null | The price of each extra booth staff member, as amount (string) and currency (USD). |
created_at | date-time | When the event was created. |
updated_at | date-time | When the event last changed. |
Sync notes. updated_at also moves when the event's registration settings, guest rules, fee policies or exhibitor settings change. It does not move when days, venues, contacts, registration questions or fee policy ranges change. Reload events in full from time to time to pick those up.
Event sessions
A session is one item on an event's agenda, such as a workshop or a meal, that people can choose when they register. Each record carries its rooms and speakers. Registration items and bundle items of type session point to these records. Event days are on the event (days), not here.
| Endpoint | Meaning |
|---|---|
GET /event-sessions | One page of sessions. |
GET /event-sessions/ids | Every live session id, for finding deletions. |
GET /event-sessions/{id} | One session. |
| Parameter | Type | Meaning |
|---|---|---|
event_id | UUID | Only sessions of this event. |
json
{
"id": "5c7e…",
"event_id": "3f0c…",
"name": "Opening Keynote",
"type": "Keynote",
"agenda": "Welcome and year in review.",
"starts_at": "2026-12-01T14:00:00Z",
"ends_at": "2026-12-01T15:00:00Z",
"default_price": { "amount": "0.00", "currency": "USD" },
"is_active": true,
"rooms": [
{ "id": "a8b1…", "name": "Hall A", "building": "North Wing", "capacity": 300, "venue_id": "c4d8…" }
],
"speakers": [
{ "person_id": "44d0…", "first_name": "Sam", "last_name": "Okafor" }
],
"created_at": "2026-07-01T10:00:00Z",
"updated_at": "2026-10-15T09:12:30Z"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The session id. |
event_id | UUID | The event the session belongs to. |
name | string or null | The session's name. |
type | string or null | The session type's name. |
agenda | string or null | The session's agenda text. |
starts_at | date-time or null | When the session starts. |
ends_at | date-time or null | When the session ends. |
default_price | object or null | The session's default price, as amount (string) and currency (USD). |
is_active | boolean | true if the session is in use. |
rooms | array | The rooms the session uses, by name. |
rooms[].id | UUID | The room's id. |
rooms[].name | string or null | The room's name. |
rooms[].building | string or null | The building the room is in. |
rooms[].capacity | integer or null | How many people the room holds. |
rooms[].venue_id | UUID or null | The room's venue. Matches days[].venue.id on the event. |
speakers | array | The session's speakers, by last name. |
speakers[].person_id | UUID | The speaker's id from /people. |
speakers[].first_name | string or null | First name. null if the person has been deleted. |
speakers[].last_name | string or null | Last name. null if the person has been deleted. |
created_at | date-time | When the session was created. |
updated_at | date-time | When the session last changed. |
Sync notes. updated_at is the session's own change time. A change to its rooms or speakers may not move it, so reload sessions in full from time to time. When an event is deleted, its sessions stop being returned and no deleted marker is sent for them. Remove them with the event, or find them with /event-sessions/ids.
Event bundles
A bundle is a package people can register for in one step. It contains event days, classes or sessions and has its own default price.
| Endpoint | Meaning |
|---|---|
GET /event-bundles | One page of bundles. |
GET /event-bundles/ids | Every live bundle id, for finding deletions. |
GET /event-bundles/{id} | One bundle. |
| Parameter | Type | Meaning |
|---|---|---|
event_id | UUID | Only bundles of this event. |
json
{
"id": "d1a4…",
"event_id": "3f0c…",
"name": "Full Conference Pass",
"description": "Both days and the opening keynote.",
"default_price": { "amount": "450.00", "currency": "USD" },
"is_enabled": true,
"is_default": false,
"visible_to_everyone": true,
"sequence": 1,
"max_units": 1,
"quantity": 200,
"items": [
{ "type": "day", "id": "7a21…" },
{ "type": "class", "id": "62f3…" },
{ "type": "session", "id": "5c7e…" }
],
"created_at": "2026-07-02T11:30:00Z",
"updated_at": "2026-09-28T16:45:02Z"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The bundle id. |
event_id | UUID | The event the bundle belongs to. |
name | string or null | The bundle's name. |
description | string or null | The bundle's description. |
default_price | object or null | The bundle's default price, as amount (string) and currency (USD). Other price levels are not returned. |
is_enabled | boolean | true if the bundle is offered. |
is_default | boolean | true if this is the event's default bundle. |
visible_to_everyone | boolean | true if the bundle is shown to everyone by default. |
sequence | integer or null | Display position. |
max_units | integer or null | The most units one registration can take. |
quantity | integer or null | How many of the bundle are available. |
items | array | What the bundle contains. An item that appears twice is returned once. |
items[].type | string | day, class, session or other. |
items[].id | UUID | For day, a days[].id on the event. For class, a class from /classes. For session, a session from /event-sessions. |
created_at | date-time | When the bundle was created. |
updated_at | date-time | When the bundle last changed. |
Sync notes. Items that point to a deleted day or session are left out. Items of type class are not checked, so one can name a class that /classes no longer returns. updated_at is the bundle's own change time; a change to its items may not move it, so reload bundles in full from time to time. When an event is deleted, its bundles stop being returned and no deleted marker is sent for them. Remove them with the event, or find them with /event-bundles/ids.
Event booths
A booth is an exhibitor space at an event, with its size, price and staff allowance. Each record carries its purchases: which exhibitor registration bought it. What was invoiced for a booth is on /invoices, on lines with category exhibitor_booth.
| Endpoint | Meaning |
|---|---|
GET /event-booths | One page of booths. |
GET /event-booths/ids | Every live booth id, for finding deletions. |
GET /event-booths/{id} | One booth. |
| Parameter | Type | Meaning |
|---|---|---|
event_id | UUID | Only booths of this event. |
json
{
"id": "f08c…",
"event_id": "3f0c…",
"name": "Booth 12",
"type": { "id": "2b6d…", "name": "Corner" },
"length": "10.00",
"width": "10.00",
"staff_capacity": 2,
"additional_staff_capacity": 2,
"price": { "amount": "1200.00", "currency": "USD" },
"additional_staff_price": { "amount": "75.00", "currency": "USD" },
"status": "sold",
"assigned_to": { "type": "organization", "id": "9e47…" },
"is_active": true,
"purchases": [
{
"registration_id": "6a90…",
"organization_id": "9e47…",
"price": { "amount": "1200.00", "currency": "USD" },
"is_active": true,
"created_at": "2026-09-05T18:20:00Z"
}
],
"created_at": "2026-07-15T09:00:00Z",
"updated_at": "2026-09-05T18:20:00Z"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The booth id. |
event_id | UUID | The event the booth belongs to. |
name | string or null | The booth's name. |
type | object or null | The booth type. null if none is set. |
type.id | UUID | The booth type's id. |
type.name | string or null | The booth type's name. |
length | string or null | The booth's length, as a decimal string. |
width | string or null | The booth's width, as a decimal string. |
staff_capacity | integer or null | How many staff the booth includes. |
additional_staff_capacity | integer or null | How many extra staff can be added. |
price | object or null | The booth's price, as amount (string) and currency (USD). |
additional_staff_price | object or null | The price of each extra staff member, as amount (string) and currency (USD). |
status | string | pre_assigned, available, sold or other. |
assigned_to | object or null | Who the booth is assigned to. null if it has no valid assignment. |
assigned_to.type | string | person or organization. |
assigned_to.id | UUID | The id from /people or /organizations, as type says. |
is_active | boolean | true if the booth is in use. |
purchases | array | Who bought the booth, oldest first. |
purchases[].registration_id | UUID | The exhibitor's registration from /registrations. |
purchases[].organization_id | UUID or null | The buying organization from /organizations. |
purchases[].price | object or null | The price recorded for the purchase, as amount (string) and currency (USD). |
purchases[].is_active | boolean | true if the purchase is in effect. |
purchases[].created_at | date-time | When the purchase was made. |
created_at | date-time | When the booth was created. |
updated_at | date-time | When the booth last changed. |
Sync notes. updated_at also moves when a purchase of the booth changes. Purchases made by a deleted registration are left out. When an event is deleted, its booths stop being returned and no deleted marker is sent for them. Remove them with the event, or find them with /event-booths/ids.
Booth staff
A booth staff record is one person staffing an exhibitor's booth at an event, under the exhibitor's registration.
| Endpoint | Meaning |
|---|---|
GET /booth-staff | One page of booth staff. |
GET /booth-staff/ids | Every live booth staff id, for finding deletions. |
GET /booth-staff/{id} | One booth staff record. |
| Parameter | Type | Meaning |
|---|---|---|
event_id | UUID | Only staff at this event. |
registration_id | UUID | Only staff under this exhibitor registration. |
json
{
"id": "1e5b…",
"event_id": "3f0c…",
"registration_id": "6a90…",
"person_id": "77c2…",
"booth_id": null,
"price": { "amount": "75.00", "currency": "USD" },
"is_additional": true,
"is_active": true,
"created_at": "2026-09-06T12:00:00Z",
"updated_at": "2026-09-06T12:00:00Z"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The booth staff record id. |
event_id | UUID | The event. |
registration_id | UUID | The exhibitor's registration from /registrations. |
person_id | UUID or null | The staff member's id from /people. |
booth_id | UUID or null | The booth from /event-booths. Usually null; the exhibitor's booths are in purchases on /event-booths. |
price | object or null | The price recorded for this staff member, as amount (string) and currency (USD). |
is_additional | boolean | true for an additional staff member. |
is_active | boolean | true if the record is in effect. |
created_at | date-time | When the record was created. |
updated_at | date-time | When the record last changed. |
Sync notes. Staff under a deleted registration, or at a deleted event, stop being returned and no deleted marker is sent for them. Remove them with their registration or event, or find them with /booth-staff/ids.
Pricing rules
A pricing rule says who gets a different price for an event, class, bundle, session or booth than the item's own price. Each rule lists groups of people in the order Engagifii checks them: a person, an organization, a tag, a group, a committee, a person type and so on. Each group has a fixed price or price tiers by date. The first group a person matches sets their price. A person who matches no group pays the item's own price.
These are the rules as configured today. Engagifii keeps no history of them. The price a person actually paid was worked out when they registered: it is the price on /registration-items.
| Endpoint | Meaning |
|---|---|
GET /pricing-rules | One page of pricing rules. |
GET /pricing-rules/ids | Every live pricing rule id, for finding deletions. |
GET /pricing-rules/{id} | One pricing rule. |
| Parameter | Type | Meaning |
|---|---|---|
item_id | UUID | Only the rules of this item: an event, class, bundle, session or booth id. |
json
{
"id": "62fa…",
"item": { "type": "event", "id": "3f0c…" },
"groups": [
{
"sequence": 1,
"is_active": true,
"applies_to": { "type": "person_type", "id": "71f3…", "name": "Individual Member", "values": [] },
"price": null,
"tiers": [
{ "name": "Early bird", "starts_at_local": "2026-08-01T00:00:00", "ends_at_local": "2026-09-30T23:59:00", "limit": null, "price": { "amount": "295.00", "currency": "USD" } },
{ "name": "Standard", "starts_at_local": "2026-10-01T00:00:00", "ends_at_local": "2026-11-30T23:59:00", "limit": 200, "price": { "amount": "350.00", "currency": "USD" } }
]
},
{
"sequence": 2,
"is_active": true,
"applies_to": { "type": "committee", "id": "d81b…", "name": "Board of Directors", "values": [] },
"price": { "amount": "0.00", "currency": "USD" },
"tiers": []
}
],
"created_at": "2026-07-01T10:00:00Z",
"updated_at": "2026-08-12T16:45:09Z"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The pricing rule's id. |
item | object | The item the rule prices. |
item.type | string | event, event_session, event_bundle, event_booth, booth_type, class, course, award, or other. |
item.id | UUID or null | The item's id: for example an id from /events, /event-sessions, /event-bundles, /event-booths or /classes. Engagifii keeps the rules of an item it has deleted, so this can name an item the other lists no longer return. |
groups | array | The groups of people the rule applies to, in the order Engagifii checks them. Removed groups are left out. |
groups[].sequence | integer or null | The group's position in that order. |
groups[].is_active | boolean | Whether the group is switched on. |
groups[].applies_to | object | Who belongs to the group. |
groups[].applies_to.type | string | person, organization, tag, group, committee, person_type, persona, organization_type, organization_custom_field, or other. |
groups[].applies_to.id | string or null | Which one. For person, organization, group and committee, an id from /people, /organizations, /groups or /committees. For other types, Engagifii's own id or value, as text. |
groups[].applies_to.name | string or null | The name Engagifii shows for it. |
groups[].applies_to.values | array of strings | The values the group matches, where the type uses them, for example the chosen answers of an organization custom field. A value that is itself a list is given as JSON text. Empty otherwise. |
groups[].price | object or null | The fixed price for this group. null when the group has no fixed price. |
groups[].tiers | array | Price tiers by date for this group. Empty when the group has none. |
groups[].tiers[].name | string or null | The tier's name, for example Early bird. |
groups[].tiers[].starts_at_local | string or null | When the tier starts, as YYYY-MM-DDTHH:MM:SS in the workspace's local time, with no offset. See below. |
groups[].tiers[].ends_at_local | string or null | When the tier ends, in the same form as starts_at_local. |
groups[].tiers[].limit | integer or null | How many registrations the tier allows. |
groups[].tiers[].price | object or null | The tier's price. null when Engagifii works the price out by a formula at sign-up. |
created_at | date-time | When the rule was created. |
updated_at | date-time | When the rule last changed. |
Tier times are local times as entered in Engagifii, not UTC, and carry no offset. Read them in the workspace's time zone from GET /workspace.
Sync notes. A deleted rule comes back in the deleted short form with updated_since and leaves /pricing-rules/ids.
