Skip to content

Events ​

← Workspace APIs

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.

EndpointMeaning
GET /eventsOne page of events.
GET /events/idsEvery live event id, for finding deletions.
GET /events/{id}One event.
ParameterTypeMeaning
qstringOnly events whose name contains this text. At most 200 characters.
starts_afterdate or date-timeOnly 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_beforedate or date-timeOnly 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"
}
FieldTypeMeaning
idUUIDThe event id.
namestringThe event's name.
codestring or nullThe event's short code.
typestring or nullThe event type's name.
descriptionstring or nullThe event's description.
starts_atdate-time or nullWhen the event starts.
ends_atdate-time or nullWhen the event ends.
is_freebooleantrue if the event is free.
default_priceobject or nullThe event's default price.
default_price.amountstringThe amount.
default_price.currencystringAlways USD.
capacityinteger or nullThe most registrants the event takes.
has_classesbooleantrue if the event offers classes. List them with GET /classes?event_id=.
has_exhibitorsbooleantrue if the event takes exhibitors.
registration.is_openbooleantrue if registration is turned on.
registration.opens_atdate-time or nullWhen registration opens.
registration.closes_atdate-time or nullWhen registration closes.
registration.capacity_counts_paid_onlyboolean or nulltrue if only paid registrations count towards capacity. null if the event has no registration settings.
registration.payment_exemptboolean or nulltrue if the event is marked payment exempt. null if the event has no registration settings.
guests.enabledbooleantrue if guest registration is turned on.
guests.allowedbooleantrue if registrants can bring guests. false if the event has no guest rules.
guests.max_per_registrantinteger or nullThe most guests one registrant can bring. null if guests are unlimited or the event has no guest rules.
guests.unlimitedbooleantrue if there is no limit on guests.
daysarrayThe event's days, earliest first.
days[].idUUIDThe day's id. Bundle items of type day use this id.
days[].namestring or nullThe day's name.
days[].starts_atdate-time or nullWhen the day starts.
days[].ends_atdate-time or nullWhen the day ends.
days[].urlstring or nullThe day's custom link.
days[].venueobject or nullWhere the day takes place. null if no venue is set.
days[].venue.idUUIDThe venue's id.
days[].venue.namestring or nullThe venue's name.
days[].venue.address_line_1string or nullFirst address line.
days[].venue.address_line_2string or nullSecond address line.
days[].venue.citystring or nullCity.
days[].venue.statestring or nullState.
days[].venue.postal_codestring or nullPostal code.
days[].venue.countrystring or nullCountry.
contactsarrayThe event's contacts. Finance contacts come last.
contacts[].person_idUUIDThe contact's id from /people.
contacts[].first_namestring or nullFirst name. null if the person has been deleted.
contacts[].last_namestring or nullLast name. null if the person has been deleted.
contacts[].emailstring or nullEmail address. null if the person has been deleted.
contacts[].is_finance_contactbooleantrue for the event's finance contact.
contacts[].forstringWho the contact is for: all, attendees or exhibitors.
fee_policiesarrayFees charged for cancelling or changing a registration.
fee_policies[].idUUIDThe policy's id.
fee_policies[].namestring or nullThe policy's name.
fee_policies[].typestringcancellation, modification or other.
fee_policies[].appliesstringWhen the policy applies: before_event, before_registration_closes, after_registration_closes or other.
fee_policies[].is_activebooleantrue if the policy is in use.
fee_policies[].rangesarrayThe policy's day ranges, in display order.
fee_policies[].ranges[].from_daysinteger or nullFirst day of the range.
fee_policies[].ranges[].to_daysinteger or nullLast day of the range.
fee_policies[].ranges[].feeobject or nullA fixed fee for the range, as amount (string) and currency (USD).
fee_policies[].ranges[].fee_percentagestring or nullA percentage fee for the range, as a decimal string, for example "10.00".
questionsarrayQuestions asked when people register, in display order. Answers are on /registration-answers.
questions[].idUUIDThe question's id.
questions[].textstring or nullThe question as plain text.
questions[].descriptionstring or nullHelp text shown with the question.
questions[].typestringdate, date_range, dropdown, multi_select_dropdown, text, text_area, radio, file_upload, number, checkbox, email, phone, multiple_inputs or other.
questions[].is_requiredbooleantrue if an answer is required.
questions[].is_activebooleantrue if the question is in use.
questions[].orderinteger or nullDisplay position.
questions[].optionsarrayThe choices for a choice question, in display order. Empty for other types.
questions[].options[].idUUIDThe option's id.
questions[].options[].textstring or nullThe option's text.
exhibitorsobject or nullExhibitor registration settings. null if the event has none.
exhibitors.is_activebooleantrue if exhibitor registration is in use.
exhibitors.registration_opens_atdate-time or nullWhen exhibitor registration opens.
exhibitors.registration_closes_atdate-time or nullWhen exhibitor registration closes.
exhibitors.max_booth_preferencesinteger or nullThe most booth preferences an exhibitor can give.
exhibitors.additional_staff_allowedbooleantrue if exhibitors can add extra booth staff.
exhibitors.max_additional_staffinteger or nullThe most extra booth staff an exhibitor can add.
exhibitors.additional_staff_priceobject or nullThe price of each extra booth staff member, as amount (string) and currency (USD).
created_atdate-timeWhen the event was created.
updated_atdate-timeWhen 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.

