openapi: 3.2.0
info:
title: Cvent REST APIs — Event Cloud Compliance API
description: "Event Cloud scope of the Cvent REST APIs. This document is a TAG-SCOPED SUBSET of the OpenAPI specification Cvent publishes at https://github.com/cvent/rest-sdks/blob/main/cvent-public-spec/openapi.yaml (the source of truth for Cvent's official TypeScript/.NET/Java SDKs). Venue-sourcing, RFP, housing-supplier and travel-supplier tags were removed because they belong to Cvent Hospitality Cloud; every path, operation, parameter, schema and security requirement below is verbatim from Cvent's published spec.\n\n# Introduction\nThe Cvent API Platform is built around REST. We aim to provide intuitive endpoints that can be easily\ndiscovered to help leverage the Cvent platform for your event needs. The RESTful APIs outlined here\nuse JSON-encoded request and response format, along with HTTP codes, to convey processing status of\nrequests received. The Cvent resources are protected using OAuth2.\n\n# Getting Started\n\nIf you're new to the Cvent API Platform, start by reading our\n[Developer Quickstart](https://developers.cvent.com/docs/rest-api/tutorials/developer-quickstart) guide. This will\ngive you an overview of how to authenticate and make requests using our APIs.\n\n## Authentication\n\nThe Cvent REST API uses [OAuth2](https://oauth.net/2/) to authorize requests to the platform. The client\ncredentials authorization flow is supported.\n\n<a name=\"oauth2-auth-code-planner-admin\"></a>\n\nAuthorization code flow is only supported for planner users with the administrator role in Cvent. Developer users\ncannot use authorization code flow.\n\n<!-- ReDoc-Inject: <security-definitions> -->\n\nHere's an example of using client credential flow to authorize. You'll supply your application's id and secret to\nmake a [Token](#operation/oauth2Token) request.\n\n```bash\ncurl --location --request POST '{hostName}/{version}/oauth2/token' \\\n--header 'Content-Type: application/x-www-form-urlencoded' \\\n--header 'Authorization: Basic {api_credentials}' \\\n--data-urlencode 'grant_type=client_credentials' \\\n--data-urlencode 'client_id={client_id}'\n```\n\n| Key | Description | Value |\n| :---------------- | :--------------------------------------------------- | :----------------------------------------------------------------------------------------------------------- |\n| {hostName} | https://api-platform.cvent.com | Location if your account is in the North American datacenter. |\n| | https://api-platform-eur.cvent.com | Location if your account is in the European data center. |\n| {version} | ea | The version of the API you're using. Only `ea` is currently supported. |\n| {api_credentials} | {client_id}:{client_secret} in base64 encoded format | Supply your client id & client credentials in a base 64 encoded format. |\n| {client_id} | Retrieved from your application | Your application's client id. |\n| {client_secret} | Retrieved from your application | Your application's client secret. |\n\nOn a successful call, you'll receive the following response:\n\n```json\n{\n \"access_token\": \"{accessToken}\",\n \"expires_in\": 3600,\n \"token_type\": \"Bearer\"\n}\n```\n\nThis bearer token is valid for 3600 seconds (60 minutes) and must be used in subsequent calls.\n\n## Endpoints\n\nEndpoints start with `hostName` and `version`.\n\nThe `hostname` will depend on the region that your Cvent account is hosted in. Please see the table\nbelow to identify which hostname you should be using.\n\n| Region |\tHostname |\n|:--------------|:-----------------------------------|\n| North America\t| https://api-platform.cvent.com |\n| Europe | https://api-platform-eur.cvent.com |\n\nThe current `version` of the Cvent API is `ea`.\n\n## Rate Limits\n\nCvent APIs enforce rate limits to ensure platform stability. Your limits depend on your tier: Free,\nStandard, or Premium.\n\n<br />\n\n### Usage Tiers\n\n| Tier | Daily Calls | Calls per Second | Max Burst |\n| -------- | ----------- | ---------------- | --------- |\n| Free | 1,000 | 2 | 1 |\n| Standard | 15,000 | 10 | 10 |\n| Premium | 500,000 | 25 | 25 |\n\n- **Daily calls** define how many requests you can make in a 24-hour period. Quota\n resets at 12 midnight (+0 GMT).\n- **Calls per second** define how many requests you can make in a 1-second window.\n- **Max Burst** defines how many requests you can make at once.\n\nIf you are unsure what usage tier applies to your account, you can check via\n[Get Current Usage Tier](#operation/getUsageTier).\n\nPlease note that these limits may change as the Cvent API Platform evolves.\n\n<br />\n\n### Handling Rate Limits\n\nSometimes, you may exceed your rate limits. When this happens, the API will return a `429 Too Many Requests`. See\n[handling rate limits](https://developers.cvent.com/docs/rest-api/guides/handling-rate-limits) for best practices on how to handle this.\n\n## Pagination\n\nSome APIs use pagination to manage records. Each page of records has a token associated to identify it.\n\nIf an API uses pagination, you’ll find up to three tokens in the response:\n- **currentToken**: Describes the token of the current page.\n- **nextToken**: Provides a token for the next page of records, if one exists.\n- **previousToken**: Provides a token for the previous page of records, if one exists. Not all APIs will return\n this token.\n\nYou specify which page of records to view via the `token` parameter in your API call. To navigate through pages,\ntake the `nextToken` or `previousToken` value and pass it to your next call’s `token` parameter to get the\nrespective page of records. For example, if you made this request:\n\n```bash\ncurl -X GET {hostname}/{version}/contacts?limit=100 \\\n-H 'Accept: application/json' \\\n-H 'Authorization: Bearer {accessToken}'\n```\n\nThe response contains a paging array where you'll find the token information.\n\n```json\n{\n \"paging\": {\n \"currentToken\": \"90c5f062-76ad-4ea4-aa53-00eb698d9262\",\n \"nextToken\": \"3b2359a7-4583-40ed-8afd-67e5f15373d3\",\n \"limit\": 100,\n \"totalCount\": 102,\n \"_links\": {...}\n },\n \"data\": [...]\n}\n```\n\nTake the `nextToken` and use it in the `token` parameter on your subsequent call.\n\n```bash\ncurl -X GET {hostname}/{version}/contacts?limit=100&token=3b2359a7-4583-40ed-8afd-67e5f15373d3 \\\n-H 'Accept: application/json' \\\n-H 'Authorization: Bearer {accessToken}'\n```\n\nWhen the response doesn’t contain a `nextToken` field, you’ve reached the last page. Occasionally, you might\nencounter an empty page at the end of results. This typically happens when the results were evenly divisible.\nEnsure your client code handles the possibility of receiving an empty data array when using the `nextToken`.\n\n## Filtering\n\nUse filters to narrow down results. The filter follows the pattern\n`filter='field' comparisonType 'value'`. The value can be enclosed with single\nquotes (') or double quotes (\").\n\n```bash\nGET {hostName}/{version}/contacts?filter=lastName eq 'Smith'\n````\n\nTo correctly pass a single quote in the filter's value, use double quotes around\nthe string.\n\n```bash\nGET {hostName}/{version}/contacts?filter=lastName eq \"O'Keenan\"\n```\n\nTo correctly pass a double quote in the filter's value, use double quotes around\nthe string and add an escape character `\\` to each quote that is part of the\nstring.\n\n```bash\nGET {hostName}/{version}/events?filter=eventName eq \"\\\"Yearly\\\" Conference\"\n```\n\n## Versioning\n\nChange is inevitable in API development. Planning for it is crucial. We track\nboth backward-compatible and backward-incompatible changes.\n\n<br />\n\n### Backward Compatible Changes\n\nBackward compatible changes will be made often and are intended to avoid\nany adverse impact on our customers. It is highly advisable that when reading\nJSON payloads from Cvent, you are able to handle \"unknown\" attributes that\ncan be added over time. We consider the following changes backward-compatible:\n\n- Adding new resources\n- Adding new optional request parameters to existing operations\n- Adding new attributes to requests or responses\n- Changing the length or format (not type) of resource identifiers. For example, an ID can change from\n \"1234/1234\" to \"1234::1234\".\n- Increasing the length of string fields\n\n<br />\n\n### Backward Incompatible Changes\n\nBackward-incompatible changes are made infrequently, however, they can be\ndisruptive to consumers. Due to this, our APIs are versioned to avoid\ndisruptions to customers. We leverage a URI-based versioning scheme,\nwhich means that a version value is included in the Cvent API URL.\nWhen breaking changes occur, a new version of the API is made available\nwhile the existing version is deprecated but remains available for a\nlimited period of time. We consider the following backward-incompatible changes:\n\n- Adding a new required parameter (query string param or payload attribute)\n- Deleting API resources\n- Deleting any attribute from API responses\n- Changing the data type on any parameter or attribute\n\n## Standards\nAs you begin working with our APIs, it's essential to be aware of standards around\ncountry codes, time formats, and other important details that ensure smooth integration.\nLearn more about our [API Standards](https://developers.cvent.com/docs/rest-api/reference/api-standards)\n"
contact:
name: Cvent Development Platform
url: https://developers.cvent.com/
version: ea
servers:
- url: https://api-platform.cvent.com/ea
- url: https://api-platform-eur.cvent.com/ea
tags:
- name: Compliance
description: 'These API''s provide compliance support for regulated industries.
**Communication Compliance** lets you view communication activities across your account.
Various written forms of communication are captured. For example, emails, SMS, chat messages, or push notifications
can be downloaded for archival or analysis.
'
paths:
/logs/communications/configuration:
get:
summary: 'Get Communication Config
'
description: 'Gets communication compliance configuration for an account. For example, gets the communication types enabled for an account.
'
operationId: getConfiguration
tags:
- Compliance
security:
- OAuth2.clientCredentials:
- compliance/communications:read
- OAuth2.authorizationCode:
- compliance/communications:read
responses:
'200':
description: Successfully retrieved the compliance configuration for the account
content:
application/json:
schema:
$ref: '#/components/schemas/CommunicationConfiguration'
'400':
$ref: '#/components/responses/BadRequest1'
'401':
$ref: '#/components/responses/Unauthorized1'
'403':
$ref: '#/components/responses/Forbidden1'
'429':
$ref: '#/components/responses/TooManyRequests1'
externalDocs:
description: More about OAuth2 authorization code support for administrators
url: '#oauth2-auth-code-planner-admin'
put:
summary: 'Update Communication Config
'
description: 'Update the communication compliance configuration for an account. For example, configure which communication types will be recorded in the communication log.
'
operationId: updateConfiguration
tags:
- Compliance
security:
- OAuth2.clientCredentials:
- compliance/communications:write
- OAuth2.authorizationCode:
- compliance/communications:write
requestBody:
description: 'Communication compliance configuration. For example, the list of communication types to be recorded in the communication log.
'
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommunicationConfiguration'
responses:
'200':
description: Successfully updated the compliance configuration for the account.
content:
application/json:
schema:
$ref: '#/components/schemas/CommunicationConfiguration'
'201':
description: Successfully inserted the compliance configuration for the account
content:
application/json:
schema:
$ref: '#/components/schemas/CommunicationConfiguration'
'400':
$ref: '#/components/responses/BadRequest1'
'401':
$ref: '#/components/responses/Unauthorized1'
'403':
$ref: '#/components/responses/Forbidden1'
'429':
$ref: '#/components/responses/TooManyRequests1'
externalDocs:
description: More about OAuth2 authorization code support for administrators
url: '#oauth2-auth-code-planner-admin'
/logs/communications/messages:
get:
summary: 'List Communication
'
description: "Gets a paginated list of communication log messages from your account. The filter is not required. If no filter\nis provided then the API will return communication log messages of all types between the specified dates.\n\nSupported types are:\n\n * email\n * chat\n * session_qa\n"
operationId: getCommunicationLogMessages
parameters:
- $ref: '#/components/parameters/after'
- $ref: '#/components/parameters/before'
- $ref: '#/components/parameters/limit2'
- $ref: '#/components/parameters/token'
- name: filter
in: query
required: false
schema:
type: string
example: type eq 'email'
description: 'A filter query string narrows search results results and supports the combination of logical and comparison operators.
The filter adheres to the pattern filter=''field'' comparisonType ''value''.
There is one comparison type that can be used in filter expressions:
* equal: eq
The following fields are filterable:
* type (eq)
'
tags:
- Compliance
security:
- OAuth2.clientCredentials:
- compliance/communications:read
- OAuth2.authorizationCode:
- compliance/communications:read
responses:
'200':
description: Successfully retrieved a paginated list of communication log messages.
content:
application/json:
schema:
$ref: '#/components/schemas/CommunicationLogMessagePaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest1'
'401':
$ref: '#/components/responses/Unauthorized1'
'403':
$ref: '#/components/responses/Forbidden1'
'429':
$ref: '#/components/responses/TooManyRequests1'
externalDocs:
description: More about OAuth2 authorization code support for administrators
url: '#oauth2-auth-code-planner-admin'
/logs/communications/messages/filter:
post:
summary: 'List Communication
'
description: "Gets a paginated list of communication log messages from your account. The filter in the request body is not required. If no filter\nis provided then the API will return communication log messages of all types between the specified dates.\n\nSupported types are:\n\n * email\n * chat\n * session_qa\n"
operationId: filterCommunicationLogMessages
parameters:
- $ref: '#/components/parameters/after'
- $ref: '#/components/parameters/before'
- $ref: '#/components/parameters/limit2'
- $ref: '#/components/parameters/token'
tags:
- Compliance
security:
- OAuth2.clientCredentials:
- compliance/communications:read
- OAuth2.authorizationCode:
- compliance/communications:read
requestBody:
description: "A filter string passed in the body of the request, narrows search results and supports the combination of logical and comparison operators.\nThe filter adheres to the pattern filter='field' comparisonType 'value'.\n\nThere is one comparison type that can be used in filter expressions:\n * equal: eq\n\nThe following fields are filterable:\n * type (eq)\n"
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/filter'
example:
filter: type eq 'email'
responses:
'200':
description: Successfully retrieved a paginated list of communication log messages.
content:
application/json:
schema:
$ref: '#/components/schemas/CommunicationLogMessagePaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest1'
'401':
$ref: '#/components/responses/Unauthorized1'
'403':
$ref: '#/components/responses/Forbidden1'
'429':
$ref: '#/components/responses/TooManyRequests1'
externalDocs:
description: More about OAuth2 authorization code support for administrators
url: '#oauth2-auth-code-planner-admin'
components:
schemas:
chat-message-details.json:
title: ChatMessageDetails
description: Chat message details such as the ID of this message
required:
- id
properties:
id:
type: string
description: The message ID within the messaging system.
example: 6dc0fe3d-4d1c-4bc6-af22-7d9126388388
textHtml:
type: string
description: The HTML content of the chat message.
example: Great presentation today!
attachment.json1:
title: Attachment
description: A message attachment.
type: object
required:
- link
properties:
link:
description: A link to the attachment allowing it to be downloaded
type: string
format: uri
example: https://foo.com/a/picture/of/a/cat.jpg
paging.json:
title: Paging
required:
- _links
type: object
description: Represents pagination information for a collection of resources.
properties:
previousToken:
type: string
description: The pagination token for the previous page, if one exists. You can use this token to navigate to the previous page of data.
example: 1a2b3c4d5e6f7g8h9i10j11k
nextToken:
type: string
description: The pagination token for the next page. If this value is present in the response, there is another page of data you can fetch.
example: 1a2b3c4d5e6f7g8h9i10j11k
currentToken:
type: string
description: The pagination token for the current page.
example: 1a2b3c4d5e6f7g8h9i10j11k
limit:
type: integer
description: The number of records to return on the page. Not to exceed 200.
example: 100
totalCount:
type: integer
description: The total number of records available. This field may return blank, even if there are more records. To confirm if there are more records, check the `nextToken` field.
example: 2
_links:
$ref: '#/components/schemas/pagination-links.json'
link.json:
title: Link
required:
- href
type: object
description: Represents a link to a related resource.
properties:
href:
type: string
description: A url provided that can be followed for linking
example: ?token=90c5f062-76ad-4ea4-aa53-00eb698d9262
chat-type.json:
type: string
description: The chat type
enum:
- session
- exhibitor
- discussion
- attendee
- group
example: session
ErrorResponse:
title: ErrorResponse
description: Represents an error response with additional details of cascading error messages.
allOf:
- $ref: '#/components/schemas/ErrorResponseBase'
type: object
required:
- code
- message
properties:
details:
type: array
items:
$ref: '#/components/schemas/ErrorResponseBase'
description: Additional details of cascading error messages.
CommunicationLogMessagePaginatedResponse:
title: CommunicationLogMessagePaginatedResponse
description: A single page of communication log messages
required:
- data
- paging
type: object
properties:
paging:
$ref: '#/components/schemas/paging.json'
data:
type: array
items:
$ref: '#/components/schemas/communication-log-message.json'
description: Collection of communication log messages.
channel.json:
title: Channel
description: The channel details associated with the chat.
required:
- id
properties:
id:
type: string
description: The channel ID associated with the chat.
example: '!members-l_YMstmzbS4lmlS0rQ3XexWJSdQwyEfsCHP1zrSd4uM'
ErrorResponseBase:
title: ErrorResponseBase
type: object
description: Represents an error response with no additional details.
required:
- code
- message
properties:
code:
type: integer
description: The HTTP status code representing the error.
example: 400
message:
type: string
description: A brief description of the error.
example: Bad Request
target:
type: string
description: The target resource of the error.
example: example target
question.json:
title: Question
description: Question details
required:
- id
properties:
id:
type: string
description: The question ID.
format: uuid
example: 2385098a-ab4e-4e06-b3b7-487cad288587
text:
type: string
description: The question text.
example: Sample question?
status:
type: string
description: The status of the question.
example: approved
anonymous:
type: boolean
description: Whether question is asked anonymously.
example: true
answer:
type: string
description: The answer text.
example: Sample answer.
filter:
title: A filter sent in the body of a request
description: A filter which is sent through the body of the request.
type: object
properties:
filter:
type: string
example: property eq 'value'
description: Filter included in the request.
attendee.json:
title: Attendee
description: Attendee details
required:
- id
properties:
id:
type: string
description: A Cvent attendee.
format: uuid
example: 6dc0fe3d-4d1c-4bc6-af22-7d9126388388
communication-log-message.json:
title: CommunicationLogMessage
description: A communication log message.
type: object
required:
- id
- type
- created
- message
properties:
id:
type: string
format: uuid
description: The unique ID of the communication log message.
example: ed36e3de-7b34-4c38-91f6-ecb9c24a3dcd
readOnly: true
type:
$ref: '#/components/schemas/communication-log-message-type.json'
created:
example: '2019-07-15T09:00:39Z'
type: string
format: date-time
description: The ISO 8601 zoned date time when this record was created.
readOnly: true
tags:
type: object
description: Key/value pairs used for searching/filtering messages.
additionalProperties:
type: string
example:
eventId: 11111111-0dc3-487b-953e-86d6abbdf7d3
message:
description: An object that contains the message itself or a link to the message allowing it to be downloaded
type: object
oneOf:
- title: EmailMessage
description: An email message
allOf:
- title: Message
description: The communication message.
type: object
required:
- link
properties:
link:
description: A link to a stored email message.
type: string
format: uri
example: https://compliance.cvent.com/link/to/an/email
- title: ChatMessage
description: A chat message
allOf:
- $ref: '#/components/schemas/communication-log-message.json/properties/message/oneOf/0/allOf/0'
type: object
required:
- actionType
- attendee
- chatType
- message
properties:
actionType:
$ref: '#/components/schemas/chat-action-type.json'
chatType:
$ref: '#/components/schemas/chat-type.json'
attendee:
$ref: '#/components/schemas/attendee.json'
message:
$ref: '#/components/schemas/chat-message-details.json'
parentMessage:
$ref: '#/components/schemas/chat-message-details.json'
reaction:
$ref: '#/components/schemas/chat-reaction.json'
channel:
$ref: '#/components/schemas/channel.json'
- title: SessionQaMessage
description: A session question answer message
allOf:
- $ref: '#/components/schemas/communication-log-message.json/properties/message/oneOf/0/allOf/0'
required:
- actionType
- attendee
- question
properties:
actionType:
$ref: '#/components/schemas/session-qa-action-type.json'
attendee:
$ref: '#/components/schemas/attendee.json'
question:
$ref: '#/components/schemas/question.json'
attachments:
type: array
description: A collection of attachments that are associated with this message.
items:
$ref: '#/components/schemas/attachment.json1'
communication-log-message-type.json:
title: Communication log messsage type
description: The type of communication log message.
type: string
enum:
- email
- chat
- session_qa
chat-reaction.json:
title: ChatReaction
description: A reaction to a message
required:
- type
properties:
type:
type: string
description: The reaction type if the action type was one of the reaction.created or reaction.deleted.
example: lol
chat-action-type.json:
type: string
description: The user action that just occurred
enum:
- message.created
- message.updated
- message.deleted
- reaction.created
- reaction.deleted
example: message.created
session-qa-action-type.json:
type: string
description: "The user action that just occurred.\n `question.asked` - A question was asked.\n `question.upvoted` - A question was upvoted.\n `question.statusUpdated` - The status of a question was updated.\n `question.answered` - Either question was answered or the earlier provided answer was updated.\n `answer.deleted` - An answer was deleted."
enum:
- question.asked
- question.upvoted
- question.statusUpdated
- question.answered
- answer.deleted
example: question.asked
pagination-links.json:
title: PaginationLinks
type: object
description: Represents pagination links for navigating between pages of data.
properties:
next:
$ref: '#/components/schemas/link.json'
self:
$ref: '#/components/schemas/link.json'
prev:
$ref: '#/components/schemas/link.json'
CommunicationConfiguration:
title: CommunicationConfiguration
required:
- enabledMessageTypes
description: Communication compliance settings e.g. Configure which communication types will be tracked and logged for this account.
type: object
properties:
enabledMessageTypes:
type: array
items:
$ref: '#/components/schemas/communication-log-message-type.json'
uniqueItems: true
description: The list of message types that communication compliance is enabled for.
responses:
TooManyRequests1:
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
code: 429
message: Limit Exceeded
Unauthorized1:
description: Bad or expired token
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
code: 401
message: Unauthorized
Forbidden1:
description: You do not have access to the resource
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
code: 403
message: Access Forbidden
BadRequest1:
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
code: 400
message: Bad Request
parameters:
before:
name: before
required: false
in: query
description: Used to query records that have been added or updated before this time point.
schema:
type: string
format: date-time
example: '2017-01-02T02:00:00Z'
limit2:
in: query
name: limit
description: The maximum number of records to return per page.
schema:
type: integer
default: 100
minimum: 1
maximum: 100
example: 100
token:
name: token
in: query
description: 'The continuation token returned from a previous class. This must be a valid UUID v4 if provided.
This will override any other pageable parameters provided.
'
style: form
explode: true
schema:
type: string
example: 0e28af57-511f-47ab-ae46-46cd1ca51a1a
after:
name: after
required: false
description: Used to query records that have been added or updated after this time point. Default to the beginning of time of the data store.
in: query
schema:
type: string
format: date-time
example: '2017-01-02T02:00:00Z'
securitySchemes:
OAuth2.authorizationCode:
type: oauth2
description: OAuth2 Authorization Code Flow.
flows:
authorizationCode:
authorizationUrl: https://api-platform.cvent.com/ea/oauth2/authorize
tokenUrl: https://api-platform.cvent.com/ea/oauth2/token
scopes:
account/hooks:delete: Allows the deletion of hooks.
account/hooks:read: Allows the reading of hooks.
account/hooks:write: Allows the creation/updation of hooks.
account/user-groups:delete: Allows deletion for user groups
account/user-groups:read: Allows the reading of user groups
account/user-groups:write: Allows the writing of user groups
account/users:delete: Allows the deletion of User
account/users:read: All
# --- truncated at 32 KB (68 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cvent-event-cloud/refs/heads/main/openapi/cvent-event-cloud-compliance-api-openapi.yml