Skip to API documentation
API · Version 1

Build with Events500

Connect your website, application or integration to live booking, event, room, item and contact data.

Production base URL https://www.events500i.com/api/1/
/

Events500 API

The Events500 REST API lets an authorised integration read reference data, query bookings and events, check room availability, and create bookings, events and contacts.

Start with the live contract

This reference reflects the current controller and request models. It supersedes older downloadable guides where an endpoint, field or response code differs.

Your first successful request

  1. 1
    Request credentials

    Your Events500 contact supplies a client ID and password, with permissions for the methods you need.

  2. 2
    Get a bearer token

    Send the credentials as form data to /api/authentication.

  3. 3
    Call a reference endpoint

    Use the token to retrieve IDs such as event rooms, event types and booking statuses.

  4. 4
    Build your workflow

    Use mapped IDs in availability checks, booking creation and event creation requests.

Quickstart

Authenticate, then make a protected request with the returned token.

cURL
curl --request POST "https://www.events500i.com/api/authentication" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=password" \
  --data-urlencode "username=YOUR_CLIENT_ID" \
  --data-urlencode "password=YOUR_PASSWORD"

curl "https://www.events500i.com/api/1/event_rooms" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"

Core concepts

Booking
The parent record for an enquiry or confirmed piece of business. It stores the event type, status, arrival and departure dates, delegates and related records.
Event
A dated room booking inside a booking. An event can include a room, layout, status, start and end times, delegates and booked items.
Company
An organisation associated with a booking.
Contact
An individual who can be associated with one or more bookings.

Versioning and data formats

Versioned URLs

Protected endpoints include the major version in the URL. Version 1 uses https://www.events500i.com/api/1/. Authentication is unversioned.

JSON casing

Request and response properties use the PascalCase names shown in this reference, such as EventRoomID and BookingReference.

Dates and times

Send dates as ISO 8601 calendar dates (YYYY-MM-DD) and times as 24-hour values (HH:mm:ss), unless an endpoint says otherwise.

Content types

Authentication uses application/x-www-form-urlencoded. Endpoint request bodies use application/json.

Authentication

Exchange the client credentials supplied to you for a JSON Web Token (JWT), then send that token as a bearer credential on every protected request.

POST /api/authentication No bearer token required

Form parameters

NameTypeRequiredDescription
grant_typestringYesSend password.
usernamestringYesYour Events500 client ID.
passwordstringYesThe password issued with the client ID.
Request
curl --request POST "https://www.events500i.com/api/authentication" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=password" \
  --data-urlencode "username=YOUR_CLIENT_ID" \
  --data-urlencode "password=YOUR_PASSWORD"
HTTP 200 response
{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "bearer",
  "expires_in": "2026-08-11T14:30:00Z"
}

Use the token

Add the token to the HTTP Authorization header. Do not put credentials or tokens in a URL, source control, browser-side code or application logs.

Authorization header
Authorization: Bearer YOUR_ACCESS_TOKEN
Token lifetime

Tokens are issued for 1 day. Use the expires_in value returned by the API and authenticate again before the token expires.

Responses and errors

Inspect the HTTP status first, then parse a response body only when one is present.

StatusMeaningClient action
200 OKThe request completed successfully. Current create and update methods also return 200.Read the documented JSON response.
204 No ContentA lookup completed but found no matching records.Do not rely on a response body; present an empty result.
400 Bad RequestThe JSON shape, one or more field values, or required venue configuration could not be processed.Correct the fields identified in the response. If the error names venue configuration, contact your Events500 administrator.
401 UnauthorizedCredentials are invalid or the bearer token is missing, invalid or expired.Authenticate again and verify the header.
403 ForbiddenThe credential lacks permission for this method.Ask an Events500 administrator to add the named method permission.
404 Not FoundThe URL or version does not exist.Check the versioned path.
405 Method Not AllowedThe path does not accept the HTTP method or content type used.Match the method and content type shown in the endpoint reference.
500 Internal Server ErrorThe service could not complete a valid request. Create methods return a safe general error without internal exception details.Do not retry continuously; record the time and endpoint, then contact support.
Validation error
{
  "Message": "1 or more data validation errors occured.",
  "Errors": [
    {
      "FieldName": "EventTypeID",
      "Reason": "EventTypeID is a required field."
    }
  ]
}
General error
{
  "Message": "Forbidden",
  "Detail": "The API credential does not have permission to use this method."
}
API Incoming configuration error
{
  "Message": "1 or more data validation errors occured.",
  "Errors": [
    {
      "FieldName": "APIIncomingStatus",
      "Reason": "API Incoming is enabled for this venue, but a valid API Incoming Status has not been configured. Please contact your Events500 administrator."
    }
  ]
}
Create failure
{
  "Message": "Create request failed",
  "Detail": "We could not create the booking. Please try again. If the problem continues, contact your Events500 administrator."
}

