openapi: 3.2.0
info:
title: Exclaimer Cloud Subscriptions API
version: '1'
description: The Subscriptions operations of the Exclaimer Cloud API, the partner/distributor provisioning API for Exclaimer Cloud tenants. Split by tag from the provider-published OpenAPI at https://cloudapi.exclaimer.com/openapi.json (documentation version 5.2, published 2025-07-23). Operation content is carried verbatim from the source specification.
servers:
- url: https://cloudapi.exclaimer.com/exclaimerapi
description: Local
security:
- Exclaimer: []
tags:
- name: Subscriptions
paths:
/1.0/subscriptions/{SubscriptionID}/activate-full:
put:
tags:
- Subscriptions
summary: Activate Full Subscription
description: This request will convert a trial subscription into a full subscription.
parameters:
- name: SubscriptionID
in: path
description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription.
required: true
schema:
type: string
responses:
'204':
description: No Content
'400':
description: Bad Request / Missing Field
'401':
description: Unauthorized
'404':
description: Not Found
'500':
description: Internal Server Error
x-documentation:
routeExamples:
Basic usage:
value: /subscriptions/TriangleInc/activate-full
curlExamples:
Basic usage - cURL:
description: /subscriptions/EX-Subscription-001/activate-full
value: '{}'
/1.0/subscriptions:
post:
tags:
- Subscriptions
summary: Add Subscription
deprecated: true
description:
This endpoint is deprecated. Please use the V2 endpoint at /v2.0/subscriptions instead, which provides enhanced support for marketplace scenarios and SKU-based product specification.
This request will create a new subscription and adds it to the Exclaimer Cloud service.
A new user will be created for the email address provided if one doesn't already exist.
If you pass a SubscriptionID and UserID, these values will be used when creating the subscription, otherwise they'll be randomly generated and returned to you. You will need the subscription ID for other operations, such as updating the mailbox count, or ending the subscription.
requestBody: content: application/json: schema: $ref: '#/components/schemas/AddSubscription' examples: Minimum: value: '{"EmailAddress":"joe.bloggs@example.com","MailboxCount":100,"CountryCode":"GB"}' Activate immediately: value: '{"EmailAddress":"john.smith@example.com","MailboxCount":100,"CountryCode":"GB","SubscriptionProductCode":"GSuite","SkipTrial":true}' Don't send a welcome email: value: '{"SubscriptionID":"Subscription-UQN-935","UserID":"U1196-BDT-63","EmailAddress":"sarah.hall@example.com","MailboxCount":200,"CountryCode":"US","SendWelcomeEmailToCustomer":false}' Include End User and Reseller: value: '{"SubscriptionID":"Subscription-FHZ-592","UserID":"AugustHayes","EmailAddress":"august.hayes@example.com","MailboxCount":300,"CountryCode":"FR","EndUser":{"EndUserID":"U-ABC-123","CompanyName":"Users Ltd","CountryCode":"GBR"},"Reseller":{"ResellerID":"R-12345","CompanyName":"Resellers & Co.","CountryCode":"GBR"}}' Using a SKU: value: '{"SubscriptionID":"Subscription-UQN-935","EmailAddress":"user.seven@example.com","MailboxCount":100,"CountryCode":"DN","SKU":"EXCL-M-STAND"}' Complete: value: '{"SubscriptionID":"Subscription-JJE-619","UserID":"John-A-Smith","EmailAddress":"john.smith@example.com","MailboxCount":100,"CountryCode":"GB","CurrencyCode":"GBP","TrialDays":28,"SendWelcomeEmailToCustomer":false,"SubscriptionName":"The Company Ltd","SubscriptionProductCode":"GSuite","Tier":"ExclaimerPro","EndUser":{"EndUserID":"W-JJJ-555","CompanyName":"A365 Ltd","CountryCode":"GBR"},"Reseller":{"ResellerID":"DJJ-3372","CompanyName":"Miller & Co.","CountryCode":"GBR"},"NFR":true,"NumberOfNFRUsers":50}' Complete (DEPRECATED): value: '{"SubscriptionID":"Subscription-JJE-619","UserID":"John-A-Smith","EmailAddress":"john.smith@example.com","MailboxCount":100,"CountryCode":"GB","CurrencyCode":"GBP","TrialDays":28,"SendWelcomeEmailToCustomer":false,"SubscriptionName":"The Company Ltd","SubscriptionProductCode":"GSuite","Tier":"ExclaimerCloud","EndUser":{"EndUserID":"W-JJJ-555","CompanyName":"A365 Ltd","CountryCode":"GBR"},"Reseller":{"ResellerID":"DJJ-3372","CompanyName":"Miller & Co.","CountryCode":"GBR"},"NFR":true,"NumberOfNFRUsers":50,"Features":["Feedback"]}' x-documentation: deprecated: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AddSubscriptionResponse' examples: Auto-generated: value: '{"SubscriptionID":"98xjD6BGyE5yq3g8A9MCXNHudobRxX","UserID":"NEomSQPVTe4ETKS92LcuEBT5dxZEnm"}' Specified: value: '{"SubscriptionID":"Subscription-JSY-612","UserID":"Mike-Jones"}' '400': description: Bad Request / Missing Field '401': description: Unauthorized '403': description: Forbidden '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Providing a subscription ID and user ID - cURL: description: /1.0/subscriptions value: '{"SubscriptionID":"EX-Subscription-001","UserID":"EX-User-001","EmailAddress":"ex.user.001@example.com","MailboxCount":100,"CountryCode":"826","CurrencyCode":"GBP","TrialDays":30,"SubscriptionProductCode":"Office365"}' Allowing Exclaimer Cloud API to auto-generate a subscription ID and user ID - cURL: description: /1.0/subscriptions value: '{"EmailAddress":"ex.user.002@example.com","MailboxCount":25,"CountryCode":"DE","CurrencyCode":"GBP","SendWelcomeEmailToCustomer":false,"SubscriptionProductCode":"GSuite"}' Including reseller and end user - cURL: description: /1.0/subscriptions value: '{"SubscriptionID":"EX-Subscription-005","UserID":"EX-User-005","EmailAddress":"ex.user.005@example.com","MailboxCount":10,"CountryCode":"GB","CurrencyCode":"GBP","TrialDays":30,"SubscriptionProductCode":"Office365","EndUser":{"EndUserID":"EX-EndUser-005","CompanyName":"EX-EndUserCompany-005","CountryCode":"GB"},"Reseller":{"ResellerID":"EX-Reseller-005","CompanyName":"EX-ResellerCompany-005","CountryCode":"GB"}}' Skipping a trial and creating an active subscription immediately - cURL: description: /1.0/subscriptions value: '{"EmailAddress":"ex.user.010@example.com","MailboxCount":10,"CountryCode":"GB","CurrencyCode":"GBP","SubscriptionName":"EX-Subscription-010","SubscriptionProductCode":"Office365","SkipTrial":true}' Specifying a data center - cURL: description: /1.0/subscriptions value: '{"EmailAddress":"ex.user.010@example.com","MailboxCount":10,"CountryCode":"GB","DataCenter":"US","CurrencyCode":"GBP","SubscriptionName":"EX-Subscription-010","SubscriptionProductCode":"Office365"}' Specifying a tier - cURL: description: /1.0/subscriptions value: '{"EmailAddress":"ex.user.012@example.com","MailboxCount":25,"CountryCode":"DE","CurrencyCode":"GBP","SendWelcomeEmailToCustomer":false,"SubscriptionProductCode":"GSuite","Tier":"ExclaimerPro"}' Using a SKU - cURL: description: /1.0/subscriptions value: '{"EmailAddress":"ex.user.014@example.com","MailboxCount":50,"CountryCode":"GB","NumberOfNFRUsers":10,"SKU":"EXCL-M-STAND-NFR"}' Specifying a tier - cURL (DEPRECATED): description: /1.0/subscriptions value: '{"EmailAddress":"ex.user.012@example.com","MailboxCount":25,"CountryCode":"DE","CurrencyCode":"GBP","SendWelcomeEmailToCustomer":false,"SubscriptionProductCode":"GSuite","Tier":"SignatureMarketingSuite"}' x-documentation: deprecated: true Add visibility of paid features - cURL (DEPRECATED): description: /1.0/subscriptions value: '{"EmailAddress":"ex.user.015@example.com","MailboxCount":10,"CountryCode":"GB","NumberOfNFRUsers":10,"SKU":"EXCL-M-MRKT-CLOUD-NFR","Features":["Feedback"]}' x-documentation: deprecated: true get: tags: - Subscriptions summary: Get Subscriptions description: 'This request will return details of each of your subscriptions held in the Exclaimer Cloud service. See the section "Paging of results" at the beginning of the document.
Results are ordered by the date the subscription was added.
See the section "Paging of results" at the beginning of the document.
*When used in conjunction with OverageOnly this will return only active subscriptions that have an overage.
schema: type: boolean - name: OverageOnly in: query description: When true, returns only subscriptions with an overage. When false, returns all subscriptions irrespective of whether there is overage or not*.*When used in conjunction with ActiveOnly this will return only active subscriptions that have an overage.
schema: type: boolean - name: ResellerID in: query description: When provided, returns only subscriptions for this reseller. When not provided, returns all subscriptions irrespective of reseller. schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/SubscriptionsResponse' examples: Basic response: value: '{"Subscriptions":[{"SubscriptionID":"Sub-IJZ-471","Name":"VIP Services","UserID":"kkJKcWgGU54Ro43vKV58jkCKnZg8uL","EndUserID":"U-DDX-332","ResellerID":"R-UWM-842","StartDate":"2025-09-02T07:54:59.836885Z","NumberOfUsers":100,"AggregatedUsers":72,"ProcessedUsers":29,"Currency":"GBP","Status":"Active","BillableUsers":42,"Tier":"ExclaimerStandard","SKU":"EXCL-M-STAND"},{"SubscriptionID":"Abc-2-6522","Name":"S-DT-BN-096","UserID":"O-7676-PC","ResellerID":"R-3344","StartDate":"2025-09-02T07:54:59.836885Z","NumberOfUsers":50,"AggregatedUsers":48,"ProcessedUsers":42,"Currency":"GBP","Status":"Active","InTrial":true,"TrialEndDate":"2025-09-12T07:54:59.836885Z","BillableUsers":50,"Tier":"ExclaimerPro","NFR":true,"NFRDetails":{"NumberOfUsers":15,"DateApplied":"2025-09-02T07:54:59.836885Z"},"SKU":"EXCL-M-PRO-NFR"}],"SubscriptionCount":21,"ContinuationToken":26145,"Page":6,"PageSize":2}' Basic response (DEPRECATED): value: '{"Subscriptions":[{"SubscriptionID":"Sub-IJZ-471","Name":"VIP Services","UserID":"kkJKcWgGU54Ro43vKV58jkCKnZg8uL","EndUserID":"U-DDX-332","ResellerID":"R-UWM-842","StartDate":"2025-09-02T07:54:59.836885Z","NumberOfUsers":100,"AggregatedUsers":72,"ProcessedUsers":29,"Currency":"GBP","Status":"Active","BillableUsers":42,"Tier":"ExclaimerCloud","SKU":"EXCL-M-MNGT-CLOUD"},{"SubscriptionID":"Abc-2-6522","Name":"S-DT-BN-096","UserID":"O-7676-PC","ResellerID":"R-3344","StartDate":"2025-09-02T07:54:59.836885Z","NumberOfUsers":50,"AggregatedUsers":48,"ProcessedUsers":42,"Currency":"GBP","Status":"Active","InTrial":true,"TrialEndDate":"2025-09-12T07:54:59.836885Z","BillableUsers":50,"Tier":"SignatureMarketingSuite","NFR":true,"NFRDetails":{"NumberOfUsers":15,"DateApplied":"2025-09-02T07:54:59.836885Z"},"SKU":"EXCL-M-MRKT-CLOUD-NFR"}],"SubscriptionCount":21,"ContinuationToken":26145,"Page":6,"PageSize":2}' x-documentation: deprecated: true '400': description: Bad Request / Missing Field '401': description: Unauthorized '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: routeExamples: Basic usage: value: /subscriptions Paging: value: /subscriptions?Page=6&PageSize=2 Using a continuation token: value: /subscriptions?ContinuationToken=262145 Filter by active: value: /subscriptions?ActiveOnly=true Filter by overage: value: /subscriptions?OverageOnly=true Filter by reseller: value: /subscriptions?ResellerID=RYW-6391 curlExamples: All subscriptions with default paging - cURL: description: /subscriptions value: '{}' Subset of subscriptions defined by page and size - cURL: description: /subscriptions?Page=2&PageSize=2 value: '{}' Filter to return active subscriptions only - cURL: description: /subscriptions?ActiveOnly=true value: '{}' /v2.0/subscriptions: post: tags: - Subscriptions summary: Add Subscription V2 description: 'This request will create a new subscription using Version 2 of the API, which introduces SKU-based product specification and enhanced support for marketplace scenarios.V2 changes include:
A new user will be created for the email address provided if one doesn''t already exist.
If you pass a SubscriptionID and UserID, these values will be used when creating the subscription, otherwise they''ll be randomly generated and returned to you. You will need the subscription ID for other operations, such as updating the mailbox count, or ending the subscription.
Currency Immutability: Once a subscription is created, the currency cannot be changed.
Marketplace Behavior: For Marketplace subscriptions, the system will auto-populate EndUser fields from the email address if not explicitly provided. The Reseller field is optional for Marketplace subscriptions.
' requestBody: content: application/json: schema: $ref: '#/components/schemas/AddSubscriptionV2' examples: Minimum: value: '{"EmailAddress":"joe.bloggs@example.com","MailboxCount":100,"CountryCode":"GB","SKU":"EXCL-M-STAND","EndUser":{"Domain":"example.com"}}' With BillingGroup: value: '{"EmailAddress":"john.smith@example.com","MailboxCount":100,"CountryCode":"GB","SKU":"EXCL-M-PRO","BillingGroup":"Enterprise-001","EndUser":{"Domain":"smithcorp.com"}}' Non-Marketplace with Reseller: value: '{"EmailAddress":"sarah.hall@example.com","MailboxCount":200,"CountryCode":"US","SKU":"EXCL-G-STAND","EndUser":{"Domain":"hallenterprises.com"},"Reseller":{"Domain":"reseller.com"}}' Marketplace with full EndUser: value: '{"EmailAddress":"august.hayes@example.com","MailboxCount":300,"CountryCode":"FR","SKU":"EXCL-M-START","EndUser":{"Domain":"hayes-industries.com","FirstName":"August","LastName":"Hayes","EmailAddress":"august@hayes-industries.com","AddressLine1":"123 Main St","AddressLine2":"Suite 100","State":"CA","PhoneNumber":"+1-555-0100"}}' NFR Subscription: value: '{"EmailAddress":"user.seven@example.com","MailboxCount":100,"CountryCode":"DN","SKU":"EXCL-M-STAND-NFR","EndUser":{"Domain":"nfrcompany.com"}}' Complete: value: '{"SubscriptionID":"Subscription-JJE-619","UserID":"John-A-Smith","EmailAddress":"john.smith@example.com","MailboxCount":100,"CountryCode":"GB","CurrencyCode":"GBP","TrialDays":28,"SendWelcomeEmailToCustomer":false,"SubscriptionName":"The Company Ltd","SKU":"EXCL-M-PRO","BillingGroup":"UK-Division","EndUser":{"Domain":"thecompany.com","FirstName":"John","LastName":"Smith","EmailAddress":"john@thecompany.com","AddressLine1":"10 Corporate Blvd","State":"London","PhoneNumber":"+44-20-1234-5678"},"Reseller":{"Domain":"miller-resellers.com"}}' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AddSubscriptionResponse' examples: Auto-generated: value: '{"SubscriptionID":"98xjD6BGyE5yq3g8A9MCXNHudobRxX","UserID":"NEomSQPVTe4ETKS92LcuEBT5dxZEnm"}' Specified: value: '{"SubscriptionID":"Subscription-JSY-612","UserID":"Mike-Jones"}' '400': description: Bad Request / Missing Field '401': description: Unauthorized '403': description: Forbidden '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Minimum - cURL: description: /v2.0/subscriptions value: '{"EmailAddress":"user.001@example.com","MailboxCount":100,"CountryCode":"GB","SKU":"EXCL-M-STAND","EndUser":{"Domain":"example.com"}}' With BillingGroup - cURL: description: /v2.0/subscriptions value: '{"EmailAddress":"user.002@example.com","MailboxCount":100,"CountryCode":"GB","SKU":"EXCL-M-PRO","BillingGroup":"Enterprise-001","EndUser":{"Domain":"example.com"}}' Non-Marketplace with Reseller - cURL: description: /v2.0/subscriptions value: '{"EmailAddress":"user.003@example.com","MailboxCount":200,"CountryCode":"US","SKU":"EXCL-G-STAND","EndUser":{"Domain":"example.com"},"Reseller":{"Domain":"reseller.com"}}' Marketplace with full EndUser - cURL: description: /v2.0/subscriptions value: '{"EmailAddress":"user.004@example.com","MailboxCount":300,"CountryCode":"FR","SKU":"EXCL-M-START","EndUser":{"Domain":"example.com","FirstName":"August","LastName":"Hayes","EmailAddress":"august@example.com","AddressLine1":"123 Main St","AddressLine2":"Suite 100","State":"CA","PhoneNumber":"+1-555-0100"}}' NFR Subscription - cURL: description: /v2.0/subscriptions value: '{"EmailAddress":"user.005@example.com","MailboxCount":100,"CountryCode":"DN","SKU":"EXCL-M-STAND-NFR","EndUser":{"Domain":"example.com"}}' Complete - cURL: description: /v2.0/subscriptions value: '{"SubscriptionID":"Subscription-JJE-619","UserID":"John-A-Smith","EmailAddress":"john.smith@example.com","MailboxCount":100,"CountryCode":"GB","CurrencyCode":"GBP","TrialDays":28,"SendWelcomeEmailToCustomer":false,"SubscriptionName":"The Company Ltd","SKU":"EXCL-M-PRO","BillingGroup":"UK-Division","EndUser":{"Domain":"thecompany.com","FirstName":"John","LastName":"Smith","EmailAddress":"john@thecompany.com","AddressLine1":"10 Corporate Blvd","State":"London","PhoneNumber":"+44-20-1234-5678"},"Reseller":{"Domain":"miller-resellers.com"}}' Skip Trial - cURL: description: /v2.0/subscriptions value: '{"EmailAddress":"user.006@example.com","MailboxCount":10,"CountryCode":"GB","CurrencyCode":"GBP","SubscriptionName":"EX-Subscription-010","SKU":"EXCL-M-STAND","SkipTrial":true,"EndUser":{"Domain":"example.com"}}' /1.0/subscriptions/{SubscriptionID}/deactivate: put: tags: - Subscriptions summary: Deactivate Subscription description: This request will deactivate a subscription.The service will no longer stamp emails for this subscription and the end user will no longer be able to load the template editor, however we will not block the users email. This endpoint should be used if you intend to reactivate the subscription in the near future.
parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: routeExamples: Basic usage: value: /subscriptions/miller-ltd-487d/deactivate curlExamples: Basic usage - cURL: description: /subscriptions/EX-Subscription-001/deactivate value: '{}' /1.0/subscriptions/{SubscriptionID}/end: put: tags: - Subscriptions summary: End Subscription description: This request will end a subscription.When a subscription is ended it becomes dormant and emails will no longer be processed via the Exclaimer Cloud service. The user's email needs to be redirected so it no longer gets sent through our system before calling this endpoint.
When actioned, the subscription is ended immediately, and the subscription will no longer appear in the Exclaimer Customer Portal.
parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: routeExamples: Basic usage: value: /subscriptions/SUB-LNE-386/end curlExamples: Basic usage - cURL: description: /subscriptions/EX-Subscription-001/end value: '{}' /1.0/subscriptions/{SubscriptionID}/migrate: post: tags: - Subscriptions summary: Migrate Subscription description: This request allows you to assign, transfer, or remove, a reseller and/or end user, from an existing subscription. parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/MigrateSubscription' examples: Assign, or migrate, the reseller only: value: '{"ResellerID":"Jacobi Holdings"}' Assign, or migrate, both the reseller and the end user: value: '{"ResellerID":"Jacobi Holdings","EndUserID":"Jean Jones"}' Remove an existing reseller only: value: '{"ResellerID":""}' responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Assign, or migrate, the reseller only - cURL: description: /subscriptions/EX-Subscription-001/migrate value: '{"ResellerID":"EX-Reseller-002"}' Assign, or migrate, both the reseller and the end user - cURL: description: /subscriptions/EX-Subscription-001/migrate value: '{"ResellerID":"EX-Reseller-001","EndUserID":"EX-EndUSer-001"}' Remove an existing reseller only - cURL: description: /subscriptions/EX-Subscription-001/migrate value: '{"ResellerID":""}' /1.0/subscriptions/{SubscriptionID}/reactivate: put: tags: - Subscriptions summary: Reactivate Subscription description: This request will reactivate a previously ended, or deactivated, subscription.The subscription will no longer reside in a dormant state and emails will be imprinted/processed via the Exclaimer Cloud service again.
parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ReactivateSubscription' examples: Basic usage: value: '{"InTrial":true}' responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Basic usage - cURL: description: /subscriptions/EX-Subscription-001/reactivate value: '{"InTrial":true}' /1.0/subscriptions/{SubscriptionID}: get: tags: - Subscriptions summary: Get Subscription description: This request will return details of the specified subscription held in the Exclaimer Cloud service. parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/SingleSubscriptionResponse' examples: Basic response: value: '{"Subscription":{"SubscriptionID":"SUB-UUWE-610","Name":"VIP Services","UserID":"ohXkcvZSZCFspKt9DYfuTmqYYjeruk","EndUserID":"U-DDX-332","ResellerID":"R-UWM-842","StartDate":"2025-09-02T07:54:59.8172514Z","NumberOfUsers":220,"AggregatedUsers":174,"ProcessedUsers":205,"Currency":"GBP","Status":"Active","InTrial":true,"TrialEndDate":"2025-09-12T07:54:59.8172514Z","BillableUsers":205,"Tier":"ExclaimerStandard","SKU":"EXCL-M-STAND"}}' '400': description: Bad Request / Missing Field '401': description: Unauthorized '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: routeExamples: Basic usage: value: /subscriptions/SUB-UUWE-610 curlExamples: Basic usage - cURL: description: /subscriptions/EX-Subscription-001 value: '{}' put: tags: - Subscriptions summary: Update Subscription description: This request can be used to update the name and currency assigned to the subscription. parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e. when calling Add Subscription. required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateSubscriptionDetails' examples: Update both the name and currency: value: '{"SubscriptionName":"Test Subscription","CurrencyCode":"USD"}' Update only the subscription name: value: '{"SubscriptionName":"Test Subscription"}' responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '403': description: Forbidden '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Change both the name and currency - cURL: description: /subscriptions/EX-Subscription-001 value: '{"SubscriptionName":"Test Company","CurrencyCode":"USD"}' Change only the name - cURL: description: /subscriptions/EX-Subscription-001 value: '{"SubscriptionName":"Test Company"}' /1.0/subscriptions/{SubscriptionID}/history: get: tags: - Subscriptions summary: Get Subscription History description: Provides information relating to the history of the subscription. parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/SubscriptionHistoryResponse' examples: Basic response: value: '{"TierHistory":[{"Date":"2025-09-02T07:54:59.8348859Z","Tier":"Exclaimer Pro Edition for Office 365","PreviousTier":"Exclaimer Standard Edition for Office 365"},{"Date":"2025-08-28T07:54:59.8348859Z","Tier":"Exclaimer Pro Edition for Office 365","PreviousTier":"Exclaimer Standard Edition for Office 365"}],"SkuHistory":[{"Date":"2025-09-02T07:54:59.8348859Z","Sku":"EXCL-M-START","PreviousSku":"EXCL-M-START-NFR"},{"Date":"2025-08-23T07:54:59.8348859Z","Sku":"EXCL-M-START-NFR","PreviousSku":"EXCL-M-START"}]}' '400': description: Bad Request / Missing Field '401': description: Unauthorized '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: routeExamples: Basic usage: value: /subscriptions/EX-Subscription-001/history curlExamples: Basic usage - cURL: description: /subscriptions/EX-Subscription-001/history value: '{}' /1.0/subscriptions/{SubscriptionID}/nfr: put: tags: - Subscriptions summary: Change Not For Resale description: This request allows you to specify that the subscription is not for resale.A subscription can be changed from being not for resale to a standard subscription, and vise versa, at any time.
N.B. This feature is only available to consumers that support NFR licenses.
parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateSubscriptionNFR' examples: Set as not for resale: value: '{"NFR":true,"NumberOfNFRUsers":25}' responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '403': description: Forbidden '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Set subscription as 'not for resale' - cURL: description: /subscriptions/EX-Subscription-002/nfr value: '{"NFR":true,"NumberOfNFRUsers":20}' /1.0/subscriptions/{SubscriptionID}/change-owner: post: tags: - Subscriptions summary: Change Subscription Owner description: This request will assign a different user to be the owner of a subscription.The new owner must already exist against the subscription, and must have the Admin role.
If you want to change the owner to a new subscription user, you can use the Add Subscription User API to create that user first.
If the existing subscription user does not have the Admin role, you can use the Update Subscription User Roles API to give them that role.
If you wish to delete the original owner, you can use the Delete Subscription User API after this request.
parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateSubscriptionOwner' examples: Change owner based on User ID: value: '{"UserID":"U7301-JJP-06"}' Change owner based on email: value: '{"EmailAddress":"helen.kirby@example.com"}' responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Change owner based on User ID - cURL: description: /subscriptions/EX-Subscription-021/change-owner value: '{"UserID":"U7301-JJP-06"}' Change owner based on email - cURL: description: /subscriptions/EX-Subscription-021/change-owner value: '{"EmailAddress":"helen.kirby@example.com"}' /1.0/subscriptions/{SubscriptionID}/change-sku: put: tags: - Subscriptions summary: Change Stock Keeping Unit description: This request allows you to use a code to change specific aspects of an existing subscription.N.B. You cannot change from an Office365 subscription to a GSuite subscription, or vise versa.
parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateSubscriptionSKU' examples: Update to a SKU for a standard subscription: value: '{"SKU":"EXCL-M-STAND"}' Update to a SKU for a not for resale pro subscription: value: '{"SKU":"EXCL-M-PRO-NFR","NumberOfNFRUsers":25}' Update to a SKU for a standard subscription (DEPRECATED): value: '{"SKU":"EXCL-M-MRKT-CLOUD "}' x-documentation: deprecated: true Update to a SKU for a not for resale subscription (DEPRECATED): value: '{"SKU":"EXCL-M-MNGT-CLOUD-NFR","NumberOfNFRUsers":25}' x-documentation: deprecated: true responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '403': description: Forbidden '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Set subscription as 'not for resale' - cURL: description: /subscriptions/EX-Subscription-002/change-sku value: '{"SKU":"EXCL-M-STAND-NFR","NumberOfNFRUsers":10}' Change a 'not for resale' subscription into a pro subscription - cURL: description: /subscriptions/EX-Subscription-002/change-sku value: '{"SKU":"EXCL-M-PRO"}' Set subscription as 'not for resale' - cURL (DEPRECATED): description: /subscriptions/EX-Subscription-002/change-sku value: '{"SKU":"EXCL-M-MNGT-CLOUD-NFR","NumberOfNFRUsers":10}' x-documentation: deprecated: true Change a 'not for resale' subscription into a standard subscription - cURL (DEPRECATED): description: /subscriptions/EX-Subscription-002/change-sku value: '{"SKU":"EXCL-M-MRKT-CLOUD"}' x-documentation: deprecated: true /1.0/subscriptions/{SubscriptionID}/change-tier: put: tags: - Subscriptions summary: Change Tier description: This request allows you to change the subscription tier. parameters: - name: SubscriptionID in: path description: Your reference for the subscription. This is the same ID you specified, or was automatically generated, when the subscription was created, i.e., when calling Add Subscription. required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateSubscriptionTier' examples: Basic usage: value: '{"Tier":"ExclaimerPro"}' Basic usage (DEPRECATED): value: '{"Tier":"SignatureMarketingSuite"}' x-documentation: deprecated: true responses: '204': description: No Content '400': description: Bad Request / Missing Field '401': description: Unauthorized '404': description: Not Found '415': description: Unsupported Media Type '500': description: Internal Server Error x-documentation: curlExamples: Basic usage - cURL: description: /subscriptions/EX-Subscription-002/change-tier value: '{"Tier":"ExclaimerPro"}' Basic usage - cURL (DEPRECATED): description: /subscriptions/EX-Subscription-002/change-tier value: '{"Tier":"SignatureMarketingSuite"}' x-documentation: deprecated: true components: schemas: AddSubscriptionResponse: title: AddSubscriptionResponse properties: SubscriptionID: type: string description: If specified in the request, this will be the value you passed. If not specified, this will be an automatically generated value. UserID: type: string description: If specified in the request, this will be the value you passed. If not specified, this will be an automatically generated value. Subscription: title: Subscription properties: SubscriptionID: type: string Name: type: string UserID: type: string description: The current owner of the subscription. EndUserID: type: string ResellerID: type: string StartDate: type: string format: date-time NumberOfUsers: type: number format: int32 AggregatedUsers: type: number format: int32 ProcessedUsers: type: number format: int32 Currency: type: string description: USD - US Dollar EXCL-M-START
EXCL-M-STAND
EXCL-M-PRO
EXCL-G-START
EXCL-G-STAND
EXCL-G-PRO
EXCL-M-START-NFR
EXCL-M-STAND-NFR
EXCL-M-PRO-NFR
EXCL-G-START-NFR
EXCL-G-STAND-NFR
EXCL-G-PRO-NFR
Where the caller is a Managed Service Provider on the Elite Program the mailbox count must not cause the total count across all subscriptions to exceed the Mailbox Allocation.
format: int32 CountryCode: type: string description: The country code where the user is based. This will be used to locate which data centre to use, unless otherwise indicated via DataCenter. Specify in ISO 3166-1 alpha-2/alpha-3 or numeric. DataCenter: type: string description: The data centre to use to host your Exclaimer cloud service. If not specified a default will be used based on the CountryCode. To determine which data centers can be used for which products see Get Data Centers. EU - Europe
IND - UAE
UK - UK
US - US
AUS - Australia
CAN - Canada
DE - Germany
USD - US Dollar
GBP - UK Sterling
EUR - Euro
AUD - Australian Dollars
CAD - Canadian Dollars
If not specified this defaults to GBP.
TrialDays: type: number description: The length of time the subscription should be in trial (in days). A value of zero will cause the subscription to be activated with a default length of 14 days. format: int32 SendWelcomeEmailToCustomer: type: boolean description: Specifies whether an email will be sent to the customer asking them to login for the first time. This defaults to true. SubscriptionName: type: string description: The name of the subscription. SubscriptionProductCode: type: string description: The type of product being requested. If not specified a default of "Office365" will be used. Office365
GSuite
ExclaimerStarter
ExclaimerStandard
ExclaimerPro
Note: Managed-Service-Provider accounts are limited to only creating ExclaimerPro tier subscriptions.
' EndUser: allOf: - $ref: '#/components/schemas/AddSubscriptionEndUser' - description: Allows you to associate the subscription with a custom user record. - {} Reseller: allOf: - $ref: '#/components/schemas/AddSubscriptionReseller' - description: Allows you to associate the subscription with a custom reseller record. - {} SkipTrial: type: boolean description: When set to true, specifies that no trial period is needed and that the subscriptions should become active immediately. If TrialDays is specified when this is true, it will be ignore. Defaults to false. NFR: type: boolean description: When true, the subscription is treated as not for resale. When false, the subscription is treated as a standard subscription. Defaults to false.N.B. This feature is only available to consumers that support NFR licenses.
NumberOfNFRUsers: type: number description: Specifies the number of users allocated as not for resale.N.B. When NFR is true, or including an NFR SKU, this value is required; when false or not specified, providing this value will result in an error.
format: int32 SKU: type: string description: 'A code representing the type of product being requested.If SKU is specified in conjunction with SubscriptionProductCode, Tier, or NFR, they will be ignored and this value will take precedence.
N.B. The use of NFR within a SKU is only available to consumers that support NFR licenses. M - Office365
G - GSuite
START - ExclaimerStarter
STAND - ExclaimerStandard
PRO - ExclaimerPro
EXCL-M-START
EXCL-M-STAND
EXCL-M-PRO
EXCL-G-START
EXCL-G-STAND
EXCL-G-PRO
EXCL-M-START-NFR
EXCL-M-STAND-NFR
EXCL-M-PRO-NFR
EXCL-G-START-NFR
EXCL-G-STAND-NFR
EXCL-G-PRO-NFR
Note: Managed-Service-Provider accounts are limited to only creating PRO (ExclaimerPro) tier subscriptions.
' description: This request will create a new subscription and adds it to the Exclaimer Cloud service.A new user will be created for the email address provided if one doesn't already exist.
If you pass a SubscriptionID and UserID, these values will be used when creating the subscription, otherwise they'll be randomly generated and returned to you. You will need the subscription ID for other operations, such as updating the mailbox count, or ending the subscription.
UpdateSubscriptionNFR: title: UpdateSubscriptionNFRRequest required: - NFR properties: NFR: type: boolean description: When true, the subscription is treated as not for resale.A subscription can be changed from being not for resale to a standard subscription, and vise versa, at any time.
N.B. This feature is only available to consumers that support NFR licenses.
SingleSubscriptionResponse: title: SingleSubscriptionResponse properties: Subscription: $ref: '#/components/schemas/Subscription' MigrateSubscription: title: MigrateSubscriptionRequest properties: ResellerID: type: string description: Your reference for the reseller you want to migrate the subscription to. If you don't want to change the existing reseller, then don't specify this property.
If you want to remove, or clear, the existing reseller, supply an empty value.
When providing the ResellerID, a reseller with that ID must already exist.
If you don't want to change the existing end user, then don't specify this property.
If you want to remove, or clear, the existing end user, supply an empty value.
When providing the EndUserID, an end user with that ID must already exist.
USD - US Dollar
GBP - UK Sterling
EUR - Euro
AUD - Australian Dollars
CAD - Canadian Dollars
If you specify the UserID, you cannot specify EmailAddress.
EmailAddress: type: string description: The email address of the new subscription owner. This will be the email you gave when using Add Subscription User.If you specify the EmailAddress, you cannot specify UserID.
description: This request will assign a different user to be the owner of a subscription.The new owner must already exist against the subscription, and must have the Admin role.
If you want to change the owner to a new subscription user, you can use the Add Subscription User API to create that user first.
If the existing subscription user does not have the Admin role, you can use the Update Subscription User Roles API to give them that role.
If you wish to delete the original owner, you can use the Delete Subscription User API after this request.
AddSubscriptionReseller: title: Reseller required: - ResellerID - CompanyName - CountryCode properties: ResellerID: type: string description: Your reference for the reseller. This will associate the reseller with the new subscription.If a reseller with the ResellerID already exists, it will be updated; otherwise it will be created.
CompanyName: type: string description: The name of the company to associated the subscription with. CountryCode: type: string description: The country code where the reseller is based.The subscription will no longer reside in a dormant state and emails will be imprinted/processed via the Exclaimer Cloud service again.
UpdateSubscriptionSKU: title: UpdateSubscriptionSKURequest required: - SKU properties: SKU: type: string description: 'A code representing the type of product being requested.N.B. The use of NFR within a SKU is only available to consumers that support NFR licenses.
When including NFR, you must also include the NumberOfNFRUsers field.
M - Office365
G - GSuite
START - ExclaimerStarter
STAND - ExclaimerStandard
PRO - ExclaimerPro
Valid values:
EXCL-M-START
EXCL-M-STAND
EXCL-M-PRO
EXCL-G-START
EXCL-G-STAND
EXCL-G-PRO
EXCL-M-START-NFR
EXCL-M-STAND-NFR
EXCL-M-PRO-NFR
EXCL-G-START-NFR
EXCL-G-STAND-NFR
EXCL-G-PRO-NFR
Note: Managed-Service-Provider accounts are limited to only creating PRO (ExclaimerPro) tier subscriptions.
' NumberOfNFRUsers: type: number description: Specifies the number of users allocated as not for resale.N.B. You cannot change from an Office365 subscription to a GSuite subscription, or vise versa.
AddSubscriptionV2: title: AddSubscriptionV2Request required: - EmailAddress - MailboxCount - CountryCode - SKU - EndUser properties: SubscriptionID: type: string description: Your reference for the subscription. If not specified, this will be automatically generated. UserID: type: string description: Your reference for the user. If not specified, this will be automatically generated. EmailAddress: type: string description: The email address of the user. MailboxCount: type: number description: The number of mailboxes that will be imprinted. You can update this value at a later date by calling the Update Mailbox Count API.Where the caller is a Managed Service Provider on the Elite Program the mailbox count must not cause the total count across all subscriptions to exceed the Mailbox Allocation.
format: int32 CountryCode: type: string description: The country code where the user is based. This will be used to locate which data centre to use, unless otherwise indicated via DataCenter. Specify in ISO 3166-1 alpha-2/alpha-3 or numeric. DataCenter: type: string description: The data centre to use to host your Exclaimer cloud service. If not specified a default will be used based on the CountryCode. To determine which data centers can be used for which products see Get Data Centers. EU - Europe
IND - UAE
UK - UK
US - US
AUS - Australia
CAN - Canada
DE - Germany
USD - US Dollar
GBP - UK Sterling
EUR - Euro
AUD - Australian Dollars
CAD - Canadian Dollars
If not specified this defaults to GBP.
TrialDays: type: number description: The length of time the subscription should be in trial (in days). A value of zero will cause the subscription to be activated with a default length of 14 days. format: int32 SendWelcomeEmailToCustomer: type: boolean description: Specifies whether an email will be sent to the customer asking them to login for the first time. This defaults to true. SubscriptionName: type: string description: The name of the subscription. SKU: type: string description: 'A code representing the type of product being requested. This field determines the product, tier, and NFR status. M - Office365
G - GSuite
START - ExclaimerStarter
STAND - ExclaimerStandard
PRO - ExclaimerPro
NFR - Not For Resale
EXCL-M-START
EXCL-M-STAND
EXCL-M-PRO
EXCL-G-START
EXCL-G-STAND
EXCL-G-PRO
EXCL-M-START-NFR
EXCL-M-STAND-NFR
EXCL-M-PRO-NFR
EXCL-G-START-NFR
EXCL-G-STAND-NFR
EXCL-G-PRO-NFR
Note: Managed-Service-Provider accounts are limited to only creating PRO (ExclaimerPro) tier subscriptions.
' BillingGroup: type: string description: Optional field to associate the subscription with a billing group for organizational purposes. EndUser: allOf: - $ref: '#/components/schemas/AddSubscriptionEndUserV2' - description: Allows you to associate the subscription with a custom user record. - {} Reseller: allOf: - $ref: '#/components/schemas/AddSubscriptionResellerV2' - description: Allows you to associate the subscription with a custom reseller record. Required for non-Marketplace subscriptions. Optional for Marketplace subscriptions. - {} SkipTrial: type: boolean description: When set to true, specifies that no trial period is needed and that the subscriptions should become active immediately. If TrialDays is specified when this is true, it will be ignore. Defaults to false. description: This request will create a new subscription using Version 2 of the API. V2 requires SKU and EndUser (with Domain) fields. The SubscriptionProductCode, Tier, NFR, and NumberOfNFRUsers fields from V1 are deprecated in V2.A new user will be created for the email address provided if one doesn't already exist.
If you pass a SubscriptionID and UserID, these values will be used when creating the subscription, otherwise they'll be randomly generated and returned to you. You will need the subscription ID for other operations, such as updating the mailbox count, or ending the subscription.
AddSubscriptionEndUserV2: title: EndUserV2 required: - Domain properties: Domain: type: string description: The domain associated with the end user. FirstName: type: string description: The first name of the end user. Optional for Marketplace subscriptions. LastName: type: string description: The last name of the end user. Optional for Marketplace subscriptions. EmailAddress: type: string description: The email address of the end user. Optional for Marketplace subscriptions. AddressLine1: type: string description: The first line of the address. Optional for Marketplace subscriptions. AddressLine2: type: string description: The second line of the address. Optional for Marketplace subscriptions. State: type: string description: The state or region. Optional for Marketplace subscriptions. PhoneNumber: type: string description: The phone number of the end user. Optional for Marketplace subscriptions. AddSubscriptionEndUser: title: EndUser required: - EndUserID - CompanyName - CountryCode properties: EndUserID: type: string description: Your reference for the user. This will associate the user with the new subscription.If a user with the EndUserID already exists, it will be updated; otherwise it will be created.
CompanyName: type: string description: The name of the company to associate the subscription with. CountryCode: type: string description: The country code where the user is based. ExclaimerStarter
ExclaimerStandard
ExclaimerPro
Note: Managed-Service-Provider accounts are limited to only creating ExclaimerPro tier subscriptions.
' description: This request allows you to change the subscription tier. securitySchemes: Exclaimer: type: apiKey name: ExApiToken in: header