Exclaimer Subscriptions API

The Subscriptions API from Exclaimer — 13 operation(s) for subscriptions.

Operations 15

PUT /1.0/subscriptions/{SubscriptionID}/activate-full Activate Full Subscription
POST /1.0/subscriptions Add Subscription
GET /1.0/subscriptions Get Subscriptions
POST /v2.0/subscriptions Add Subscription V2
PUT /1.0/subscriptions/{SubscriptionID}/deactivate Deactivate Subscription
PUT /1.0/subscriptions/{SubscriptionID}/end End Subscription
POST /1.0/subscriptions/{SubscriptionID}/migrate Migrate Subscription
PUT /1.0/subscriptions/{SubscriptionID}/reactivate Reactivate Subscription
GET /1.0/subscriptions/{SubscriptionID} Get Subscription
PUT /1.0/subscriptions/{SubscriptionID} Update Subscription
GET /1.0/subscriptions/{SubscriptionID}/history Get Subscription History
PUT /1.0/subscriptions/{SubscriptionID}/nfr Change Not For Resale
POST /1.0/subscriptions/{SubscriptionID}/change-owner Change Subscription Owner
PUT /1.0/subscriptions/{SubscriptionID}/change-sku Change Stock Keeping Unit
PUT /1.0/subscriptions/{SubscriptionID}/change-tier Change Tier

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/exclaimer-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 email required.

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

OpenAPI Specification

exclaimer-subscriptions-api-openapi.yml Raw ↑
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 <b>Add Subscription</b>.
        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: <deprecated-note><em>2025-02-17</em><br /> 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. </deprecated-note><p> This request will create a new subscription and adds it to the Exclaimer Cloud service. </p><p> A new user will be created for the email address provided if one doesn't already exist. </p><p> If you pass a <b>SubscriptionID</b> and <b>UserID</b>, 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. </p>
      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.<br /> You can apply filters: <ul><li>to only return active subscriptions, otherwise all subscriptions, including inactive ones, will be returned.</li><li>to only return subscriptions associated with a specific reseller.</li></ul> If no subscriptions match the filter, an empty array will be returned.'
      parameters:
      - name: Page
        in: query
        description: Page numbers start at 1. <p> See the section <b>"Paging of results"</b> at the beginning of the document.<br /> Results are ordered by the date the subscription was added. </p>
        schema:
          type: number
          format: int32
      - name: PageSize
        in: query
        description: Defaults to 50. Maximum 200. <p> See the section <b>"Paging of results"</b> at the beginning of the document.<br /></p>
        schema:
          type: number
          format: int32
      - name: ContinuationToken
        in: query
        description: A token that can be used to get the next page of results without supplying paging values.
        schema:
          type: number
          format: int32
      - name: ActiveOnly
        in: query
        description: When true, returns only subscriptions with an Active status. When false, returns all subscriptions irrespective of status*. <p> *When used in conjunction with <b>OverageOnly</b> this will return only active subscriptions that have an overage. </p>
        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*. <p> *When used in conjunction with <b>ActiveOnly</b> this will return only active subscriptions that have an overage. </p>
        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. <p> V2 changes include: <ul><li>SKU is now required and determines the product, tier, and NFR status</li><li>EndUser is required and includes a Domain field</li><li>Reseller includes a Domain field (required for non-Marketplace subscriptions)</li><li>BillingGroup is a new optional field for grouping subscriptions</li><li>SubscriptionProductCode, Tier, NFR, and NumberOfNFRUsers fields are deprecated and should not be used</li></ul></p><p> A new user will be created for the email address provided if one doesn''t already exist. </p><p> If you pass a <b>SubscriptionID</b> and <b>UserID</b>, 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. </p><p> <b>Currency Immutability:</b> Once a subscription is created, the currency cannot be changed. </p><p> <b>Marketplace Behavior:</b> 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. </p>'
      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. <p> 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. </p>
      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 <b>Add Subscription</b>.
        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. <p> When a subscription is ended it becomes dormant and emails will no longer be processed via the Exclaimer Cloud service. <b> The user's email needs to be redirected so it no longer gets sent through our system before calling this endpoint. </b></p><p> When actioned, the subscription is ended immediately, and the subscription will no longer appear in the Exclaimer Customer Portal. </p>
      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 <b>Add Subscription</b>.
        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 <b>Add Subscription</b>.
        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. <p> The subscription will no longer reside in a dormant state and emails will be imprinted/processed via the Exclaimer Cloud service again. </p>
      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 <b>Add Subscription</b>.
        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 <b>Add Subscription</b>.
        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 <b>Add Subscription</b>.
        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":

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