Safe failure handling

  • Validate required fields and formats before sending a request.
  • Log the endpoint, HTTP status and response safely, without credentials or bearer tokens.
  • Do not automatically retry validation, authentication or permission failures.
  • Before retrying a create request after a network failure, check whether the record was created to avoid duplicates.
  • Agree polling frequency and expected request volume with your Events500 contact; the API does not currently publish rate-limit headers.

Method permissions

Each protected endpoint now checks a separate permission on the authenticated API credential. Give an integration only the methods its workflow needs.

Permissions are independent

Authentication can succeed while a method returns 403 Forbidden. The credential must also hold the permission code shown on that endpoint.

GetEventRoomsGet event rooms
GetBookingStatusesGet booking statuses
GetEventTypesGet event types
GetRoomLayoutsGet room layouts
GetItemsGet online-bookable items
CheckAvailabilityCheck room availability
CreateEventCreate an event and parent booking
GetEventsGet events
CreateBookingCreate a booking with events and items
GetBookingsGet bookings and related records
ChangeBookingStatusChange tracking status
CreateContactCreate a contact

Ask your Events500 administrator to update the permissions assigned to your cloud API credential. Permission changes do not alter the client ID or password.

Get event rooms

Returns the rooms configured for the authenticated venue. Use these IDs in layout, availability and event requests.

GET /api/1/event_rooms Permission: GetEventRooms

No path, query or body parameters are accepted.

Request
curl "https://www.events500i.com/api/1/event_rooms" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
HTTP 200 response
{
  "EventRooms": [
    { "EventRoomID": 12, "EventRoomName": "The Oak Suite" },
    { "EventRoomID": 18, "EventRoomName": "The Garden Room" }
  ]
}
Response fieldTypeDescription
EventRoomsarrayRooms available to the credential's venue.
EventRoomIDintegerStable room identifier used by other API methods.
EventRoomNamestringRoom display name.

Get booking statuses

Returns the venue's booking statuses. Use the identifiers when changing a booking's tracking status.

GET /api/1/booking_statuses Permission: GetBookingStatuses
Request
curl "https://www.events500i.com/api/1/booking_statuses" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
HTTP 200 response
{
  "BookingStatuses": [
    { "BookingStatusID": 2, "StatusName": "Enquiry" },
    { "BookingStatusID": 4, "StatusName": "Confirmed" }
  ]
}
Response fieldTypeDescription
BookingStatusesarrayBooking statuses configured for the venue.
BookingStatusIDintegerStatus identifier.
StatusNamestringStatus display name.

Get event types

Returns the venue's event types. A valid event type is required when creating a booking or event.

GET /api/1/event_types Permission: GetEventTypes
Request
curl "https://www.events500i.com/api/1/event_types" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
HTTP 200 response
{
  "EventTypes": [
    { "EventTypeID": 3, "EventTypeName": "Conference" },
    { "EventTypeID": 7, "EventTypeName": "Wedding" }
  ]
}
Response fieldTypeDescription
EventTypesarrayEvent types configured for the venue.
EventTypeIDintegerEvent type identifier.
EventTypeNamestringEvent type display name.

Get room layouts

Returns layouts whose configured capacity includes the requested delegate count for a room.

GET /api/1/room_layouts Permission: GetRoomLayouts
GET request body

This existing endpoint reads a JSON body on GET. Ensure your HTTP client and any proxy preserve GET bodies.

JSON body

