Cvent Event Cloud Discounts API

Discounts provide a way to reduce the cost of event registration items. Use these APIs to manage event discounts, including creating, updating, and linking discounts to agenda items.

OpenAPI Specification

cvent-event-cloud-discounts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cvent REST APIs — Event Cloud Discounts 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: Discounts
  description: Discounts provide a way to reduce the cost of event registration items. Use these APIs to manage event discounts, including creating, updating, and linking discounts to agenda items.
paths:
  /events/{id}/discounts:
    get:
      summary: List Event Discounts
      operationId: listEventDiscounts
      tags:
      - Discounts
      security:
      - OAuth2.clientCredentials:
        - event/event-discounts:read
      - OAuth2.authorizationCode:
        - event/event-discounts:read
      description: 'Returns a paginated list of all discounts used in an event, including both event-specific and account-level discount codes used in an event.

        '
      parameters:
      - $ref: '#/components/parameters/eventId2'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/token'
      - $ref: '#/components/parameters/discountSort'
      - $ref: '#/components/parameters/discountFilter'
      - $ref: '#/components/parameters/before'
      - $ref: '#/components/parameters/after'
      responses:
        '200':
          description: Successfully retrieved a paginated list of discounts.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/existing-discount-paginated-response'
        '400':
          $ref: '#/components/responses/BadRequest1'
        '401':
          $ref: '#/components/responses/Unauthorized1'
        '403':
          $ref: '#/components/responses/Forbidden1'
        '404':
          $ref: '#/components/responses/NotFound1'
        '429':
          $ref: '#/components/responses/TooManyRequests1'
      deprecated: false
    post:
      summary: Create Event Discount
      operationId: createEventDiscount
      tags:
      - Discounts
      security:
      - OAuth2.clientCredentials:
        - event/event-discounts:write
      - OAuth2.authorizationCode:
        - event/event-discounts:write
      description: 'Create discount in an event.

        '
      parameters:
      - $ref: '#/components/parameters/eventId2'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create-update-discount'
        required: true
      responses:
        '201':
          description: Discount created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/create-update-discount-response'
        '400':
          $ref: '#/components/responses/BadRequest1'
        '401':
          $ref: '#/components/responses/Unauthorized1'
        '403':
          $ref: '#/components/responses/Forbidden1'
        '404':
          $ref: '#/components/responses/NotFound1'
        '429':
          $ref: '#/components/responses/TooManyRequests1'
      deprecated: false
  /events/{id}/discounts/agenda-items:
    get:
      summary: List Discounted Agenda Items
      operationId: listDiscountedAgendaItems
      tags:
      - Discounts
      security:
      - OAuth2.clientCredentials:
        - event/event-discounts:read
      - OAuth2.authorizationCode:
        - event/event-discounts:read
      description: 'Returns a paginated list of agenda items that are associated with discounts for the specified event.  This endpoint helps identify which agenda items (such as admission items, sessions, session bundles, membership-items or quantity-items) are currently associated with discounts.

        '
      parameters:
      - $ref: '#/components/parameters/eventId2'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/token'
      - $ref: '#/components/parameters/discountAgendaItemFilter'
      responses:
        '200':
          description: Successfully retrieved a paginated list of agenda items that are associated with discounts in the event.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/discount-agenda-items-paginated-response'
        '400':
          $ref: '#/components/responses/BadRequest1'
        '401':
          $ref: '#/components/responses/Unauthorized1'
        '403':
          $ref: '#/components/responses/Forbidden1'
        '404':
          $ref: '#/components/responses/NotFound1'
        '429':
          $ref: '#/components/responses/TooManyRequests1'
      deprecated: false
  /events/{id}/discounts/{discountId}:
    put:
      summary: Update Event Discount
      operationId: updateEventDiscount
      tags:
      - Discounts
      security:
      - OAuth2.clientCredentials:
        - event/event-discounts:write
      - OAuth2.authorizationCode:
        - event/event-discounts:write
      description: 'Update a discount in an event based on details in the request body. Fields not included in the request will revert to their default value.

        '
      parameters:
      - $ref: '#/components/parameters/eventId2'
      - $ref: '#/components/parameters/discountId'
      requestBody:
        description: Discount to be updated.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create-update-discount'
      responses:
        '200':
          description: Successfully updated the discount in the event.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/create-update-discount-response'
        '400':
          $ref: '#/components/responses/BadRequest1'
        '401':
          $ref: '#/components/responses/Unauthorized1'
        '403':
          $ref: '#/components/responses/Forbidden1'
        '404':
          $ref: '#/components/responses/NotFound1'
        '429':
          $ref: '#/components/responses/TooManyRequests1'
  /events/{id}/discounts/{discountId}/agenda-items/{agendaItemId}:
    parameters:
    - $ref: '#/components/parameters/eventId2'
    - $ref: '#/components/parameters/discountId'
    - $ref: '#/components/parameters/agendaItemId1'
    put:
      summary: Link Agenda Item to Discount
      description: Links an agenda item to a given event discount.
      operationId: linkAgendaItemToDiscount
      tags:
      - Discounts
      security:
      - OAuth2.clientCredentials:
        - event/event-discounts:write
      - OAuth2.authorizationCode:
        - event/event-discounts:write
      responses:
        '204':
          description: Successfully linked an agenda item to an event discount.
          headers: {}
        '400':
          $ref: '#/components/responses/BadRequest1'
        '401':
          $ref: '#/components/responses/Unauthorized1'
        '403':
          $ref: '#/components/responses/Forbidden1'
        '404':
          $ref: '#/components/responses/NotFound1'
        '429':
          $ref: '#/components/responses/TooManyRequests1'
      deprecated: false
    delete:
      summary: Unlink Agenda Item Discount
      description: Unlinks an agenda item from a given event discount.
      operationId: unlinkAgendaItemFromDiscount
      tags:
      - Discounts
      security:
      - OAuth2.clientCredentials:
        - event/event-discounts:write
      - OAuth2.authorizationCode:
        - event/event-discounts:write
      responses:
        '204':
          description: Successfully unlinked an agenda item from an event discount.
          headers: {}
        '400':
          $ref: '#/components/responses/BadRequest1'
        '401':
          $ref: '#/components/responses/Unauthorized1'
        '403':
          $ref: '#/components/responses/Forbidden1'
        '404':
          $ref: '#/components/responses/NotFound1'
        '429':
          $ref: '#/components/responses/TooManyRequests1'
      deprecated: false
