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

POST/v1/AuditReport/GetAuditReport

Retrieve 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

entityIdintegerRequired
Identifier of the entity type to audit (for example, the Enquiries entity identifier).
entityRecordIdintegerRequired
Identifier of the specific record to audit.
sincedate-timeRequired
Inclusive start of the reporting period in ISO 8601 format.
untildate-timeOptional
Inclusive end of the reporting period in ISO 8601 format.
pageNumberintegerOptional
Page number for pagination. Defaults to 1.
pageSizeintegerOptional
Page size for pagination. Defaults to 100.
expand.payloadbooleanOptional
Include the raw payload for each audit entry. Defaults to false.
expand.aggregatesbooleanOptional
Include aggregate data for each audit entry. Defaults to false.

Response

Response fields

itemsarray

List of audit entries matching the filters.

items[].timestampdate-time

When the action occurred.

items[].userIdinteger

Identifier of the user who performed the action.

items[].entityTypestring

Type of entity that was changed.

items[].actionstring

The action performed, for example Created or Updated.

items[].payloadobject

Raw payload when expand.payload is true.

pageNumberinteger

Current page number.

pageSizeinteger

Number of items per page.

totalCountinteger

Total number of matching entries.

Errors

StatusMeaning
400 Bad RequestValidation failed. Check the response for property-level errors.
401 UnauthorizedThe Bearer token is missing, expired, or lacks the required scope.
403 ForbiddenThe client is not permitted to read audit data.
Example request
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
  }'
Example response
{
  "items": [
    {
      "timestamp": "2025-01-15T09:23:00Z",
      "userId": 42,
      "entityType": "Booking",
      "action": "Updated"
    }
  ],
  "pageNumber": 1,
  "pageSize": 50,
  "totalCount": 1
}

/v1/AutomatedBookingReport/GetAutomatedBookings

POST/v1/AutomatedBookingReport/GetAutomatedBookings

Retrieve 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

pageNumberintegerOptional
Page number for pagination. Defaults to 1.
pageSizeintegerOptional
Page size for pagination. Defaults to 100.
statusinteger[]Optional
Filter to one or more booking status identifiers.
bookingTypesinteger[]Optional
Filter to one or more booking type identifiers.
currencyCodestringRequired
ISO 4217 currency code for monetary values in the report.
reservationIdintegerOptional
Filter to a specific reservation identifier.
bookerEmailstringOptional
Filter to bookings where the booker email contains this value.
bookerCompanystringOptional
Filter to bookings where the booker company contains this value.
bookerNamestringOptional
Filter to bookings where the booker name contains this value.
startDatedate-timeOptional
Filter reservations with a start date on or after this value.
endDatedate-timeOptional
Filter reservations with an end date on or before this value.
createdSincedate-timeOptional
Filter reservations created on or after this value.
createdUntildate-timeOptional
Filter reservations created on or before this value.
modifiedSincedate-timeOptional
Filter reservations modified on or after this value.
modifiedUntildate-timeOptional
Filter reservations modified on or before this value.
expand.reservationDaysbooleanOptional
Include reservation day details.
expand.reservationDayFoodDrinksbooleanOptional
Include food and drink details.
expand.reservationDayEquipmentsbooleanOptional
Include equipment details.
expand.vatratesbooleanOptional
Include VAT rate details.
expand.costCentersbooleanOptional
Include cost centre details.
expand.currenciesbooleanOptional
Include currency details.
expand.approverbooleanOptional
Include approver details.
expand.transactionsbooleanOptional
Include transaction details.

Response

Response fields

itemsarray

List of automated bookings matching the filters.

items[].reservationIdinteger

Unique reservation identifier.

items[].bookerEmailstring

Email address of the booker.

items[].bookerCompanystring

Company name of the booker.

items[].statusinteger

Current booking status identifier.

pageNumberinteger

Current page number.

pageSizeinteger

Number of items per page.

totalCountinteger

Total number of matching entries.

Errors

StatusMeaning
400 Bad RequestValidation failed. Check the response for property-level errors.
401 UnauthorizedThe Bearer token is missing, expired, or lacks the required scope.
403 ForbiddenThe client is not permitted to view automated bookings.
Example request
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
  }'
