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

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; returns 207 Multi-Status with 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.

On this page