Reporting API
Generate reports across events, budgets, enquiries, offices, automated bookings, and MERF submissions. The Reporting API is read-only: authenticate with a JWT from the Authentication API, then call the report controller that matches the data you need.
All reporting endpoints live under /v1/{Controller}/{Action} and return JSON. Most support filtering by date range, entity identifiers, status, and expandable related data.
Authentication
Reporting endpoints require a valid Bearer token:
POST /v1/AuditReport/GetAuditReport Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
The token must include a scope that grants read access to the report category you are calling. Each endpoint lists the authorisation policy it enforces.
/v1/AuditReport/GetAuditReport
/v1/AuditReport/GetAuditReportRetrieve a paginated audit trail for a specific entity.
Use this endpoint when you need a chronological record of changes: who created or updated an entity, what changed, and when. Common use cases include compliance reviews, data reconciliation, and debugging integration issues.
Request body
Parameters
entityIdintegerRequiredentityRecordIdintegerRequiredsincedate-timeRequireduntildate-timeOptionalpageNumberintegerOptionalpageSizeintegerOptionalexpand.payloadbooleanOptionalexpand.aggregatesbooleanOptionalResponse
Response fields
itemsarrayList of audit entries matching the filters.
items[].timestampdate-timeWhen the action occurred.
items[].userIdintegerIdentifier of the user who performed the action.
items[].entityTypestringType of entity that was changed.
items[].actionstringThe action performed, for example Created or Updated.
items[].payloadobjectRaw payload when expand.payload is true.
pageNumberintegerCurrent page number.
pageSizeintegerNumber of items per page.
totalCountintegerTotal number of matching entries.
Errors
| Status | Meaning |
|---|---|
400 Bad Request | Validation failed. Check the response for property-level errors. |
401 Unauthorized | The Bearer token is missing, expired, or lacks the required scope. |
403 Forbidden | The client is not permitted to read audit data. |
curl -X POST https://dashboard.alpha.meetingsbooker.com/reportingapi/v1/AuditReport/GetAuditReport \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"entityId": 5,
"entityRecordId": 12345,
"since": "2025-01-01T00:00:00Z",
"until": "2025-01-31T23:59:59Z",
"pageSize": 50
}'{
"items": [
{
"timestamp": "2025-01-15T09:23:00Z",
"userId": 42,
"entityType": "Booking",
"action": "Updated"
}
],
"pageNumber": 1,
"pageSize": 50,
"totalCount": 1
}/v1/AutomatedBookingReport/GetAutomatedBookings
/v1/AutomatedBookingReport/GetAutomatedBookingsRetrieve a paginated list of automated bookings.
Use this report to export or monitor bookings that were created through automated channels. Results can be filtered by status, booking type, booker details, and date ranges.
Request body
Parameters
pageNumberintegerOptionalpageSizeintegerOptionalstatusinteger[]OptionalbookingTypesinteger[]OptionalcurrencyCodestringRequiredreservationIdintegerOptionalbookerEmailstringOptionalbookerCompanystringOptionalbookerNamestringOptionalstartDatedate-timeOptionalendDatedate-timeOptionalcreatedSincedate-timeOptionalcreatedUntildate-timeOptionalmodifiedSincedate-timeOptionalmodifiedUntildate-timeOptionalexpand.reservationDaysbooleanOptionalexpand.reservationDayFoodDrinksbooleanOptionalexpand.reservationDayEquipmentsbooleanOptionalexpand.vatratesbooleanOptionalexpand.costCentersbooleanOptionalexpand.currenciesbooleanOptionalexpand.approverbooleanOptionalexpand.transactionsbooleanOptionalResponse
Response fields
itemsarrayList of automated bookings matching the filters.
items[].reservationIdintegerUnique reservation identifier.
items[].bookerEmailstringEmail address of the booker.
items[].bookerCompanystringCompany name of the booker.
items[].statusintegerCurrent booking status identifier.
pageNumberintegerCurrent page number.
pageSizeintegerNumber of items per page.
totalCountintegerTotal number of matching entries.
Errors
| Status | Meaning |
|---|---|
400 Bad Request | Validation failed. Check the response for property-level errors. |
401 Unauthorized | The Bearer token is missing, expired, or lacks the required scope. |
403 Forbidden | The client is not permitted to view automated bookings. |
curl -X POST https://dashboard.alpha.meetingsbooker.com/reportingapi/v1/AutomatedBookingReport/GetAutomatedBookings \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"currencyCode": "EUR",
"status": [1, 2],
"pageSize": 50
}'{
"items": [
{
"reservationId": 98765,
"bookerEmail": "alice@example.com",
"bookerCompany": "Example Ltd",
"status": 1
}
],
"pageNumber": 1,
"pageSize": 50,
"totalCount": 1
}/v1/BudgetReport/GetBudgetsReport
/v1/BudgetReport/GetBudgetsReportRetrieve summary statistics of budget modifications.
Budget reports are used by finance teams to track changes to budgets over a time period. Results include budget identifiers, modification dates, and financial summaries converted to the target currency.
Request body
Parameters
modifiedSincedate-timeRequiredmodifiedUntildate-timeOptionalcompanyIdintegerOptionalaffiliateGroupIdintegerOptionaltargetCurrencyCodestringRequiredonlyDefaultBudgetbooleanOptionaleventIdintegerOptionalincludeDeletedbooleanOptionalpageNumberintegerOptionalpageSizeintegerOptionalexpand.costItemsbooleanOptionalexpand.taxesbooleanOptionalexpand.currenciesbooleanOptionalResponse
Response fields
budgetIdintegerUnique budget identifier.
budgetNamestringDisplay name of the budget.
modifiedAtdate-timeWhen the budget was last modified.
totalAmountdecimalTotal budget amount in the target currency.
currencyCodestringISO 4217 currency code.
Errors
| Status | Meaning |
|---|---|
400 Bad Request | Validation failed. Check the response for property-level errors. |
401 Unauthorized | The Bearer token is missing, expired, or lacks the required scope. |
403 Forbidden | The client is not permitted to view budget data. |
curl -X POST https://dashboard.alpha.meetingsbooker.com/reportingapi/v1/BudgetReport/GetBudgetsReport \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"modifiedSince": "2025-01-01T00:00:00Z",
"modifiedUntil": "2025-01-31T23:59:59Z",
"targetCurrencyCode": "EUR",
"eventId": 12345
}'[
{
"budgetId": 101,
"budgetName": "Q1 Events",
"modifiedAt": "2025-01-20T14:00:00Z",
"totalAmount": 12500.00,
"currencyCode": "EUR"
}
]/v1/EnquiryReport/GetEnquiriesReport
/v1/EnquiryReport/GetEnquiriesReportRetrieve a paginated list of enquiries.
Use this report to export enquiry data for analysis or downstream processing. Results can be filtered by status, booker details, company, affiliate group, and date ranges.
Request body
Parameters
pageNumberintegerOptionalpageSizeintegerOptionalstatusinteger[]OptionalenquiryIdintegerOptionalbookerEmailstringOptionalbookerCompanystringOptionalbookerNamestringOptionalcompanyIdintegerOptionalaffiliateGroupIdintegerOptionalstartDatedate-timeOptionalendDatedate-timeOptionalcreatedSincedate-timeOptionalcreatedUntildate-timeOptionalmodifiedSincedate-timeOptionalmodifiedUntildate-timeOptionalexpand.enquiryVenuesbooleanOptionalexpand.enquiryDaybooleanOptionalexpand.bedroomsbooleanOptionalexpand.customQuestionsbooleanOptionalexpand.customFieldsbooleanOptionalexpand.approverbooleanOptionalexpand.addressExtrabooleanOptionalexpand.taxesbooleanOptionalEnquiry status values
The status request filter and items[].status response field use the same set of values. These statuses represent the enquiry lifecycle from draft through to booking or lost.
Response
Response fields
itemsarrayList of enquiries matching the filters.
items[].enquiryIdintegerUnique enquiry identifier.
items[].bookerEmailstringEmail address of the booker.
items[].bookerCompanystringCompany name of the booker.
items[].statusintegerCurrent enquiry status identifier. See Enquiry status values above for the full list.
pageNumberintegerCurrent page number.
pageSizeintegerNumber of items per page.
totalCountintegerTotal number of matching entries.
Errors
| Status | Meaning |
|---|---|
400 Bad Request | Validation failed. Check the response for property-level errors. |
401 Unauthorized | The Bearer token is missing, expired, or lacks the required scope. |
403 Forbidden | The client is not permitted to view enquiry data. |
curl -X POST https://dashboard.alpha.meetingsbooker.com/reportingapi/v1/EnquiryReport/GetEnquiriesReport \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": [1, 2],
"companyId": 1001,
"pageSize": 50
}'{
"items": [
{
"enquiryId": 12345,
"bookerEmail": "alice@example.com",
"bookerCompany": "Example Ltd",
"status": 1
}
],
"pageNumber": 1,
"pageSize": 50,
"totalCount": 1
}/v1/EnquiryReport/{enquiryId}/Audit
/v1/EnquiryReport/{enquiryId}/AuditRetrieve the audit trail for a single enquiry.
This is a convenience endpoint that wraps the audit report and pre-filters it to the Enquiries entity type and the supplied enquiry identifier.
Request body
Parameters
enquiryIdintegerRequiredsincedate-timeRequireduntildate-timeOptionalpageNumberintegerOptionalpageSizeintegerOptionalexpand.payloadbooleanOptionalexpand.aggregatesbooleanOptionalResponse
Response fields
itemsarrayList of audit entries for the enquiry.
items[].timestampdate-timeWhen the action occurred.
items[].userIdintegerIdentifier of the user who performed the action.
items[].actionstringThe action performed.
pageNumberintegerCurrent page number.
pageSizeintegerNumber of items per page.
totalCountintegerTotal number of matching entries.
Errors
| Status | Meaning |
|---|---|
400 Bad Request | Validation failed or the request body is missing. |
401 Unauthorized | The Bearer token is missing, expired, or lacks the required scope. |
403 Forbidden | The client is not permitted to view this enquiry or audit data. |
curl -X POST https://dashboard.alpha.meetingsbooker.com/reportingapi/v1/EnquiryReport/12345/Audit \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"since": "2025-01-01T00:00:00Z",
"until": "2025-01-31T23:59:59Z"
}'{
"items": [
{
"timestamp": "2025-01-15T09:23:00Z",
"userId": 42,
"action": "Updated"
}
],
"pageNumber": 1,
"pageSize": 100,
"totalCount": 1
}/v1/EventReport/GetEventsReport
/v1/EventReport/GetEventsReportRetrieve summary statistics of event modifications.
Use this report to understand how events have changed over a period. Results can be filtered by modification date, company, affiliate group, and event identifier.
Request body
Parameters
pageNumberintegerOptionalpageSizeintegerOptionalmodifiedSincedate-timeRequiredmodifiedUntildate-timeOptionalcompanyIdintegerOptionalaffiliateGroupIdintegerOptionaleventIdintegerOptionalincludeDeletedbooleanOptionalexpand.meetingRoomsbooleanOptionalexpand.accommodationsbooleanOptionalexpand.commissionsbooleanOptionalexpand.entityLinksbooleanOptionalexpand.permissionsbooleanOptionalexpand.operationsRecordbooleanOptionalexpand.assignmentsbooleanOptionalexpand.cancellationRecordbooleanOptionalexpand.extendedPropertiesbooleanOptionalResponse
Response fields
eventIdintegerUnique event identifier.
eventNamestringDisplay name of the event.
modifiedAtdate-timeWhen the event was last modified.
totalChangesintegerNumber of modifications recorded in the period.
Errors
| Status | Meaning |
|---|---|
400 Bad Request | Validation failed. Check the response for property-level errors. |
401 Unauthorized | The Bearer token is missing, expired, or lacks the required scope. |
403 Forbidden | The client is not permitted to view event data. |
curl -X POST https://dashboard.alpha.meetingsbooker.com/reportingapi/v1/EventReport/GetEventsReport \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"modifiedSince": "2025-01-01T00:00:00Z",
"modifiedUntil": "2025-01-31T23:59:59Z",
"companyId": 1001
}'[
{
"eventId": 555,
"eventName": "Annual Conference",
"modifiedAt": "2025-01-20T10:00:00Z",
"totalChanges": 3
}
]/v1/MerfReport/GetMerfReport
/v1/MerfReport/GetMerfReportRetrieve a list of MERF submissions.
Use this report to export MERF (event form) submissions for analysis or downstream processing. Results can be filtered by modification or creation date, company, affiliate, form, and event.
Request body
Parameters
pageNumberintegerOptionalpageSizeintegerOptionalmodifiedSincedate-timeOptionalmodifiedUntildate-timeOptionalcreatedSincedate-timeOptionalcreatedUntildate-timeOptionalcompanyIdintegerOptionalaffiliateIdintegerOptionalformIdintegerOptionaleventIdintegerOptionalexpand.personbooleanOptionalexpand.fieldResponsesbooleanOptionalexpand.attachmentsbooleanOptionalResponse
Response fields
itemsarrayList of MERF submissions matching the filters.
items[].submissionIdintegerUnique submission identifier.
items[].formIdintegerIdentifier of the submitted form.
items[].eventIdintegerIdentifier of the linked event.
items[].submittedAtdate-timeWhen the submission was created.
pageNumberintegerCurrent page number.
pageSizeintegerNumber of items per page.
totalCountintegerTotal number of matching entries.
Errors
| Status | Meaning |
|---|---|
400 Bad Request | Validation failed. Check the response for property-level errors. |
401 Unauthorized | The Bearer token is missing, expired, or lacks the required scope. |
403 Forbidden | The client is not permitted to view MERF submissions. |
curl -X POST https://dashboard.alpha.meetingsbooker.com/reportingapi/v1/MerfReport/GetMerfReport \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"formId": 10,
"eventId": 555,
"pageSize": 50
}'{
"items": [
{
"submissionId": 321,
"formId": 10,
"eventId": 555,
"submittedAt": "2025-01-18T16:00:00Z"
}
],
"pageNumber": 1,
"pageSize": 50,
"totalCount": 1
}/v1/OfficeReport/GetOfficeReservations
/v1/OfficeReport/GetOfficeReservationsRetrieve a paginated list of office reservations.
Use this report to export office reservation data. Results can be filtered by status, booking type, booker details, and date ranges.
Request body
Parameters
pageNumberintegerOptionalpageSizeintegerOptionalstatusinteger[]OptionalbookingTypesinteger[]OptionalofficeReservationIdintegerOptionalbookerEmailstringOptionalbookerCompanystringOptionalbookerNamestringOptionalstartDatedate-timeOptionalendDatedate-timeOptionalcreatedSincedate-timeOptionalcreatedUntildate-timeOptionalmodifiedSincedate-timeOptionalmodifiedUntildate-timeOptionalexpand.reservationDaysbooleanOptionalexpand.userDetailsbooleanOptionalexpand.customDatabooleanOptionalexpand.attendeesbooleanOptionalexpand.benchmarkDatabooleanOptionalexpand.extraItemsbooleanOptionalResponse
Response fields
itemsarrayList of office reservations matching the filters.
items[].officeReservationIdintegerUnique office reservation identifier.
items[].bookerEmailstringEmail address of the booker.
items[].bookerCompanystringCompany name of the booker.
items[].statusintegerCurrent reservation status identifier.
pageNumberintegerCurrent page number.
pageSizeintegerNumber of items per page.
totalCountintegerTotal number of matching entries.
Errors
| Status | Meaning |
|---|---|
400 Bad Request | Validation failed. Check the response for property-level errors. |
401 Unauthorized | The Bearer token is missing, expired, or lacks the required scope. |
403 Forbidden | The client is not permitted to view office reservations. |
curl -X POST https://dashboard.alpha.meetingsbooker.com/reportingapi/v1/OfficeReport/GetOfficeReservations \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": [1],
"pageSize": 50
}'{
"items": [
{
"officeReservationId": 444,
"bookerEmail": "bob@example.com",
"bookerCompany": "Example Ltd",
"status": 1
}
],
"pageNumber": 1,
"pageSize": 50,
"totalCount": 1
}Common query patterns
Date ranges
Most reporting endpoints accept date filters such as startDate, endDate, modifiedSince, modifiedUntil, createdSince, createdUntil, or since and until. Use inclusive boundaries and ISO 8601 format:
{
"modifiedSince": "2025-01-01T00:00:00Z",
"modifiedUntil": "2025-01-31T23:59:59Z"
}
Pagination
Paginated reports return pageNumber, pageSize, and totalCount. Include the next pageNumber in the body of the next request:
{
"pageNumber": 2,
"pageSize": 100
}
Filtering
Supply only the filters you need. Empty or omitted filters are treated as "all values". Combining too many filters can return an empty result set without an error, so verify your filters independently when debugging.
Expand options
Many reports support an expand object to include related entities. Set the relevant property to true only when you need the extra data, because expansion increases response size and processing time.