Extole User Subscriptions API
The User Subscriptions API from Extole — 3 operation(s) for user subscriptions.
The User Subscriptions API from Extole — 3 operation(s) for user subscriptions.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/extole-user-subscriptions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 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