FieldTypeRequiredDescription
EventRoomIDintegerYesA valid ID returned by Get event rooms.
DelegatesintegerNoDelegate count used against each layout's configured minimum and maximum capacity.
Request
curl --request GET "https://www.events500i.com/api/1/room_layouts" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "EventRoomID": 12,
    "Delegates": 80
  }'
HTTP 200 response
{
  "RoomLayouts": [
    { "RoomLayoutID": 5, "RoomLayoutName": "Cabaret" },
    { "RoomLayoutID": 8, "RoomLayoutName": "Theatre" }
  ]
}

Get items

Returns items enabled for web bookings for the credential's venue. Use ItemID when adding items to created events.

GET /api/1/items Permission: GetItems
Request
curl "https://www.events500i.com/api/1/items" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
HTTP 200 response
{
  "Items": [
    {
      "ItemID": 41,
      "ItemName": "Day Delegate Package",
      "ItemTypeID": 6,
      "ItemTypeName": "Packages",
      "SubType": "Delegate Packages",
      "Price": 54.00,
      "RateBasis": "Per Person",
      "TaxRate": 20.00
    }
  ]
}
Response fieldTypeDescription
ItemIDintegerIdentifier accepted by create booking item records.
ItemNamestringItem display name.
ItemTypeIDintegerItem type identifier.
ItemTypeNamestringItem type display name.
SubTypestring or nullConfigured item subtype name, or null when no subtype is assigned.
PricedecimalCurrent default unit price.
RateBasisstringHow the item price is applied.
TaxRatedecimalActive tax percentage for the item's tax category.

Check availability

Checks each requested room for the same time period on every date in an inclusive range.

GET /api/1/check_availability Permission: CheckAvailability
GET request body

This existing endpoint reads a JSON body on GET. Ensure your HTTP client and any proxy preserve GET bodies.

JSON body

FieldTypeRequiredDescription
EventRoomIDsinteger[]Yes1 or more valid event room IDs.
StartDatedateYesFirst date to check, in YYYY-MM-DD format.
EndDatedateYesLast date to check. It cannot be before StartDate.
StartTimetimeYesStart time applied to every date, in HH:mm:ss format.
EndTimetimeYesEnd time applied to every date. It cannot be before StartTime.
Request
curl --request GET "https://www.events500i.com/api/1/check_availability" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "EventRoomIDs": [12, 18],
    "StartDate": "2026-09-14",
    "EndDate": "2026-09-16",
    "StartTime": "09:00:00",
    "EndTime": "17:00:00"
  }'
HTTP 200 response
{
  "EventRooms": [
    {
      "EventRoomID": 12,
      "EventRoomName": "The Oak Suite",
      "Availability": [
        {
          "Date": "2026-09-14T00:00:00",
          "StartTime": "09:00:00",
          "EndTime": "17:00:00",
          "Available": true
        }
      ]
    }
  ]
}

Availability includes conflicts involving configured component and composite rooms, not only direct bookings in the requested room.

Create event

Creates a booking and, when room and date information is supplied, 1 or more dated events inside it.

POST / PUT /api/1/create_event Permission: CreateEvent

JSON body

FieldTypeRequiredDescription
EventTypeIDintegerYesA valid ID from Get event types.
BookingStatusIDintegerConditionalA valid booking status. The supplied value is used when API Incoming is not enabled. When API Incoming is enabled, the configured API Incoming Status overrides the supplied value. If no valid API Incoming Status is configured, the request returns a 400 configuration error before creating the event.
EventRoomIDintegerNoA valid room ID. When omitted or 0, the API creates the parent booking without an event.
RoomLayoutIDinteger or nullNoA layout valid for the selected room and delegate count.
VenueIDinteger or nullNoTarget property. Defaults to the credential's mapped property.
DelegatesintegerNoNumber of delegates.
EventNamestringNoEvent and booking name.
EventDatedateNoDate of the first event. Omitting it creates a dates-unknown booking.
EventStartTimestringConditionalRequired with EventDate; use HH:mm:ss.
EventEndTimestringConditionalRequired with EventDate; use HH:mm:ss.
NoOfDaysintegerNoDefaults to 1. Values above 1 create an event on each consecutive day.
BookingReferencestringNoYour reference stored against the booking.
NotesstringNoAdditional booking notes.
ActivityCodesobject[]NoVendor-agreed activities with Code, optional Date and optional Time.
CompanyobjectNoCompany to create or link. See the shared company fields below.
ContactobjectNoContact to create or link. See the shared contact fields below.
SalesPersonIDinteger or nullNoVenue-provided salesperson ID.
BookingChannelIDinteger or nullNoVenue-provided booking channel ID.
BookingSourceIDinteger or nullNoVenue-provided booking source ID.
BusinessSectorIDinteger or nullNoVenue-provided business sector ID.
Shared company, contact and activity fields

