Exclaimer Cloud API

Partner and distributor provisioning API for Exclaimer Cloud tenants. Covers creating and managing subscriptions (add, update, activate, deactivate, end, reactivate, migrate, transfer ownership, change SKU/tier/NFR status), MSP subscriptions and sender usage export, subscription users and roles, resellers, end users, mailbox counts and allocation, and reference data (data centers, SKUs, tiers). REST over HTTPS with JSON, authenticated with an ExApiToken API key header, PascalCase-or-camelCase request tolerance, and ContinuationToken paging. Access is restricted to the Exclaimer distributor network; tokens are issued by Exclaimer.

Documentation

Specifications

Other Resources

OpenAPI Specification

exclaimer-subscriptions-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Exclaimer Cloud API — Subscriptions
  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
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':
          

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