EndpointMeaning
GET /event-sessionsOne page of sessions.
GET /event-sessions/idsEvery live session id, for finding deletions.
GET /event-sessions/{id}One session.
ParameterTypeMeaning
event_idUUIDOnly 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"
}
FieldTypeMeaning
idUUIDThe session id.
event_idUUIDThe event the session belongs to.
namestring or nullThe session's name.
typestring or nullThe session type's name.
agendastring or nullThe session's agenda text.
starts_atdate-time or nullWhen the session starts.
ends_atdate-time or nullWhen the session ends.
default_priceobject or nullThe session's default price, as amount (string) and currency (USD).
is_activebooleantrue if the session is in use.
roomsarrayThe rooms the session uses, by name.
rooms[].idUUIDThe room's id.
rooms[].namestring or nullThe room's name.
rooms[].buildingstring or nullThe building the room is in.
rooms[].capacityinteger or nullHow many people the room holds.
rooms[].venue_idUUID or nullThe room's venue. Matches days[].venue.id on the event.
speakersarrayThe session's speakers, by last name.
speakers[].person_idUUIDThe speaker's id from /people.
speakers[].first_namestring or nullFirst name. null if the person has been deleted.
speakers[].last_namestring or nullLast name. null if the person has been deleted.
created_atdate-timeWhen the session was created.
updated_atdate-timeWhen 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.

EndpointMeaning
GET /event-bundlesOne page of bundles.
GET /event-bundles/idsEvery live bundle id, for finding deletions.
GET /event-bundles/{id}One bundle.
ParameterTypeMeaning
event_idUUIDOnly 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"
}
FieldTypeMeaning
idUUIDThe bundle id.
event_idUUIDThe event the bundle belongs to.
namestring or nullThe bundle's name.
descriptionstring or nullThe bundle's description.
default_priceobject or nullThe bundle's default price, as amount (string) and currency (USD). Other price levels are not returned.
is_enabledbooleantrue if the bundle is offered.
is_defaultbooleantrue if this is the event's default bundle.
visible_to_everyonebooleantrue if the bundle is shown to everyone by default.
sequenceinteger or nullDisplay position.
max_unitsinteger or nullThe most units one registration can take.
quantityinteger or nullHow many of the bundle are available.
itemsarrayWhat the bundle contains. An item that appears twice is returned once.
items[].typestringday, class, session or other.
items[].idUUIDFor day, a days[].id on the event. For class, a class from /classes. For session, a session from /event-sessions.
created_atdate-timeWhen the bundle was created.
updated_atdate-timeWhen 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.

