Extole User Subscriptions API

The User Subscriptions API from Extole — 3 operation(s) for user subscriptions.

Operations 6

GET /v6/subscriptions List subscriptions #
GET /v6/users/{user_id}/subscriptions List user subscriptions #
POST /v6/users/{user_id}/subscriptions Create a user subscription #
GET /v6/users/{user_id}/subscriptions/{subscription_id} Get a user subscription #
PUT /v6/users/{user_id}/subscriptions/{subscription_id} Update a user subscription #
DELETE /v6/users/{user_id}/subscriptions/{subscription_id} Delete a user subscription #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/extole-user-subscriptions-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

extole-user-subscriptions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Configuration endpoints for the Extole platform: campaigns, components, audiences, persons, rewards, reporting, integrations setup, and administrative tooling.'
  title: Management User Subscriptions API
  version: '1.0'
servers:
- description: Production
  url: https://api.extole.io
security:
- HEADER: []
- QUERY: []
- COOKIE: []
tags:
- name: User Subscriptions
paths:
  /v6/subscriptions:
    get:
      description: Returns all notification subscriptions for the calling client, optionally filtered by tags. Use `having_any_tags` to match subscriptions that have at least one of the specified tags, or `having_all_tags` to match subscriptions that have all specified tags.
      operationId: listSubscriptions
      parameters:
      - in: query
        name: having_any_tags
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: having_all_tags
        schema:
          type:
          - string
          - 'null'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/SubscriptionResponse'
                type: array
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: List subscriptions
      tags:
      - User Subscriptions
      x-extole-bundle: management
      x-extole-visibility: visible
  /v6/users/{user_id}/subscriptions:
    get:
      description: Returns all notification subscriptions for the specified Extole user. Subscriptions define which report or alert events the user wants to be notified about and through which channel (email, Slack, webhook).
      operationId: listUserSubscriptions
      parameters:
      - description: The unique identifier of this user at Extole.
        in: path
        name: user_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/UserSubscriptionResponse'
                type: array
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                invalid_user_id:
                  $ref: '#/components/examples/invalid_user_id'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                invalid_scope:
                  $ref: '#/components/examples/invalid_scope'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: List user subscriptions
      tags:
      - User Subscriptions
      x-extole-bundle: management
      x-extole-visibility: visible
    post:
      description: Creates a new notification subscription for the specified user. The request body specifies the event type to subscribe to and the delivery channel (email, Slack, or webhook). Returns the created subscription.
      operationId: createUserSubscription
      parameters:
      - description: The unique identifier of this user at Extole.
        in: path
        name: user_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            example:
              channels:
              - type: EMAIL
              dedupe_duration_ms: 1
              filter_expression: true
              filtering_level: ALL
              having_all_tags:
              - having_all_tag
            schema:
              $ref: '#/components/schemas/UserSubscriptionRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserSubscriptionResponse'
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                handlebars_expression_invalid_syntax:
                  $ref: '#/components/examples/handlebars_expression_invalid_syntax'
                invalid_channel_types_for_zero_dedupe_duration:
                  $ref: '#/components/examples/invalid_channel_types_for_zero_dedupe_duration'
                invalid_dedupe_duration:
                  $ref: '#/components/examples/invalid_dedupe_duration'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                invalid_recipient:
                  $ref: '#/components/examples/invalid_recipient'
                invalid_tags:
                  $ref: '#/components/examples/invalid_tags'
                invalid_user_id:
                  $ref: '#/components/examples/invalid_user_id'
                invalid_webhook_type:
                  $ref: '#/components/examples/invalid_webhook_type'
                javascript_expression_invalid_syntax:
                  $ref: '#/components/examples/javascript_expression_invalid_syntax'
                missing_recipient:
                  $ref: '#/components/examples/missing_recipient'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
                recipient_is_existing_user:
                  $ref: '#/components/examples/recipient_is_existing_user'
                spel_expression_invalid_syntax:
                  $ref: '#/components/examples/spel_expression_invalid_syntax'
                user_subscription_channel_malformed_webhook_url:
                  $ref: '#/components/examples/user_subscription_channel_malformed_webhook_url'
                user_subscription_channel_missing_slack_webhook_url:
                  $ref: '#/components/examples/user_subscription_channel_missing_slack_webhook_url'
                webhook_not_found:
                  $ref: '#/components/examples/webhook_not_found'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                duplicate_user_subscription:
                  $ref: '#/components/examples/duplicate_user_subscription'
                invalid_scope:
                  $ref: '#/components/examples/invalid_scope'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Create a user subscription
      tags:
      - User Subscriptions
      x-extole-bundle: management
      x-extole-visibility: visible
  /v6/users/{user_id}/subscriptions/{subscription_id}:
    get:
      description: Returns the specified notification subscription for the given user. Returns `400 invalid_subscription_id` if the subscription does not exist.
      operationId: getUserSubscription
      parameters:
      - description: The unique identifier of this user at Extole.
        in: path
        name: user_id
        required: true
        schema:
          type: string
      - in: path
        name: subscription_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserSubscriptionResponse'
          description: User subscription.
        '400':
          content:
            application/json:
              examples:
                invalid_subscription_id:
                  $ref: '#/components/examples/invalid_subscription_id'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Subscription was not found. The supplied id does not match any subscription for the given user.
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                invalid_scope:
                  $ref: '#/components/examples/invalid_scope'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Get a user subscription
      tags:
      - User Subscriptions
      x-extole-bundle: management
      x-extole-visibility: visible
    put:
      description: Updates the specified notification subscription for the given user. Returns `400 invalid_subscription_id` if the subscription does not exist.
      operationId: updateUserSubscription
      parameters:
      - description: The unique identifier of this user at Extole.
        in: path
        name: user_id
        required: true
        schema:
          type: string
      - in: path
        name: subscription_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            example:
              channels:
              - type: EMAIL
              dedupe_duration_ms: 1
              filter_expression: true
              filtering_level: ALL
              having_all_tags:
              - having_all_tag
            schema:
              $ref: '#/components/schemas/UserSubscriptionUpdateRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserSubscriptionResponse'
          description: Updated user subscription.
        '400':
          content:
            application/json:
              examples:
                invalid_subscription_id:
                  $ref: '#/components/examples/invalid_subscription_id'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Subscription was not found. The supplied id does not match any subscription for the given user.
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                duplicate_user_subscription:
                  $ref: '#/components/examples/duplicate_user_subscription'
                invalid_scope:
                  $ref: '#/components/examples/invalid_scope'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Update a user subscription
      tags:
      - User Subscriptions
      x-extole-bundle: management
      x-extole-visibility: visible
    delete:
      description: Permanently deletes the specified notification subscription. The user will no longer receive notifications for the subscribed event type via that channel. Returns `400 invalid_subscription_id` if the subscription does not exist.
      operationId: deleteUserSubscription
      parameters:
      - description: The unique identifier of this user at Extole.
        in: path
        name: user_id
        required: true
        schema:
          type: string
      - in: path
        name: subscription_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
          description: User subscription deleted.
        '400':
          content:
            application/json:
              examples:
                invalid_subscription_id:
                  $ref: '#/components/examples/invalid_subscription_id'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Subscription was not found. The supplied id does not match any subscription for the given user.
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                invalid_scope:
                  $ref: '#/components/examples/invalid_scope'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Delete a user subscription
      tags:
      - User Subscriptions
      x-extole-bundle: management
      x-extole-visibility: visible