Company

Name and PostCode identify the company. Optional fields are Address, Town and County.

Contact

Use FirstName, LastName, EmailAddress, Address, Town, County, PostCode, PhoneNumber, Phone, OptIn, OptInEmail, OptInPost and OptInSMS.

Activity code

Each activity accepts Code, Date, DateString and Time. Activity definitions are integration-specific and must be agreed with the venue.

The request model also contains legacy string alternatives for event type, date, activity, company and contact values. New integrations should use the typed JSON fields documented above.

Duplicate-date behaviour

If an existing booking has an event on the same EventDate and a linked contact with the same EmailAddress, the API returns that booking instead of creating another one. The response sets ExistingBookingUpdated to true. Treat this as duplicate protection for that exact match, not as a general idempotency guarantee.

Request
curl --request PUT "https://www.events500i.com/api/1/create_event" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "EventTypeID": 3,
    "BookingStatusID": 2,
    "EventRoomID": 12,
    "RoomLayoutID": 5,
    "EventName": "Acme annual conference",
    "EventDate": "2026-09-14",
    "EventStartTime": "09:00:00",
    "EventEndTime": "17:00:00",
    "Delegates": 80,
    "BookingReference": "ACME-2026",
    "Contact": {
      "FirstName": "Alex",
      "LastName": "Morgan",
      "EmailAddress": "alex.morgan@example.com"
    }
  }'
HTTP 200 response
{
  "BookingID": 12345,
  "BookingName": "Acme annual conference",
  "BookingReference": "ACME-2026",
  "BookingStatusID": 2,
  "ArrivalDate": "2026-09-14T00:00:00",
  "DepatureDate": "2026-09-14T00:00:00",
  "DatesUnknown": false,
  "Delegates": 80,
  "EventTypeID": 3,
  "ExistingBookingUpdated": false,
  "Events": [
    {
      "EventID": 67890,
      "EventName": "Acme annual conference",
      "BookingStatusID": 2,
      "EventDate": "2026-09-14T00:00:00",
      "EventStartTime": "09:00",
      "EventEndTime": "17:00",
      "Delegates": 80,
      "EventRoomID": 12,
      "RoomLayoutID": 5
    }
  ]
}

Get events

Returns event summary records within an inclusive date range, optionally filtered by room or venue.

GET / POST /api/1/get_events Permission: GetEvents

JSON body

FieldTypeRequiredDescription
StartDatedateYesFirst event date, inclusive.
EndDatedateYesLast event date, inclusive.
EventRoomIDinteger or nullNoReturn only events in this valid room.
VenueIDinteger or nullNoReturn events for this valid venue, plus records with no property set.
Request
curl --request POST "https://www.events500i.com/api/1/get_events" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "StartDate": "2026-09-14",
    "EndDate": "2026-09-30",
    "EventRoomID": 12
  }'
HTTP 200 response
{
  "Events": [
    {
      "EventName": "Acme annual conference",
      "DisplayName": "Acme annual conference - The Oak Suite",
      "StartDateTime": "2026-09-14T09:00:00",
      "EndDateTime": "2026-09-14T17:00:00",
      "RoomName": "The Oak Suite",
      "Venue": "Events500 Demo Venue",
      "Status": "Confirmed"
    }
  ]
}

Create booking

Creates a booking, multiple events and optional items linked to each event, plus optional company and contact records.

POST / PUT /api/1/create_booking Permission: CreateBooking
API Incoming can override the supplied booking status

The API normally uses the supplied BookingStatusID. When API Incoming is enabled, the venue's configured API Incoming Status overrides the supplied value. If API Incoming is enabled without a valid configured status, the request returns a 400 configuration error before creating the booking.

Rooms, item times and revenue are validated during creation