components:
  schemas:
    UUIDProperty:
      title: UUID Property
      description: A string that has to be a format matching the industry standard uuid
      type: string
      format: uuid
      example: 04ca6ae2-0dc3-487b-953e-86d6abbdf7d3
    ExistingDiscountCode:
      title: Existing Discount Code
      description: Representation of an existing discount code.
      required:
      - type
      type: object
      allOf:
      - $ref: '#/components/schemas/DiscountCode'
      properties:
        type:
          type: string
          description: 'The type of discount. For account-level discounts, all discounts are of type DISCOUNT_CODE. `DISCOUNT_CODE`: A code the user or system applies to induce a discount. `VOLUME_DISCOUNT`: A discount that applies when a certain volume of items are purchased.'
          enum:
          - DISCOUNT_CODE
          example: DISCOUNT_CODE
        applyToAllEvents:
          type: boolean
          description: True indicates that the discount is applied to all events. this is specific to account level discount.
          example: false
    uuid-property:
      title: UUID Property
      description: A string that has to be a format matching the industry standard uuid
      type: string
      format: uuid
      example: 04ca6ae2-0dc3-487b-953e-86d6abbdf7d3
    DiscountCode:
      title: Discount Code
      description: Representation of a code based discount.
      type: object
      allOf:
      - $ref: '#/components/schemas/DiscountCodeBase'
      properties:
        id:
          type: string
          format: uuid
          description: A unique identifier of the discount.
          example: 04ca6ae2-0dc3-487b-953e-86d6abbdf7d3
          readOnly: true
        level:
          type: string
          description: Whether the discount is created at event level or account level.
          enum:
          - EVENT
          - ACCOUNT
          example: EVENT
          readOnly: true
        capacity:
          $ref: '#/components/schemas/DiscountCapacity'
    VolumeDiscount:
      title: Volume Discount
      description: Representation of a volume based discount.
      type: object
      required:
      - thresholdLimit
      allOf:
      - $ref: '#/components/schemas/DiscountBase'
      properties:
        thresholdType:
          $ref: '#/components/schemas/VolumeDiscountThresholdType'
        thresholdLimit:
          type: integer
          description: Defines the threshold limit for the volume discount.
          example: 10
        interval:
          type: integer
          description: Defines the interval for the volume discount when threshold type is EVERY_NTH_REGISTRANT. Every Nth registration counting from the threshold receives a discount.
          default: 1
          minimum: 1
          maximum: 10
          example: 1
        includePrimaryRegistrant:
          type: boolean
          description: True indicates if the primary registrant is included in evaluating if threshold is met for the volume discount when threshold type is BEFORE_THRESHOLD_LIMIT.
          default: false
          example: true
    Audit:
      title: Audit
      description: Audit information
      type: object
      properties:
        created:
          type: string
          format: date-time
          description: The ISO 8601 zoned date time when this record was created.
          readOnly: true
          example: '2017-01-02T02:00:00Z'
        createdBy:
          type: string
          description: The identifier of the user that created this record.
          readOnly: true
          example: hporter
        lastModified:
          type: string
          format: date-time
          description: The ISO 8601 zoned date time when this record was updated.
          readOnly: true
          example: '2019-02-12T03:00:00Z'
        lastModifiedBy:
          type: string
          description: The identifier of the user that last updated this record.
          readOnly: true
          example: hporter
    PaginationLinks:
      title: PaginationLinks
      type: object
      description: Represents pagination links for navigating between pages of data.
      properties:
        next:
          $ref: '#/components/schemas/Link'
        self:
          $ref: '#/components/schemas/Link'
        prev:
          $ref: '#/components/schemas/Link'
    CreateUpdateVolumeDiscount:
      title: Create Update Volume Discount
      description: Representation of a volume based discount to be created or updated.
      type: object
      required:
      - type
      allOf:
      - $ref: '#/components/schemas/VolumeDiscount'
      properties:
        type:
          type: string
          description: 'The type of discount. For account-level discounts, all discounts are of type DISCOUNT_CODE. `DISCOUNT_CODE`: A code the user or system applies to induce a discount. `VOLUME_DISCOUNT`: A discount that applies when a certain volume of items are purchased.'
          enum:
          - VOLUME_DISCOUNT
          example: VOLUME_DISCOUNT
    DiscountMethodType:
      title: DiscountMethodType
      type: string
      description: 'The method of the discount. All methods use the `value` field to determine the amount discounted. `BY_PERCENTAGE`: Discounts the item by a percentage. `BY_AMOUNT`: Discount the item by a specific amount. `FLAT_PRICE`: Set the price of the item to a specific value.'
      enum:
      - BY_AMOUNT
      - BY_PERCENTAGE
      - FLAT_PRICE
      example: BY_PERCENTAGE
      default: BY_AMOUNT
    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
    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.
    create-update-discount:
      title: Create Update Discount
      description: Representation of an existing discount that can be created or updated for an event.
      type: object
      oneOf:
      - $ref: '#/components/schemas/CreateUpdateDiscountCode'
      - $ref: '#/components/schemas/CreateUpdateVolumeDiscount'
      discriminator:
        propertyName: type
        mapping:
          DISCOUNT_CODE: '#/components/schemas/CreateUpdateDiscountCode'
          VOLUME_DISCOUNT: '#/components/schemas/CreateUpdateVolumeDiscount'
    VolumeDiscountThresholdType:
      title: VolumeDiscountThresholdType
      type: string
      description: 'Specifies who will receive the discount once the threshold for the number of ordered items is met or exceeded, depending on the type. `ALL`: All registrations receive the discount once the threshold is exceeded. `AFTER_THRESHOLD_LIMIT`: Every registration beyond the threshold receives the discount. `BEFORE_THRESHOLD_LIMIT:` Every registration, including those at the threshold, are discounted. Further registrations are at full price. If primaryRegistrant is not included then the first registrant is full price. Every registration afterward, up to and including the threshold, are discounted. Any additional registrations are at full price. `EVERY_NTH_REGISTRANT`: After reaching the threshold, every Nth registration counting from the threshold recieves a discount, where N is defined by the `interval` field.'
      enum:
      - ALL
      - AFTER_THRESHOLD_LIMIT
      - BEFORE_THRESHOLD_LIMIT
      - EVERY_NTH_REGISTRANT
      example: ALL
      default: AFTER_THRESHOLD_LIMIT
    DiscountBase:
      title: Discount Base
      description: Representation of a base discount.
      type: object
      required:
      - name
      - method
      allOf:
      - $ref: '#/components/schemas/Audit'
      properties:
        name:
          type: string
          description: Name of the discount.
          example: 10% off
          maxLength: 50
        active:
          type: boolean
          description: True indicates that the discount is active.
          default: true
          example: true
        stackable:
          type: boolean
          description: True indicates that the discount can be clubbed together with other stackable discounts
          default: true
          example: true
        method:
          $ref: '#/components/schemas/DiscountMethod'
        effectiveFrom:
          type: string
          format: date
          description: The ISO 8601 formatted date from which the discount is effective.
          example: '2025-01-01'
        effectiveTo:
          type: string
          format: date
          description: The ISO 8601 formatted date to which the discount is effective.
          example: '2025-02-01'
        note:
          type: string
          description: Note about the discount.
          example: 10% off for early birds.
          maxLength: 300
    Link:
      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
    DiscountCapacity:
      title: Discount Capacity
      type: object
      description: Details about the discount capacity.
      properties:
        total:
          type: integer
          description: The total number of instances the discount can be used event wide. Default value of -1 indicates unlimited capacity.
          example: 100
        used:
          type: integer
          description: The used capacity of the discount.
          example: 10
    DiscountAudienceType:
      title: DiscountAudienceType
      type: string
      description: 'Audiences which are eligible for the discount.`PRIMARY`: All attendees. Includes primary registrants and their guests. `GUEST`: Any attendee invited to the event. `ALL`: An attendee who''s the guest of a primary registrant.'
      enum:
      - PRIMARY
      - GUEST
      - ALL
      example: ALL
      default: ALL
    CreateUpdateDiscountCodeResponse:
      title: Create Update Discount Code Response
      description: Representation of an existing discount code response.
      type: object
      required:
      - type
      allOf:
      - $ref: '#/components/schemas/DiscountCode'
      properties:
        type:
          type: string
          description: 'The type of discount. For account-level discounts, all discounts are of type DISCOUNT_CODE. `DISCOUNT_CODE`: A code the user or system applies to induce a discount. `VOLUME_DISCOUNT`: A discount that applies when a certain volume of items are purchased.'
          enum:
          - DISCOUNT_CODE
          example: DISCOUNT_CODE
    existing-discount-paginated-response:
      title: Discounts Paginated Response
      required:
      - data
      - paging
      type: object
      description: Returns a paginated list of all discounts used in an event, including both event-specific and account-level discount codes used in an event.
      properties:
        paging:
          $ref: '#/components/schemas/Paging'
        data:
          maxItems: 200
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/ExistingDiscountCode'
            - $ref: '#/components/schemas/ExistingVolumeDiscount'
            discriminator:
              propertyName: type
              mapping:
                DISCOUNT_CODE: '#/components/schemas/ExistingDiscountCode'
                VOLUME_DISCOUNT: '#/components/schemas/ExistingVolumeDiscount'
          description: Collection of discounts.
    create-update-discount-response:
      title: Create Update Discount Response
      description: Representation of an existing discount response
      type: object
      oneOf:
      - $ref: '#/components/schemas/CreateUpdateDiscountCodeResponse'
      - $ref: '#/components/schemas/ExistingVolumeDiscount'
      discriminator:
        propertyName: type
        mapping:
          DISCOUNT_CODE: '#/components/schemas/CreateUpdateDiscountCodeResponse'
          VOLUME_DISCOUNT: '#/components/schemas/ExistingVolumeDiscount'
    AgendaItem1:
      title: Agenda Item
      description: Represents the associated agenda item of a discount.
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: A unique identifier of the agenda item.
          example: 14ca6ae2-0dc3-487b-953e-86d6abbdf6d4
          readOnly: true
        type:
          $ref: '#/components/schemas/EntityType1'
        discount:
          $ref: '#/components/schemas/UUID'
    EntityType1:
      title: Entity Type
      description: Specifies the type of agenda item that a discount is associated with.
      type: string
      format: enum
      enum:
      - AdmissionItem
      - MembershipItem
      - QuantityItem
      - Session
      - SessionBundle
      example: Session
    DiscountCapacityInput:
      title: Discount Capacity Input
      type: object
      description: Details about the discount capacity.
      default:
        total: -1
      properties:
        total:
          type: integer
          description: The total number of instances the discount can be used event wide. Default value of -1 indicates unlimited capacity.
          default: -1
          example: 100
          minimum: -1
          maximum: 32767
    DiscountCodeBase:
      title: Discount Code Base
      description: Base Representation/Model of a discount to be created or updated.
      type: object
      required:
      - code
      allOf:
      - $ref: '#/components/schemas/DiscountBase'
      properties:
        code:
          type: string
          description: Code of the discount.
          example: 10OFF
          maxLength: 30
        au

# --- truncated at 32 KB (80 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cvent-event-cloud/refs/heads/main/openapi/cvent-event-cloud-discounts-api-openapi.yml