Important: This API is currently in pre-release status and is only available to approved early access participants. The API is under development and might change before being generally released. To become an early access participant, contact your SAP Concur Representative.
This page documents the endpoints, payloads, and schemas for the Meetings API v4. See Meetings v4 for the overview, scopes, authentication, and base URIs.
All meeting-scoped endpoints accept an optional companyId query parameter (UUID). When omitted, the company is resolved from the token; when supplied it must match the token’s company.
List Meetings
Retrieves meetings for the caller’s company.
Scopes
meetings.read — Refer to Scope Usage.
URI
GET https://{datacenterURI}/meetings/v4/meetings?companyId={companyId}
Parameters
| Name | Type | Format | Description |
|---|---|---|---|
companyId |
string |
uuid |
Company identifier. Optional; must match the token’s company when supplied. |
countAttendees |
boolean |
- | When true, each returned meeting includes an attendeesCount field. Off by default. |
limit |
integer |
- | Maximum number of results per page. |
offset |
integer |
- | Number of results to skip for pagination. |
Examples
Request
GET https://us.api.concursolutions.com/meetings/v4/meetings?companyId=62ec4e74-3238-41a2-9233-c1cc901c2daa
Accept: application/json
Authorization: Bearer {token}
Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"meetings": [
{
"id": "5036ada6-25e8-4e96-9d28-59788b1cdd67",
"name": "Q3 Sales Kickoff",
"status": "active",
"locationName": "Grand Hotel",
"airport": "SFO",
"startDateTime": "2026-09-01T09:00:00Z",
"endDateTime": "2026-09-03T17:00:00Z",
"timeZone": "America/Los_Angeles"
}
],
"pagination": { "limit": 25, "offset": 0, "total": 1 }
}
Create Meeting
Creates a meeting in the caller’s company. The response includes the generated id.
Scopes
meetings.write
URI
POST https://{datacenterURI}/meetings/v4/meetings
Payloads
- Request: MeetingCreate
- Response: Meeting id and status
Examples
Request
POST https://us.api.concursolutions.com/meetings/v4/meetings
Content-Type: application/json
Authorization: Bearer {token}
{
"companyId": "62ec4e74-3238-41a2-9233-c1cc901c2daa",
"name": "Q3 Sales Kickoff",
"locationName": "Grand Hotel",
"airport": "SFO",
"startDateTime": "2026-09-01T09:00:00Z",
"endDateTime": "2026-09-03T17:00:00Z",
"timeZone": "America/Los_Angeles",
"travelConfigId": "0b2f...",
"partnerMeetingId": "CVENT-12345"
}
Response
HTTP/1.1 201 Created
Content-Type: application/json
{ "id": "5036ada6-25e8-4e96-9d28-59788b1cdd67", "status": "active" }
Get, Update, and Delete a Meeting
GET /meetings/{meetingId}(meetings.read) — full meeting details (metadata + settings + discounts).PATCH /meetings/{meetingId}(meetings.write) — partial update using JSON Merge Patch (Content-Type: application/merge-patch+json).DELETE /meetings/{meetingId}(meetings.write) — soft-delete the meeting.
Related read-only sub-resources: GET /meetings/{meetingId}/metadata, /settings, /discounts, and /history.
PATCH Example
PATCH https://us.api.concursolutions.com/meetings/v4/meetings/5036ada6-25e8-4e96-9d28-59788b1cdd67
Content-Type: application/merge-patch+json
Authorization: Bearer {token}
{ "name": "Q3 Sales Kickoff (Updated)" }
Attendees
GET /meetings/{meetingId}/attendees(meetings.read) — list attendees.POST /meetings/{meetingId}/attendees(meetings.write) — add a single attendee.POST /meetings/{meetingId}/attendees/bulk(meetings.write) — add multiple attendees; returns207 Multi-Statuswith per-item results.GET /meetings/{meetingId}/attendees/{attendeeId}(meetings.read) — get an attendee.PATCH /meetings/{meetingId}/attendees/{attendeeId}(meetings.write) — partial update (JSON Merge Patch).DELETE /meetings/{meetingId}/attendees/{attendeeId}(meetings.write) — remove an attendee.POST /meetings/{meetingId}/attendees/{attendeeId}/login-url(meetings.write) — generate a one-time login URL for a non-employee attendee.
Bulk Add Example
The bulk endpoint takes a JSON body with an attendees array. An empty or missing array returns 400.
Request
POST https://us.api.concursolutions.com/meetings/v4/meetings/{meetingId}/attendees/bulk
Content-Type: application/json
Authorization: Bearer {token}
{
"attendees": [
{ "email": "jane@example.com", "firstName": "Jane", "lastName": "Doe", "profileType": "nonEmployee" },
{ "email": "john@example.com", "firstName": "John", "lastName": "Roe", "profileType": "employee" }
]
}
Response
HTTP/1.1 207 Multi-Status
Content-Type: application/json
{
"totalRequested": 2,
"successful": 2,
"failed": 0,
"results": [
{ "index": 0, "status": 201, "id": "17eeba90-d260-4bf6-8814-7f6336acf0e4" },
{ "index": 1, "status": 201, "id": "820a1325-d80c-4d80-adfa-ae6b322bc009" }
]
}
Company Form Data
GET /companies/{companyId}/form-data (meetings.read) — retrieves the travel configs and their rule classes for a company, used to populate the travel-config and rule-class options when creating or editing a meeting. The caller’s token must belong to the same company.
Example
GET https://us.api.concursolutions.com/meetings/v4/companies/62ec4e74-3238-41a2-9233-c1cc901c2daa/form-data
Accept: application/json
Authorization: Bearer {token}
{
"travelConfigs": [
{ "id": "0b2f...", "name": "Default Travel Config", "ruleClasses": [ { "ruleClassUuid": "...", "ruleClassName": "Default" } ] }
]
}
Schema
MeetingCreate
| Name | Type | Format | Description |
|---|---|---|---|
companyId |
string |
uuid |
Required Company that owns the meeting. |
name |
string |
- | Required Meeting name. |
description |
string |
- | Meeting description. |
locationName |
string |
- | Required Location name. |
airport |
string |
- | Required Nearest airport IATA code. |
startDateTime |
string |
date-time |
Required Meeting start (ISO 8601). |
endDateTime |
string |
date-time |
Required Meeting end (ISO 8601). |
timeZone |
string |
- | Required IANA time zone (e.g., America/Los_Angeles). |
travelConfigId |
string |
uuid |
Required Travel configuration identifier. |
billingCode |
string |
- | Billing code. |
partnerMeetingId |
string |
- | Meeting ID in the partner system (e.g., Cvent event ID). |
AttendeeCreate
| Name | Type | Format | Description |
|---|---|---|---|
email |
string |
email |
Required Attendee email. |
firstName |
string |
- | Required Attendee first name. |
lastName |
string |
- | Required Attendee last name. |
profileType |
string |
enum |
Required One of employee, nonEmployee. |
concurUuid |
string |
uuid |
Concur user profile UUID, if known. |
concurLoginId |
string |
- | Concur login ID / email, if known. |
partnerAttendeeId |
string |
- | Attendee ID in the partner system. |
Attendee
| Name | Type | Format | Description |
|---|---|---|---|
id |
string |
uuid |
Attendee identifier. |
meetingId |
string |
uuid |
Parent meeting identifier. |
profileType |
string |
enum |
One of employee, nonEmployee. |
email |
string |
email |
Attendee email. |
firstName |
string |
- | Attendee first name. |
lastName |
string |
- | Attendee last name. |
bookingStatus |
string |
enum |
One of pending, booked, cancelled. |
tripId |
string |
uuid |
Associated trip identifier, if booked. |
partnerAttendeeId |
string |
- | Attendee ID in the partner system. |
Error
| Name | Type | Format | Description |
|---|---|---|---|
errors |
array |
error |
Required Array of error objects. |
errorCode |
string |
- | Required Machine-readable, non-localized code (e.g., ATTENDEE_NOT_FOUND, VALIDATION_ERROR, FORBIDDEN). |
errorMessage |
string |
- | Required Human-readable message for logging and diagnostics. |