Each selected room must be enabled for Online Bookings, and events in one request cannot overlap another event in the same room. An item's EndTime may equal StartTime, but it cannot be earlier. After all items are created, the booking and event calculated revenue is refreshed before the request completes.

Booking fields

FieldTypeRequiredDescription
EventTypeIDintegerYesA valid ID returned by Get event types.
BookingStatusIDintegerConditionalA valid ID returned by Get booking statuses. Required when API Incoming is not enabled. When API Incoming is enabled, the configured API Incoming Status overrides the supplied value.
VenueIDinteger or nullNoTarget property. Defaults to the credential's mapped property.
DelegatesintegerNoBooking delegate count. When 0, the highest event delegate count is used.
BookingNamestringNoBooking name. Defaults to an API booking name when omitted.
ArrivalDatedate or nullNoAdjusted earlier only when necessary to include all event dates.
DepartureDatedate or nullNoAdjusted later only when necessary to include all event dates.
NotesstringNoNotes added to the booking.
BookingReferencestringNoYour booking reference or code.
OfferIDinteger or nullNoA valid offer for the target venue.
Eventsevent[]NoEvents to create. Each supplied event must include a valid date and times.
CompanyobjectNoCompany fields: Name, Address, Town, County, PostCode.
ContactobjectNoContact details using the shared contact fields documented under Create contact.
SalesPersonIDinteger or nullNoVenue-provided salesperson ID.
BookingChannelIDinteger or nullNoVenue-provided booking channel ID.
BookingSourceIDinteger or nullNoVenue-provided booking source ID.
BusinessSectorIDinteger or nullNoVenue-provided business sector ID.
Event and item fields

Event object

FieldTypeRequiredDescription
EventRoomIDintegerNoA room returned by Get event rooms and enabled for Online Bookings. Use 0 for no room. Events in the same request cannot overlap in the same room.
RoomLayoutIDinteger or nullNoRequires a room and must be valid for the delegate count.
DelegatesintegerNoEvent delegate count.
EventNamestringNoEvent name.
EventDatedateYesEvent date in YYYY-MM-DD format.
EventStartTimestringYes24-hour start time in HH:mm:ss format.
EventEndTimestringYesMust be later than the start time.
Itemsitem[]NoItems linked to this event and its parent booking.

Item object

FieldTypeRequiredDescription
ItemIDintegerYesAn item returned by Get items.
DatedateYesItem date in YYYY-MM-DD format.
StartTimestringYes24-hour start time in HH:mm:ss format.
EndTimestringYesMay equal StartTime, but cannot be earlier.
Quantitydecimal or nullNoDefaults to the item's configured quantity, then 1.
OfferIDinteger or nullNoValid offer for the target venue.
RateTableIDinteger or nullNoRequires OfferID and must be valid for the offer and item date.
Request
curl --request PUT "https://www.events500i.com/api/1/create_booking" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "EventTypeID": 3,
    "BookingStatusID": 2,
    "BookingName": "Acme leadership summit",
    "BookingReference": "ACME-SUMMIT-26",
    "Delegates": 80,
    "Events": [
      {
        "EventRoomID": 12,
        "RoomLayoutID": 5,
        "Delegates": 80,
        "EventName": "Leadership summit",
        "EventDate": "2026-09-14",
        "EventStartTime": "09:00:00",
        "EventEndTime": "17:00:00",
        "Items": [
          {
            "ItemID": 41,
            "Date": "2026-09-14",
            "StartTime": "09:00:00",
            "EndTime": "17:00:00",
            "Quantity": 80
          }
        ]
      }
    ],
    "Contact": {
      "FirstName": "Alex",
      "LastName": "Morgan",
      "EmailAddress": "alex.morgan@example.com"
    }
  }'
HTTP 200 response
{
  "BookingID": 12345,
  "BookingName": "Acme leadership summit",
  "BookingReference": "ACME-SUMMIT-26",
  "BookingStatusID": 2,
  "ArrivalDate": "2026-09-14T00:00:00",
  "DepatureDate": "2026-09-14T00:00:00",
  "DatesUnknown": false,
  "Delegates": 80,
  "EventTypeID": 3,
  "Events": [
    {
      "EventID": 67890,
      "EventName": "Leadership summit",
      "EventDate": "2026-09-14T00:00:00",
      "EventRoomID": 12,
      "RoomLayoutID": 5,
      "Items": [
        {
          "ItemBookingID": 24680,
          "ItemID": 41,
          "ItemName": "Day Delegate Package",
          "EventBookingID": 67890,
          "Quantity": 80,
          "UnitPrice": 54.00,
          "TotalPrice": 4320.00
        }
      ]
    }
  ],
  "Items": []
}