components:
  schemas:
    FilterExpressionInUserSubscriptionRequest:
      description: Choose between static or dynamic filter expression
      oneOf:
      - description: Static filter expression
        title: Static Value
        type: boolean
      - description: Handlebars expression with [UserSubscriptionFilterContext](https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/notification/subscription/UserSubscriptionFilterContext.d.ts).
        example: handlebars@runtime:{{filterExpression}}
        externalDocs:
          description: UserSubscriptionFilterContext
          url: https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/notification/subscription/UserSubscriptionFilterContext.d.ts
        pattern: ^handlebars@runtime:.*
        title: Runtime - Handlebars
        type: string
      - description: Javascript expression with [UserSubscriptionFilterContext](https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/notification/subscription/UserSubscriptionFilterContext.d.ts).
        example: javascript@runtime:function() { return context.get('filterExpression');}
        externalDocs:
          description: UserSubscriptionFilterContext
          url: https://github.com/extole/extole-specification/blob/main/openapi/expression-context/com/extole/api/notification/subscription/UserSubscriptionFilterContext.d.ts
        pattern: ^javascript@runtime:.*
        title: Runtime - Javascript
        type: string
    SubscriptionChannelRequestBase:
      properties:
        type:
          enum:
          - EMAIL
          - EXTOLE_CLIENT_SLACK
          - SLACK
          - THIRD_PARTY_EMAIL
          - WEBHOOK
          type: string
      type: object
    UserSubscriptionUpdateRequest:
      description: Body of a `PUT /v6/users/{user_id}/subscriptions/{subscription_id}` request.
      properties:
        channels:
          items:
            $ref: '#/components/schemas/SubscriptionChannelRequest'
          type: array
        dedupe_duration_ms:
          format: int64
          type: integer
        filter_expression:
          $ref: '#/components/schemas/FilterExpressionInUserSubscriptionUpdateRequest'
        filtering_level:
          enum:
          - ALL
          - NONE
          - NOTEWORTHY
          - SOME
          type: string
        having_all_tags:
          items:
            type: string
          type: array
          uniqueItems: true
      type: object
    UserSubscriptionResponse:
      properties:
        channels:
          items:
            $ref: '#/components/schemas/SubscriptionChannelResponse'
          type: array
        dedupe_duration_ms:
          format: int64
          type: integer
        filter_expression:
          $ref: '#/components/schemas/FilterExpressionInUserSubscriptionResponse'
        filtering_level:
          enum:
          - ALL
          - NONE
          - NOTEWORTHY
          - SOME
          type: string
        having_all_tags:
          items:
            type: string
          type: array
          uniqueItems: true
        subscription_id:
          type: string
      required:
      - channels
      - dedupe_duration_ms
      - filter_expression
      - filtering_level
      - having_all_tags
      - subscription_id
      type: object
    EmailSubscriptionChannelResponse:
      allOf:
      - $ref: '#/components/schemas/SubscriptionChannelResponseBase'
      - properties:
          id:
            readOnly: true
            type: string
          type:
            enum:
            - EMAIL
            type: string
        type: object
      required:
      - id
      - type
      type: object
    RestExceptionResponse:
      description: Represents the API error response
      properties:
        code:
          description: Specific error code for this error type, documented per endpoint
          type: string
        http_status_code:
          description: HTTP status code that was returned with this error, useful if client get response code
          format: int32
          type: integer
        message:
          description: User readable English description of the error
          type: string
        parameters:
          additionalProperties:
            description: Attributes related to the error, varies be error code, documented per endpoint
            type: object
          description: Attributes related to the error, varies be error code, documented per endpoint
          type: object
        unique_id:
          description: Unique id associated with this error, useful for discussions with Extole
          type: string
      required:
      - code
      - http_status_code
      - message
      - parameters
      - unique_id
      type: object
    SubscriptionChannelRequest:
      discriminator:
        mapping:
          EMAIL: '#/components/schemas/EmailSubscriptionChannelRequest'
          EXTOLE_CLIENT_SLACK: '#/components/schemas/ExtoleClientSlackSubscriptionChannelRequest'
          SLACK: '#/components/schemas/SlackSubscriptionChannelRequest'
          THIRD_PARTY_EMAIL: '#/components/schemas/ThirdPartyEmailSubscriptionChannelRequest'
          WEBHOOK: '#/components/schemas/WebhookSubscriptionChannelRequest'
        propertyName: type
      oneOf:
      - $ref: '#/components/schemas/EmailSubscriptionChannelRequest'
      - $ref: '#/components/schemas/ExtoleClientSlackSubscriptionChannelRequest'
      - $ref: '#/components/schemas/SlackSubscriptionChannelRequest'
      - $ref: '#/components/schemas/ThirdPartyEmailSubscriptionChannelRequest'
      - $ref: '#/components/schemas/WebhookSubscriptionChannelRequest'
    ThirdPartyEmailSubscriptionChannelRequest:
      allOf:
      - $ref: '#/components/schemas/SubscriptionChannelRequestBase'
      - properties:
          recipient:
            type: string
          type:
            enum:
            - THIRD_PARTY_EMAIL
            type: string
        type: object
      required:
      - recipient
      - type
      type: object
    SlackSubscriptionChannelRequest:
      allOf:
      - $ref: '#/components/schemas/SubscriptionChannelRequestBase'
      - properties:
          type:
            enum:
            - SLACK
            type: string
          webhook_url:
            type: string
        type: object
      required:
      - type
      - webhook_url
      type: object
    SubscriptionResponse:
      properties:
        channels:
          items:
            $ref: '#/components/schemas/SubscriptionChannelResponse'
          type: array
        dedupe_duration_ms:
          format: int64
          type: integer
        filtering_level:
          enum:
          - ALL
          - NONE
          - NOTEWORTHY
          - SOME
          type: string
        having_all_tags:
          items:
            type: string
          type: array
          uniqueItems: true
        subscription_id:
          type: string
        user:
          $ref: '#/components/schemas/SubscriptionUserResponse'
      required:
      - channels
      - dedupe_duration_ms
      - filtering_level
      - having_all_tags
      - subscription_id
      - user
      type: object
    SubscriptionChannelResponse:
      discriminator:
        mapping:
          EMAIL: '#/components/schemas/EmailSubscriptionChannelResponse'
          EXTOLE_CLIENT_SLACK: '#/components/schemas/ExtoleClientSlackSubscriptionChannelResponse'
          SLACK: '#/components/schemas/SlackSubscriptionChannelResponse'
          THIRD_PARTY_EMAIL: '#/components/schemas/ThirdPartyEmailSubscriptionChannelResponse'
          WEBHOOK: '#/components/schemas/WebhookSubscriptionChannelResponse'
        propertyName: type
      oneOf:
      - $ref: '#/components/schemas/EmailSubscriptionChannelResponse'
      - $ref: '#/components/schemas/ExtoleClientSlackSubscriptionChannelResponse'
      - $ref: '#/components/schemas/SlackSubscriptionChannelResponse'
      - $ref: '#/components/schemas/ThirdPartyEmailSubscriptionChannelResponse'
      - $ref: '#/components/schemas/WebhookSubscriptionChannelResponse'
    SuccessResponse:
      properties:
        status:
          type: string
      required:
      - status
      type: object
    ThirdPartyEmailSubscriptionChannelResponse:
      allOf:
      - $ref: '#/components/schemas/SubscriptionChannelResponseBase'
      - properties:
          id:
            readOnly: true
            type: string
          recipient:
            type: string
          type:
            enum:
            - THIRD_PARTY_EMAIL
            type: string
        type: object
      required:
      - id
      - recipient
      - type
      type: object
    SubscriptionUserResponse:
      properties:
        email:
          type: string
        first_name:
          type:
          - string
          - 'null'
        last_name:
          type:
          - string
          - 'null'
        user_id:
          type: string
      type: object
    WebhookSubscriptionChannelResponse:
      allOf:
      - $ref: '#/components/schemas/SubscriptionChannelResponseBase'
      - properties:
          id:
            readOnly: true
            type: string
          type:
            enum:
            - WEBHOOK
            type: string
          webhook_id:
            type: string
        type: object
      required:
      - id
      - type
      - webhook_id
      type: object
    SubscriptionChannelResponseBase:
      properties:
        id:
          type: string
        type:
          enum:
          - EMAIL
          - EXTOLE_CLIENT_SLACK
          - SLACK
          - THIRD_PART

# --- truncated at 32 KB (45 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/extole/refs/heads/main/openapi/extole-user-subscriptions-api-openapi.yml