Smokeball Subscriptions API

The Subscriptions API from Smokeball — 26 operation(s) for subscriptions.

OpenAPI Specification

smokeball-subscriptions-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Smokeball Activity Codes Subscriptions API
  version: '1.0'
  description: REST API for integrating with Smokeball legal practice management software. Supports matters, contacts, documents, time entries, billing, trust accounting, staff, webhooks, and law firm workflows across US, AU, and UK regions. Uses OAuth 2.0 (client credentials) authentication.
  contact:
    name: Smokeball Developer Support
    url: https://docs.smokeball.com/docs/api-docs/1e13a13124aee-introduction
  x-api-id: smokeball
  x-audience: external-public
servers:
- url: https://api.smokeball.com
- url: https://api.smokeball.com.au
- url: https://api.smokeball.co.uk
- url: https://stagingapi.smokeball.com
- url: https://stagingapi.smokeball.com.au
- url: https://stagingapi.smokeball.co.uk
security:
- api-key: []
  token: []
tags:
- name: Subscriptions
paths:
  /subscriptions/addons:
    get:
      tags:
      - Subscriptions
      summary: Get all add-ons
      description: "Returns a list of all available add-ons with their features and pricing.\r\n\r\nUse this endpoint to display the complete catalog of available add-ons."
      responses:
        '200':
          description: When request is successful. Returns a collection of 'AddOn' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddOnCollection'
        '500':
          description: When an error occurs while retrieving add-ons.
      x-excluded: true
  /subscriptions/addons/{id}:
    get:
      tags:
      - Subscriptions
      summary: Get an add-on
      description: "Returns the specified product add-on with its features and pricing.\r\n\r\nUse this endpoint to retreive add-on information when only an id is available."
      operationId: GetAddOnAsync
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: When request is successful. Returns an 'AddOn' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddOn'
        '404':
          description: When add-on with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while retrieving add-ons.
      x-excluded: true
  /{id}:
    post:
      tags:
      - Subscriptions
      summary: Add add-on
      description: "Adds a specific add-on to a subscription.\r\n\r\nImportant considerations:\r\n* Add-ons must be compatible with the subscription's current tier\r\n* Billing will be prorated for the remaining period"
      parameters:
      - name: subscriptionId
        in: query
        description: The unique identifier of the subscription
        schema:
          type: string
      - name: id
        in: path
        description: The identifier of the add-on to add
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When subscription or add-on with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while adding the add-on.
      x-excluded: true
    delete:
      tags:
      - Subscriptions
      summary: Remove add-on
      description: "Removes a specific add-on from a subscription.\r\n\r\nImportant considerations:\r\n* Billing will be prorated\r\n* Dependent add-ons may also be removed"
      parameters:
      - name: subscriptionId
        in: query
        description: The unique identifier of the subscription
        schema:
          type: string
      - name: id
        in: path
        description: The identifier of the add-on to remove
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When subscription or add-on with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while removing the add-on.
      x-excluded: true
  /subscriptions/{subscriptionId}/charges:
    get:
      tags:
      - Subscriptions
      operationId: GetSubscriptionUsageCharges
      parameters:
      - name: subscriptionId
        in: path
        required: true
        schema:
          type: string
      - name: From
        in: query
        description: Optional start date used to filter usage charges by created date.
        schema:
          type: string
          format: date-time
          example: '2022-04-01T00:00:00Z'
        example: '2022-04-01T00:00:00Z'
      - name: To
        in: query
        description: Optional end date used to filter usage charges by created date.
        schema:
          type: string
          format: date-time
          example: '2022-04-30T23:59:59Z'
        example: '2022-04-30T23:59:59Z'
      - name: Status
        in: query
        description: "Optional usage charge status filter.\r\n            \r\nPossible values: Pending, Succeeded, Failed, Canceled, Refunded."
        schema:
          type: string
      - name: MatterId
        in: query
        description: Optional matter id used to filter usage charges.
        schema:
          type: string
          example: '123456'
        example: '123456'
      - name: UserId
        in: query
        description: Optional user id used to filter usage charges.
        schema:
          type: string
          example: 3f44b470-5d39-41d0-a1ef-96e09e0eb5bb
        example: 3f44b470-5d39-41d0-a1ef-96e09e0eb5bb
      - name: ProductId
        in: query
        description: Optional internal product id used to filter usage charges.
        schema:
          type: string
          example: 6b07d1fc-a7ea-4da7-966f-eaa971f0e72c
        example: 6b07d1fc-a7ea-4da7-966f-eaa971f0e72c
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChargePagedCollection'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      x-excluded: true
  /subscriptions/{subscriptionId}/usages/{usageId}/charges:
    get:
      tags:
      - Subscriptions
      operationId: GetUsageCharges
      parameters:
      - name: subscriptionId
        in: path
        required: true
        schema:
          type: string
      - name: usageId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: From
        in: query
        description: Optional start date used to filter usage charges by created date.
        schema:
          type: string
          format: date-time
          example: '2022-04-01T00:00:00Z'
        example: '2022-04-01T00:00:00Z'
      - name: To
        in: query
        description: Optional end date used to filter usage charges by created date.
        schema:
          type: string
          format: date-time
          example: '2022-04-30T23:59:59Z'
        example: '2022-04-30T23:59:59Z'
      - name: Status
        in: query
        description: "Optional usage charge status filter.\r\n            \r\nPossible values: Pending, Succeeded, Failed, Canceled, Refunded."
        schema:
          type: string
      - name: MatterId
        in: query
        description: Optional matter id used to filter usage charges.
        schema:
          type: string
          example: '123456'
        example: '123456'
      - name: UserId
        in: query
        description: Optional user id used to filter usage charges.
        schema:
          type: string
          example: 3f44b470-5d39-41d0-a1ef-96e09e0eb5bb
        example: 3f44b470-5d39-41d0-a1ef-96e09e0eb5bb
      - name: ProductId
        in: query
        description: Optional internal product id used to filter usage charges.
        schema:
          type: string
          example: 6b07d1fc-a7ea-4da7-966f-eaa971f0e72c
        example: 6b07d1fc-a7ea-4da7-966f-eaa971f0e72c
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChargePagedCollection'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      x-excluded: true
    post:
      tags:
      - Subscriptions
      operationId: CreateUsageChargeAsync
      parameters:
      - name: subscriptionId
        in: path
        required: true
        schema:
          type: string
      - name: usageId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CreateUsageChargeRequest'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CreateUsageChargeRequest'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CreateUsageChargeRequest'
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      x-excluded: true
  /subscriptions/{subscriptionId}/charges/{id}:
    get:
      tags:
      - Subscriptions
      operationId: GetUsageCharge
      parameters:
      - name: subscriptionId
        in: path
        required: true
        schema:
          type: string
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Charge'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      x-excluded: true
  /subscriptions/{subscriptionId}/charges/{id}/cancel:
    post:
      tags:
      - Subscriptions
      operationId: CancelUsageChargeAsync
      parameters:
      - name: subscriptionId
        in: path
        required: true
        schema:
          type: string
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CancelUsageChargeRequest'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CancelUsageChargeRequest'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CancelUsageChargeRequest'
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      x-excluded: true
  /subscriptions/invoices:
    get:
      tags:
      - Subscriptions
      summary: Get subscription invoices
      description: "Retrieves invoices for the account.\r\n            \r\nInvoices are returned sorted by creation date with the most recent invoices appearing first."
      operationId: GetSubscriptionInvoicesAsync
      parameters:
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      - name: From
        in: query
        description: Search for invoices created on or after From (inclusive lower bound).
        schema:
          type: string
          format: date-time
      - name: To
        in: query
        description: Search for invoices created on or before To (inclusive upper bound).
        schema:
          type: string
          format: date-time
      - name: SubscriptionId
        in: query
        description: Search for invoices belonging to the specified internal subscription id.
        schema:
          type: string
      responses:
        '200':
          description: When request is successful. Returns a collection of 'SubscriptionInvoice' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionInvoicePagedCollection'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while retrieving the subscription invoices.
      x-excluded: true
  /subscriptions/{subscriptionId}/invoices:
    get:
      tags:
      - Subscriptions
      summary: Get subscription invoices
      description: "DEPRECATED - Use GET /subscriptions/invoices instead.\r\n\r\nRetrieves invoices for the specified subscription.\r\n            \r\nInvoices are returned sorted by creation date with the most recent invoices appearing first."
      operationId: GetSubscriptionInvoicesBackgroundsCompatibleAsync
      parameters:
      - name: subscriptionId
        in: path
        description: The unique identifier of the subscription
        required: true
        schema:
          type: string
      - name: limit
        in: query
        description: The maximum number of invoices to return.
        schema:
          type: integer
          format: int32
          default: 10
      responses:
        '200':
          description: When request is successful. Returns a collection of 'SubscriptionInvoice' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionInvoiceCollection'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while retrieving the subscription invoices.
      x-excluded: true
  /subscriptions/invoices/{invoiceId}/download:
    get:
      tags:
      - Subscriptions
      summary: Download invoice PDF
      description: Streams the invoice PDF retrieved from the payment provider as an attachment.
      operationId: DownloadInvoiceAsync
      parameters:
      - name: invoiceId
        in: path
        description: The unique identifier of the invoice
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: When request is successful. Returns the invoice PDF.
        '404':
          description: When the subscription or invoice does not exist, or the invoice has no PDF available (for example, draft invoices).
          content:
            application/pdf:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while downloading the invoice.
      x-excluded: true
  /subscriptions/invoices/{invoiceId}/url:
    get:
      tags:
      - Subscriptions
      summary: Get invoice download URL
      description: Returns a URL that can be used to download the invoice PDF directly from the payment provider.
      operationId: GetInvoiceDownloadUrlAsync
      parameters:
      - name: invoiceId
        in: path
        description: The unique identifier of the invoice
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: When request is successful. Returns an 'InvoiceDownloadUrl' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceDownloadUrl'
        '404':
          description: When the subscription or invoice does not exist, or the invoice has no PDF available (for example, draft invoices).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while retrieving the invoice URL.
      x-excluded: true
  /subscriptions:
    get:
      tags:
      - Subscriptions
      summary: Get subscriptions
      description: "Returns a list of all available subscriptions with their current status and details.\r\n\r\nThe response includes:\r\n* Subscription IDs\r\n* Current tier\r\n* Active add-ons\r\n* Subscription status"
      operationId: GetSubscriptions
      responses:
        '200':
          description: When request is successful. Returns a collection of 'Subscription' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionCollection'
        '500':
          description: When an error occurs while retrieving subscriptions.
      x-excluded: true
  /subscriptions/{id}:
    get:
      tags:
      - Subscriptions
      summary: Get subscription
      description: "Retrieves detailed information for a specific subscription.\r\n\r\nThe response includes:\r\n* Current tier\r\n* Active add-ons\r\n* Subscription status"
      operationId: GetSubscription
      parameters:
      - name: id
        in: path
        description: The unique identifier of the subscription
        required: true
        schema:
          type: string
      responses:
        '200':
          description: When request is successful. Returns a 'Subscription' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while retrieving the subscription.
      x-excluded: true
    patch:
      tags:
      - Subscriptions
      summary: Update subscription
      description: "Updates a subscriptions tiers, add-ons, or interval.\r\n\r\nImportant considerations:\r\n* Updates cannot be made to canceled subscriptions\r\n* Billing will be prorated for the remaining period\r\n* Existing add-ons may need to be re-validated\r\n* Some features may be disabled if not available in new tier or add-ons"
      operationId: UpdateSubscriptionAsync
      parameters:
      - name: id
        in: path
        description: The unique identifier of the subscription to update
        required: true
        schema:
          type: string
      requestBody:
        description: The subscription update request
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/UpdateSubscriptionRequest'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/UpdateSubscriptionRequest'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/UpdateSubscriptionRequest'
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while updating the subscription.
      x-excluded: true
  /subscriptions/settings:
    get:
      tags:
      - Subscriptions
      summary: Get subscription settings
      description: Retrieves settings for a subscription.
      operationId: GetSubscriptionSettings
      responses:
        '200':
          description: When request is successful. Returns a 'SubscriptionSettings' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionSettings'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      x-excluded: true
    patch:
      tags:
      - Subscriptions
      summary: Patch subscription settings
      description: Updates settings for a subscription.
      operationId: PatchSubscriptionSettingsAsync
      requestBody:
        description: The subscription settings patch payload
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/SubscriptionSettingsDto'
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriptionSettingsDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/SubscriptionSettingsDto'
      responses:
        '202':
          description: When request is accepted. Returns a 'Link' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
      x-excluded: true
  /subscriptions/{id}/promotions:
    get:
      tags:
      - Subscriptions
      summary: Get subscription promotions
      description: Retrieves promotions available for the specified subscription.
      operationId: GetSubscriptionPromotions
      parameters:
      - name: id
        in: path
        description: The unique identifier of the subscription
        required: true
        schema:
          type: string
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      responses:
        '200':
          description: When request is successful. Returns a paged collection of 'SubscriptionPromotion' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionPromotionPagedCollection'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while retrieving the subscription promotions.
      x-excluded: true
  /subscriptions/{id}/changes:
    get:
      tags:
      - Subscriptions
      summary: Get subscription changes
      description: Returns a log of changes made to the subscription through the API.
      operationId: GetSubscriptionChangesAsync
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: Offset
        in: query
        schema:
          maximum: 2147483647
          minimum: 0
          type: integer
          format: int32
      - name: Limit
        in: query
        schema:
          maximum: 500
          minimum: 1
          type: integer
          format: int32
      responses:
        '200':
          description: When request is successful. Returns a paged collection of 'SubscriptionAudit' objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionAuditPagedCollection'
        '500':
          description: When an error occurs while retrieving subscription changes.
      x-excluded: true
  /subscriptions/{id}/preview:
    post:
      tags:
      - Subscriptions
      summary: Preview upcoming subscription charges
      description: Returns a preview of upcoming subscription charges or refunds for any specified update to subscriptions tiers, add-ons, or interval.
      operationId: PreviewSubscriptionUpdateAsync
      parameters:
      - name: id
        in: path
        description: The unique identifier of the subscription
        required: true
        schema:
          type: string
      requestBody:
        description: The subscription upcoming request
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PreviewSubscriptionRequest'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PreviewSubscriptionRequest'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/PreviewSubscriptionRequest'
      responses:
        '200':
          description: When request is successful. Returns a 'SubscriptionPreview' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionPreview'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while updating the subscription.
      x-excluded: true
  /subscriptions/{id}/cancel:
    patch:
      tags:
      - Subscriptions
      summary: Cancel subscription
      description: "Cancels a subscription using the supplied cancellation request.\r\n\r\nSupported cancellation types:\r\n* PeriodEnd - Cancel subscription at the end of the billing cycle\r\n* Immediate - Cancel subscription immediately\r\n* Date - Cancel at specified 'CancelAt' date\r\n\r\nIf not supplied, PeriodEnd is used and the subscription is cancelled at the end of the billing cycle.\r\n\r\nDefault behaviour:\r\n* If the subscription is trialing a tier, the tier is reverted to the previous tier at the end of the trials duration. This is only supported with PeriodEnd CancellationType.\r\n* If the subscription is trialing add-on(s), the add-on is removed at the end of the trials duration. This is only supported with PeriodEnd CancellationType.\r\n\r\nImportant considerations:\r\n* If 'cancelSubscription' is specified and set to 'true', the default behaviour specified above is ignored and the cancellation is applied directly on the subscription."
      operationId: CancelSubscriptionAsync
      parameters:
      - name: id
        in: path
        description: The unique identifier of the subscription
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json-patch+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CancelSubscriptionRequest'
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CancelSubscriptionRequest'
          application/*+json:
            schema:
              allOf:
              - $ref: '#/components/schemas/CancelSubscriptionRequest'
      responses:
        '200':
          description: When request is successful. Returns a 'CancellationResponse' object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CancellationResponse'
        '400':
          description: When an unsupported request is made.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: When subscription with specified id does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '500':
          description: When an error occurs while canceling the subscription.
      x-excluded: true
  /subscriptions/{id}/resume:
    patch:
      tags:
      - Subscriptions
      summary: Resume subscription
      description: "Resumes a subscription that is pending cancellation or is already canceled.\r\n\r\nIf the subscription is in a CANCELED state:\r\n * An immediate charge for the subscription amount will be trigered.\r\n * If the charge is unsuccessful, the subscription will be moved to PASTDUE status until a charge is successful.\r\n * If all charge retry attempts fail, the subscription will be become CANCELED once again.\r\nIf the subscription is in the PENDING cancellation state:\r\n * The existing billing cycle will remain in place"
      operationId: ResumeSubscriptionAsync
      parameters:
      - name: id
        in: path
        description: The unique identifier of the subscription
        required: true
        schem

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