Get bookings

Returns bookings and their related events, items, companies, contacts and complete booking status history.

GET /api/1/get_bookings Permission: GetBookings
At least 1 primary filter is required

Supply a complete date range, BookingID, ContactID or ContactEmail. Date ranges are inclusive and both ends are required.

Query parameters

ParameterTypeDescription
BookingIDintegerReturn a specific booking; no date range is required.
ContactIDintegerReturn bookings linked to this contact, including non-primary links.
ContactEmailstringReturn bookings linked to any contact with this email; surrounding whitespace is ignored.
CreatedDateStart / CreatedDateEnddate pairInclusive booking-created date range.
LastUpdateDateStart / LastUpdateDateEnddate pairInclusive booking last-updated date range.
ArrivalDateStart / ArrivalDateEnddate pairInclusive booking arrival date range.
ConfirmedDateStart / ConfirmedDateEnddate pairInclusive booking confirmed date range.
EventDateStart / EventDateEnddate pairInclusive date range for linked events.
VenueIDintegerFilter by an assigned venue.
EventTypeIDintegerFilter by a valid event type.
StatusIDintegerFilter by a valid booking status.
TaxExclusivePricesbooleanWhen true, calculate returned prices without tax. Defaults to false.
Request
curl "https://www.events500i.com/api/1/get_bookings?CreatedDateStart=2026-08-01&CreatedDateEnd=2026-08-31&StatusID=4" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN"
Booking response fields
FieldTypeDescription
ID, BookingCode, Nameinteger, string, stringBooking identifier, reference code and name.
SalesPerson, OfferNamestring or nullAssigned salesperson and offer.
ArrivalDate, DepartureDatedatetimeBooking date span.
CreatedDate, LastUpdatedDatedatetime or nullRecord audit dates.
CancelledDate, ConfirmedDatedatetime or nullLifecycle dates when applicable.
StatusID, StatusName, InventoryStatusinteger, string, stringCurrent tracking and inventory status.
EventTypeID, EventTypeNameinteger or null, stringEvent classification.
Revenue, PotentialRevenuedecimalCurrent and potential booking revenue.
Segment, Source, Channel, BusinessSectorstring or nullConfigured reporting classifications.
CancelReasonstring or nullBooking cancellation reason.
VenueID, VenueName, DelegatesmixedVenue and attendance details.
NotesarrayNotes attached directly to the booking.
Events, Items, Companies, Contacts, StatusHistoryarraysRelated records described below.
Nested event, item, company, contact and status history fields

Event

BookingID, ID, Room, Layout, LayoutExtended, StatusID, StatusName, Delegates, EventDate, SetupTime, SetDownTime, CreatedDate, LastUpdatedDate, Notes. SetDownTime is the event's displayed set-down time.

Item

BookingID, ID, Name, Type, TypeID, SubType, Cost, TotalPrice, Quantity, Tax, CreatedDate, LastUpdatedDate, StartDate, EndDate, StartTime, EndTime, Allocation, IsParentItem, IsSubItem, ParentItemID, EventBookingID, RepeatPerDay, Notes. SubType is the configured item subtype name, or null when no subtype is assigned.

Note

ID, Type, Subject, Detail, CreatedDate, LastUpdatedDate.

Company

ID, Name, Address, Phone, Email, IsPrimary, SubType, CreatedDate, LastUpdatedDate.

Contact

ID, FirstName, LastName, Address, Phone, Email, OptInEmail, OptInPost, OptInSMS, IsPrimary, CreatedDate, LastUpdatedDate.

Status history

Every booking status change appears as StatusLastUpdateDateTime and Status.