Example response
{
  "items": [
    {
      "reservationId": 98765,
      "bookerEmail": "alice@example.com",
      "bookerCompany": "Example Ltd",
      "status": 1
    }
  ],
  "pageNumber": 1,
  "pageSize": 50,
  "totalCount": 1
}

/v1/BudgetReport/GetBudgetsReport

POST/v1/BudgetReport/GetBudgetsReport

Retrieve 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-timeRequired
Filter budgets modified on or after this date.
modifiedUntildate-timeOptional
Filter budgets modified on or before this date.
companyIdintegerOptional
Filter to a specific company identifier.
affiliateGroupIdintegerOptional
Filter to a specific affiliate group identifier.
targetCurrencyCodestringRequired
ISO 4217 currency code used for monetary values in the report.
onlyDefaultBudgetbooleanOptional
When true, include only default budgets.
eventIdintegerOptional
Filter to budgets linked to a specific event.
includeDeletedbooleanOptional
When true, include soft-deleted budgets, items, and cost lines.
pageNumberintegerOptional
Page number for pagination. Defaults to 1.
pageSizeintegerOptional
Page size for pagination. Defaults to 100.
expand.costItemsbooleanOptional
Include cost item details.
expand.taxesbooleanOptional
Include tax details.
expand.currenciesbooleanOptional
Include currency details.

Response

Response fields

budgetIdinteger

Unique budget identifier.

budgetNamestring

Display name of the budget.

modifiedAtdate-time

When the budget was last modified.

totalAmountdecimal

Total budget amount in the target currency.

currencyCodestring

ISO 4217 currency code.

Errors

StatusMeaning
400 Bad RequestValidation failed. Check the response for property-level errors.
401 UnauthorizedThe Bearer token is missing, expired, or lacks the required scope.
403 ForbiddenThe client is not permitted to view budget data.
Example request
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
  }'
Example response
[
  {
    "budgetId": 101,
    "budgetName": "Q1 Events",
    "modifiedAt": "2025-01-20T14:00:00Z",
    "totalAmount": 12500.00,
    "currencyCode": "EUR"
  }
]

/v1/EnquiryReport/GetEnquiriesReport

POST/v1/EnquiryReport/GetEnquiriesReport

Retrieve 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

pageNumberintegerOptional
Page number for pagination. Defaults to 1.
pageSizeintegerOptional
Page size for pagination. Defaults to 50.
statusinteger[]Optional
Filter to one or more enquiry status identifiers. See Enquiry status values below for the full list.
enquiryIdintegerOptional
Filter to a specific enquiry identifier.
bookerEmailstringOptional
Filter to enquiries where the booker email contains this value.
bookerCompanystringOptional
Filter to enquiries where the booker company contains this value.
bookerNamestringOptional
Filter to enquiries where the booker name contains this value.
companyIdintegerOptional
Filter to a specific company identifier.
affiliateGroupIdintegerOptional
Filter to a specific affiliate group identifier.
startDatedate-timeOptional
Filter enquiries with a start date on or after this value.
endDatedate-timeOptional
Filter enquiries with an end date on or before this value.
createdSincedate-timeOptional
Filter enquiries created on or after this value.
createdUntildate-timeOptional
Filter enquiries created on or before this value.
modifiedSincedate-timeOptional
Filter enquiries modified on or after this value.
modifiedUntildate-timeOptional
Filter enquiries modified on or before this value.
expand.enquiryVenuesbooleanOptional
Include venue details.
expand.enquiryDaybooleanOptional
Include enquiry day details.
expand.bedroomsbooleanOptional
Include bedroom details.
expand.customQuestionsbooleanOptional
Include custom question responses.
expand.customFieldsbooleanOptional
Include custom field values.
expand.approverbooleanOptional
Include approver details.
expand.addressExtrabooleanOptional
Include additional address details.
expand.taxesbooleanOptional
Include tax details. Defaults to true.

Enquiry 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

itemsarray

List of enquiries matching the filters.

items[].enquiryIdinteger

Unique enquiry identifier.

items[].bookerEmailstring

Email address of the booker.

items[].bookerCompanystring

Company name of the booker.

items[].statusinteger