EndpointMeaning
GET /event-boothsOne page of booths.
GET /event-booths/idsEvery live booth id, for finding deletions.
GET /event-booths/{id}One booth.
ParameterTypeMeaning
event_idUUIDOnly 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"
}
FieldTypeMeaning
idUUIDThe booth id.
event_idUUIDThe event the booth belongs to.
namestring or nullThe booth's name.
typeobject or nullThe booth type. null if none is set.
type.idUUIDThe booth type's id.
type.namestring or nullThe booth type's name.
lengthstring or nullThe booth's length, as a decimal string.
widthstring or nullThe booth's width, as a decimal string.
staff_capacityinteger or nullHow many staff the booth includes.
additional_staff_capacityinteger or nullHow many extra staff can be added.
priceobject or nullThe booth's price, as amount (string) and currency (USD).
additional_staff_priceobject or nullThe price of each extra staff member, as amount (string) and currency (USD).
statusstringpre_assigned, available, sold or other.
assigned_toobject or nullWho the booth is assigned to. null if it has no valid assignment.
assigned_to.typestringperson or organization.
assigned_to.idUUIDThe id from /people or /organizations, as type says.
is_activebooleantrue if the booth is in use.
purchasesarrayWho bought the booth, oldest first.
purchases[].registration_idUUIDThe exhibitor's registration from /registrations.
purchases[].organization_idUUID or nullThe buying organization from /organizations.
purchases[].priceobject or nullThe price recorded for the purchase, as amount (string) and currency (USD).
purchases[].is_activebooleantrue if the purchase is in effect.
purchases[].created_atdate-timeWhen the purchase was made.
created_atdate-timeWhen the booth was created.
updated_atdate-timeWhen 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.

EndpointMeaning
GET /booth-staffOne page of booth staff.
GET /booth-staff/idsEvery live booth staff id, for finding deletions.
GET /booth-staff/{id}One booth staff record.
ParameterTypeMeaning
event_idUUIDOnly staff at this event.
registration_idUUIDOnly 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"
}
FieldTypeMeaning
idUUIDThe booth staff record id.
event_idUUIDThe event.
registration_idUUIDThe exhibitor's registration from /registrations.
person_idUUID or nullThe staff member's id from /people.
booth_idUUID or nullThe booth from /event-booths. Usually null; the exhibitor's booths are in purchases on /event-booths.
priceobject or nullThe price recorded for this staff member, as amount (string) and currency (USD).
is_additionalbooleantrue for an additional staff member.
is_activebooleantrue if the record is in effect.
created_atdate-timeWhen the record was created.
updated_atdate-timeWhen 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.

EndpointMeaning
GET /pricing-rulesOne page of pricing rules.
GET /pricing-rules/idsEvery live pricing rule id, for finding deletions.
GET /pricing-rules/{id}One pricing rule.
ParameterTypeMeaning
item_idUUIDOnly 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"
}
FieldTypeMeaning
idUUIDThe pricing rule's id.
itemobjectThe item the rule prices.
item.typestringevent, event_session, event_bundle, event_booth, booth_type, class, course, award, or other.
item.idUUID or nullThe 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.
groupsarrayThe groups of people the rule applies to, in the order Engagifii checks them. Removed groups are left out.
groups[].sequenceinteger or nullThe group's position in that order.
groups[].is_activebooleanWhether the group is switched on.
groups[].applies_toobjectWho belongs to the group.
groups[].applies_to.typestringperson, organization, tag, group, committee, person_type, persona, organization_type, organization_custom_field, or other.
groups[].applies_to.idstring or nullWhich 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.namestring or nullThe name Engagifii shows for it.
groups[].applies_to.valuesarray of stringsThe 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[].priceobject or nullThe fixed price for this group. null when the group has no fixed price.
groups[].tiersarrayPrice tiers by date for this group. Empty when the group has none.
groups[].tiers[].namestring or nullThe tier's name, for example Early bird.
groups[].tiers[].starts_at_localstring or nullWhen the tier starts, as YYYY-MM-DDTHH:MM:SS in the workspace's local time, with no offset. See below.
groups[].tiers[].ends_at_localstring or nullWhen the tier ends, in the same form as starts_at_local.
groups[].tiers[].limitinteger or nullHow many registrations the tier allows.
groups[].tiers[].priceobject or nullThe tier's price. null when Engagifii works the price out by a formula at sign-up.
created_atdate-timeWhen the rule was created.
updated_atdate-timeWhen 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.