HTTP 200 response excerpt
{
  "Bookings": [
    {
      "ID": 12345,
      "BookingCode": "ACME-2026",
      "Name": "Acme leadership summit",
      "SalesPerson": "Alex Morgan",
      "OfferName": "Day Delegate Package",
      "ArrivalDate": "2026-09-14T00:00:00",
      "DepartureDate": "2026-09-14T00:00:00",
      "StatusID": 4,
      "StatusName": "Confirmed",
      "InventoryStatus": "CT",
      "Revenue": 4320.00,
      "PotentialRevenue": 4320.00,
      "Delegates": 80,
      "Notes": [
        {
          "ID": 901,
          "Type": "Requirements",
          "Subject": "Access",
          "Detail": "Step-free access required",
          "CreatedDate": "2026-08-08T14:35:00",
          "LastUpdatedDate": null
        }
      ],
      "Events": [
        {
          "BookingID": 12345,
          "ID": 45678,
          "EventDate": "2026-09-14T00:00:00",
          "SetupTime": "2026-09-14T07:00:00",
          "SetDownTime": "2026-09-14T18:30:00",
          "Notes": []
        }
      ],
      "Items": [
        {
          "BookingID": 12345,
          "ID": 56789,
          "Name": "Projector",
          "SubType": "Presentation Equipment",
          "Notes": []
        }
      ],
      "Companies": [],
      "Contacts": [],
      "StatusHistory": [
        {
          "StatusLastUpdateDateTime": "2026-08-08T14:32:11",
          "Status": "Confirmed"
        }
      ]
    }
  ]
}

Change booking status

Updates a booking's tracking status and matching event statuses when the target belongs to the same inventory state.

POST / PUT /api/1/change_booking_status Permission: ChangeBookingStatus
FieldTypeRequiredDescription
BookingIDintegerYesExisting booking to update.
StatusIDintegerYesExisting target status. Its inventory status must match the booking's current inventory status.
Request
curl --request PUT "https://www.events500i.com/api/1/change_booking_status" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "BookingID": 12345,
    "StatusID": 4
  }'
HTTP 200 response
{
  "BookingID": 12345,
  "StatusID": 4,
  "StatusName": "Confirmed",
  "InventoryStatus": "CT"
}

Sending the booking's existing status is safe: the endpoint returns the current state without adding a duplicate status change.

Create contact

Creates a contact and optional address, email, phone and note records. A matching first name and email can resolve to an existing contact.

POST / PUT /api/1/create_contact Permission: CreateContact

JSON body

FieldTypeRequiredDescription
FirstNamestringYesContact's first name.
LastNamestringYesContact's last name.
AddressstringNoAddress line.
TownstringNoTown or city.
CountystringNoCounty or region.
PostCodestringNoPostal code.
EmailAddressstringNoEmail address. It is also used with first name when checking for an existing contact.
PhoneNumberstringNoPhone number. Phone is an accepted alternative field.
OptInboolean or nullNoGeneral contact opt-in. Defaults to false.
OptInEmailboolean or nullNoEmail preference. Defaults to false.
OptInPostboolean or nullNoPostal preference. Defaults to false.
OptInSMSboolean or nullNoSMS preference. Defaults to false.
TitlestringNoMust match a title configured for the venue.
JobTitlestringNoContact's role or job title.
ContactTypeinteger or nullNoVenue-provided contact type ID.
GenderstringNoM, F or U.
NotesstringNoNote attached to the contact.
DepartmentstringNoContact's department.
Request
curl --request PUT "https://www.events500i.com/api/1/create_contact" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "FirstName": "Alex",
    "LastName": "Morgan",
    "EmailAddress": "alex.morgan@example.com",
    "PhoneNumber": "+44 7700 900123",
    "JobTitle": "Events Director",
    "Department": "Operations",
    "OptInEmail": true,
    "OptInPost": false,
    "OptInSMS": false
  }'
HTTP 200 response
{
  "ContactID": 9012,
  "FirstName": "Alex",
  "LastName": "Morgan",
  "Address": null,
  "Phone": {
    "PhoneID": 3456,
    "PhoneNumber": "+44 7700 900123"
  },
  "Email": {
    "EmailID": 7890,
    "EmailAddress": "alex.morgan@example.com"
  },
  "Title": null,
  "JobTitle": "Events Director",
  "ContactType": 0,
  "Gender": null,
  "Notes": null
}