Current enquiry status identifier. See Enquiry status values above for the full list.

pageNumberinteger

Current page number.

pageSizeinteger

Number of items per page.

totalCountinteger

Total number of matching entries.

Errors

StatusMeaning
400 Bad RequestValidation failed. Check the response for property-level errors.
401 UnauthorizedThe Bearer token is missing, expired, or lacks the required scope.
403 ForbiddenThe client is not permitted to view enquiry data.
Example request
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
  }'
Example response
{
  "items": [
    {
      "enquiryId": 12345,
      "bookerEmail": "alice@example.com",
      "bookerCompany": "Example Ltd",
      "status": 1
    }
  ],
  "pageNumber": 1,
  "pageSize": 50,
  "totalCount": 1
}

/v1/EnquiryReport/{enquiryId}/Audit

POST/v1/EnquiryReport/{enquiryId}/Audit

Retrieve 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

enquiryIdintegerRequired
Path parameter: identifier of the enquiry to audit.
sincedate-timeRequired
Inclusive start of the reporting period in ISO 8601 format.
untildate-timeOptional
Inclusive end of the reporting period in ISO 8601 format.
pageNumberintegerOptional
Page number for pagination. Defaults to 1.
pageSizeintegerOptional
Page size for pagination. Defaults to 100.
expand.payloadbooleanOptional
Include the raw payload for each audit entry.
expand.aggregatesbooleanOptional
Include aggregate data for each audit entry.

Response

Response fields

itemsarray

List of audit entries for the enquiry.

items[].timestampdate-time

When the action occurred.

items[].userIdinteger

Identifier of the user who performed the action.

items[].actionstring

The action performed.

pageNumberinteger

Current page number.

pageSizeinteger

Number of items per page.

totalCountinteger

Total number of matching entries.

Errors

StatusMeaning
400 Bad RequestValidation failed or the request body is missing.
401 UnauthorizedThe Bearer token is missing, expired, or lacks the required scope.
403 ForbiddenThe client is not permitted to view this enquiry or audit data.
Example request
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"
  }'
Example response
{
  "items": [
    {
      "timestamp": "2025-01-15T09:23:00Z",
      "userId": 42,
      "action": "Updated"
    }
  ],
  "pageNumber": 1,
  "pageSize": 100,
  "totalCount": 1
}

/v1/EventReport/GetEventsReport

POST/v1/EventReport/GetEventsReport

Retrieve 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

pageNumberintegerOptional
Page number for pagination. Defaults to 1.
pageSizeintegerOptional
Page size for pagination. Defaults to 100.
modifiedSincedate-timeRequired
Filter events modified on or after this date.
modifiedUntildate-timeOptional
Filter events modified on or before this date.
companyIdintegerOptional
Filter to a specific company identifier.
affiliateGroupIdintegerOptional
Filter to a specific affiliate group identifier.
eventIdintegerOptional
Filter to a specific event identifier.
includeDeletedbooleanOptional
When true, include deleted events in the results.
expand.meetingRoomsbooleanOptional
Include meeting room details.
expand.accommodationsbooleanOptional
Include accommodation details.
expand.commissionsbooleanOptional
Include commission details.
expand.entityLinksbooleanOptional
Include linked entity details.
expand.permissionsbooleanOptional
Include permission details.
expand.operationsRecordbooleanOptional
Include operations record details.
expand.assignmentsbooleanOptional
Include assignment details.
expand.cancellationRecordbooleanOptional
Include cancellation record details.
expand.extendedPropertiesbooleanOptional
Include extended property values.

Response

Response fields

eventIdinteger

Unique event identifier.

eventNamestring

Display name of the event.

modifiedAtdate-time

When the event was last modified.

totalChangesinteger

Number of modifications recorded in the period.

Errors

StatusMeaning
400 Bad RequestValidation failed. Check the response for property-level errors.
401 UnauthorizedThe Bearer token is missing, expired, or lacks the required scope.
403 ForbiddenThe client is not permitted to view event data.
Example request
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
  }'
Example response
[
  {
    "eventId": 555,
    "eventName": "Annual Conference",
    "modifiedAt": "2025-01-20T10:00:00Z",
    "totalChanges": 3
  }
]

/v1/MerfReport/GetMerfReport

POST/v1/MerfReport/GetMerfReport

Retrieve 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

pageNumberintegerOptional
Page number for pagination. Defaults to 1.
pageSizeintegerOptional
Page size for pagination. Defaults to 100.
modifiedSincedate-timeOptional
Filter submissions modified on or after this date.
modifiedUntildate-timeOptional
Filter submissions modified on or before this date.
createdSincedate-timeOptional
Filter submissions created on or after this date.
createdUntildate-timeOptional
Filter submissions created on or before this date.
companyIdintegerOptional
Filter to a specific company identifier.
affiliateIdintegerOptional
Filter to a specific affiliate identifier.
formIdintegerOptional
Filter to a specific form identifier.
eventIdintegerOptional
Filter to a specific event identifier.
expand.personbooleanOptional
Include submitter person details.
expand.fieldResponsesbooleanOptional
Include form field responses.
expand.attachmentsbooleanOptional
Include attachment details.

Response

Response fields

itemsarray

List of MERF submissions matching the filters.

items[].submissionIdinteger

Unique submission identifier.

items[].formIdinteger

Identifier of the submitted form.

items[].eventIdinteger

Identifier of the linked event.

items[].submittedAtdate-time

When the submission was created.

pageNumberinteger

Current page number.

pageSizeinteger

Number of items per page.

totalCountinteger

Total number of matching entries.

Errors

StatusMeaning
400 Bad RequestValidation failed. Check the response for property-level errors.
401 UnauthorizedThe Bearer token is missing, expired, or lacks the required scope.
403 ForbiddenThe client is not permitted to view MERF submissions.
Example request
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
  }'
Example response
{
  "items": [
    {
      "submissionId": 321,
      "formId": 10,
      "eventId": 555,
      "submittedAt": "2025-01-18T16:00:00Z"
    }
  ],
  "pageNumber": 1,
  "pageSize": 50,
  "totalCount": 1
}

/v1/OfficeReport/GetOfficeReservations

POST/v1/OfficeReport/GetOfficeReservations

Retrieve 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

pageNumberintegerOptional
Page number for pagination. Defaults to 1.
pageSizeintegerOptional
Page size for pagination. Defaults to 100.
statusinteger[]Optional
Filter to one or more reservation status identifiers.
bookingTypesinteger[]Optional
Filter to one or more booking type identifiers.
officeReservationIdintegerOptional
Filter to a specific office reservation identifier.
bookerEmailstringOptional
Filter to reservations where the booker email contains this value.
bookerCompanystringOptional
Filter to reservations where the booker company contains this value.
bookerNamestringOptional
Filter to reservations where the booker name contains this value.
startDatedate-timeOptional
Filter reservations with a start date on or after this value.
endDatedate-timeOptional
Filter reservations with an end date on or before this value.
createdSincedate-timeOptional
Filter reservations created on or after this value.
createdUntildate-timeOptional
Filter reservations created on or before this value.
modifiedSincedate-timeOptional
Filter reservations modified on or after this value.
modifiedUntildate-timeOptional
Filter reservations modified on or before this value.
expand.reservationDaysbooleanOptional
Include reservation day details.
expand.userDetailsbooleanOptional
Include user details.
expand.customDatabooleanOptional
Include custom data values.
expand.attendeesbooleanOptional
Include attendee details.
expand.benchmarkDatabooleanOptional
Include benchmark data.
expand.extraItemsbooleanOptional
Include extra item details.

Response

Response fields

itemsarray

List of office reservations matching the filters.

items[].officeReservationIdinteger

Unique office reservation identifier.

items[].bookerEmailstring

Email address of the booker.

items[].bookerCompanystring

Company name of the booker.

items[].statusinteger

Current reservation status identifier.

pageNumberinteger

Current page number.

pageSizeinteger

Number of items per page.

totalCountinteger

Total number of matching entries.

Errors

StatusMeaning
400 Bad RequestValidation failed. Check the response for property-level errors.
401 UnauthorizedThe Bearer token is missing, expired, or lacks the required scope.
403 ForbiddenThe client is not permitted to view office reservations.
Example request
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
  }'
Example response
{
  "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.