Stigg Subscriptions API

Subscription lifecycle management.

OpenAPI Specification

stigg-subscriptions-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Stigg Coupons Subscriptions API
  description: Stigg is a pricing and packaging platform providing feature management, entitlements, and usage-based billing for SaaS and API products. The Stigg API exposes GraphQL and REST endpoints for customer provisioning, subscription management, entitlement checking, and usage reporting. Authentication requires a Full access key passed via the X-API-KEY header.
  version: '1.0'
  contact:
    url: https://www.stigg.io/
  termsOfService: https://www.stigg.io/terms
servers:
- url: https://api.stigg.io
  description: Stigg Production API
security:
- ApiKey: []
tags:
- name: Subscriptions
  description: Subscription lifecycle management.
paths:
  /graphql:
    post:
      operationId: executeGraphQL
      summary: Execute GraphQL Query or Mutation
      description: Execute any Stigg GraphQL query or mutation. Stigg uses GraphQL as its primary API. Send a JSON body with a query/mutation string and optional variables. Supports customer management, subscription operations, entitlement checks, and usage reporting.
      tags:
      - Subscriptions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GraphQLRequest'
            examples:
              provisionCustomer:
                summary: Provision a Customer
                value:
                  query: "mutation ProvisionCustomer($input: ProvisionCustomerInput!) {\n  provisionCustomer(input: $input) {\n    customer { id name email }\n    subscription { id status plan { id name } }\n  }\n}\n"
                  variables:
                    input:
                      customerId: customer-123
                      name: Acme Corp
                      email: admin@acme.com
              checkEntitlement:
                summary: Check Feature Entitlement
                value:
                  query: "query GetCustomerEntitlement($customerId: String!, $featureId: String!) {\n  customerEntitlement(customerId: $customerId, featureId: $featureId) {\n    isGranted\n    usageLimit\n    currentUsage\n    resetPeriod\n  }\n}\n"
                  variables:
                    customerId: customer-123
                    featureId: feature-api-calls
              reportUsage:
                summary: Report Feature Usage
                value:
                  query: "mutation ReportUsage($input: ReportUsageInput!) {\n  reportUsage(input: $input) { id }\n}\n"
                  variables:
                    input:
                      customerId: customer-123
                      featureId: feature-api-calls
                      value: 100
      responses:
        '200':
          description: GraphQL response (may contain data or errors).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GraphQLResponse'
        '401':
          description: Invalid or missing X-API-KEY header.
  /api/v1/subscriptions:
    post:
      tags:
      - Subscriptions
      summary: Provision subscription
      description: Creates a new subscription for an existing customer. When payment is required and no payment method exists, returns a checkout URL.
      operationId: SubscriptionController_provisionSubscription
      parameters:
      - name: X-ACCOUNT-ID
        in: header
        required: false
        schema:
          type: string
      - name: X-ENVIRONMENT-ID
        in: header
        required: false
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProvisionSubscriptionRequestDto'
            examples:
              basic:
                summary: Provision a subscription
                value:
                  customerId: customer-123
                  planId: plan-pro
      responses:
        '201':
          description: The newly created subscription object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponseDto'
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadInputErrorResponseDto'
        '401':
          description: User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthenticatedErrorResponseDto'
        '403':
          description: User is not allowed to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenErrorResponseDto'
        '409':
          description: Subscription conflict error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictErrorResponseDto'
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsErrorResponseDto'
    get:
      tags:
      - Subscriptions
      summary: List subscriptions
      description: Retrieves a paginated list of subscriptions, with optional filters for customer, status, and plan.
      operationId: SubscriptionController_getSubscriptions
      parameters:
      - name: after
        required: false
        in: query
        schema:
          format: uuid
          type: string
      - name: before
        required: false
        in: query
        schema:
          format: uuid
          type: string
      - name: limit
        required: false
        in: query
        schema:
          minimum: 1
          maximum: 100
          default: 20
          type: integer
      - name: customerId
        required: false
        in: query
        description: Filter by customer ID
        schema:
          type: string
      - name: status
        required: false
        in: query
        description: Filter by subscription status
        schema:
          type: string
          enum:
          - active
          - canceled
          - trial
          - paused
      - name: X-ACCOUNT-ID
        in: header
        required: false
        schema:
          type: string
      - name: X-ENVIRONMENT-ID
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: A paginated list of subscription objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionListResponseDto'
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadInputErrorResponseDto'
        '401':
          description: User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthenticatedErrorResponseDto'
        '403':
          description: User is not allowed to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenErrorResponseDto'
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsErrorResponseDto'
  /api/v1/subscriptions/{id}:
    get:
      tags:
      - Subscriptions
      summary: Get subscription by ID
      description: Retrieves a subscription by its unique identifier, including plan details, billing period, status, and add-ons.
      operationId: SubscriptionController_getSubscription
      parameters:
      - name: id
        required: true
        in: path
        description: The unique identifier of the subscription
        schema:
          minLength: 1
          maxLength: 255
          type: string
      - name: X-ACCOUNT-ID
        in: header
        required: false
        schema:
          type: string
      - name: X-ENVIRONMENT-ID
        in: header
        required: false
        schema:
          type: string
      responses:
        '200':
          description: The subscription object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponseDto'
        '401':
          description: User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthenticatedErrorResponseDto'
        '403':
          description: User is not allowed to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenErrorResponseDto'
        '404':
          description: Subscription not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundErrorResponseDto'
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsErrorResponseDto'
  /api/v1/subscriptions/{id}/cancel:
    post:
      tags:
      - Subscriptions
      summary: Cancel subscription
      description: Cancels an active subscription, either immediately or at a specified time such as end of billing period.
      operationId: SubscriptionController_cancelSubscription
      parameters:
      - name: id
        required: true
        in: path
        description: The unique identifier of the subscription
        schema:
          minLength: 1
          maxLength: 255
          type: string
      - name: X-ACCOUNT-ID
        in: header
        required: false
        schema:
          type: string
      - name: X-ENVIRONMENT-ID
        in: header
        required: false
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelSubscriptionRequestDto'
      responses:
        '200':
          description: The canceled subscription object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponseDto'
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadInputErrorResponseDto'
        '401':
          description: User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthenticatedErrorResponseDto'
        '403':
          description: User is not allowed to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenErrorResponseDto'
        '404':
          description: Subscription not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundErrorResponseDto'
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsErrorResponseDto'
  /api/v1/subscriptions/preview:
    post:
      tags:
      - Subscriptions
      summary: Preview subscription
      description: Previews the pricing impact of creating or updating a subscription without making changes. Returns estimated costs, taxes, and proration details.
      operationId: SubscriptionController_previewSubscription
      parameters:
      - name: X-ACCOUNT-ID
        in: header
        required: false
        schema:
          type: string
      - name: X-ENVIRONMENT-ID
        in: header
        required: false
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PreviewSubscriptionRequestDto'
      responses:
        '200':
          description: Subscription pricing preview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreviewSubscriptionResponseDto'
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadInputErrorResponseDto'
        '401':
          description: User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthenticatedErrorResponseDto'
        '403':
          description: User is not allowed to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenErrorResponseDto'
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsErrorResponseDto'
components:
  schemas:
    GraphQLResponse:
      type: object
      properties:
        data:
          type: object
          description: Response data from the GraphQL operation.
          additionalProperties: true
        errors:
          type: array
          description: Array of GraphQL errors if any occurred.
          items:
            $ref: '#/components/schemas/GraphQLError'
    SubscriptionListResponseDto:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/SubscriptionDto'
        pagination:
          $ref: '#/components/schemas/PaginationDto'
      required:
      - data
      - pagination
      description: Paginated list of subscriptions.
    SubscriptionResponseDto:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/SubscriptionDto'
      required:
      - data
      description: Single subscription response.
    NotFoundErrorResponseDto:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
          nullable: true
      required:
      - message
      - code
      description: Resource not found error response.
    PreviewSubscriptionResponseDto:
      type: object
      properties:
        data:
          type: object
          properties:
            immediateInvoice:
              type: object
              properties:
                total:
                  type: number
                  description: Total invoice amount.
                subtotal:
                  type: number
                  description: Subtotal before tax.
                tax:
                  type: number
                  description: Tax amount.
                currency:
                  type: string
                  description: Invoice currency code.
              description: Immediate invoice details.
            nextInvoice:
              type: object
              properties:
                total:
                  type: number
                subtotal:
                  type: number
                tax:
                  type: number
                currency:
                  type: string
              description: Next recurring invoice details.
      description: Subscription pricing preview response.
    TooManyRequestsErrorResponseDto:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
          enum:
          - RateLimitExceeded
          nullable: true
      required:
      - message
      - code
      description: Rate limit exceeded error response.
    SubscriptionDto:
      type: object
      properties:
        id:
          type: string
          description: Unique subscription identifier.
        customerId:
          type: string
          description: The customer this subscription belongs to.
        planId:
          type: string
          description: The plan this subscription is for.
        status:
          type: string
          enum:
          - ACTIVE
          - CANCELED
          - TRIAL
          - PAUSED
          - IN_TRIAL
          description: Subscription lifecycle status.
        billingPeriod:
          type: string
          enum:
          - MONTHLY
          - ANNUALLY
          description: Billing recurrence period.
        startDate:
          type: string
          format: date-time
          description: Subscription start date.
        endDate:
          type: string
          format: date-time
          description: Subscription end date (if applicable).
          nullable: true
        trialEndDate:
          type: string
          format: date-time
          description: Trial period end date.
          nullable: true
        addons:
          type: array
          items:
            $ref: '#/components/schemas/AddonDto'
          description: Add-ons attached to this subscription.
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Additional metadata.
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
      - id
      - customerId
      - planId
      - status
      - createdAt
      - updatedAt
      description: A subscription linking a customer to a pricing plan.
    GraphQLRequest:
      type: object
      required:
      - query
      properties:
        query:
          type: string
          description: GraphQL query or mutation string.
        variables:
          type: object
          description: Variables for the GraphQL operation.
          additionalProperties: true
        operationName:
          type: string
          description: Named operation to execute when the document contains multiple.
    GraphQLError:
      type: object
      properties:
        message:
          type: string
          description: Human-readable error message.
        locations:
          type: array
          items:
            type: object
            properties:
              line:
                type: integer
              column:
                type: integer
        path:
          type: array
          items:
            type: string
        extensions:
          type: object
          additionalProperties: true
    ProvisionSubscriptionRequestDto:
      type: object
      properties:
        customerId:
          type: string
          description: The ID of the customer to provision the subscription for.
        planId:
          type: string
          description: The ID of the plan to subscribe the customer to.
        billingPeriod:
          type: string
          enum:
          - MONTHLY
          - ANNUALLY
          description: Billing recurrence period.
        addons:
          type: array
          items:
            $ref: '#/components/schemas/AddonDto'
          description: Add-ons to include in the subscription.
        startDate:
          type: string
          format: date-time
          description: When the subscription should start (defaults to now).
          nullable: true
        trialPeriodDays:
          type: integer
          description: Number of trial days before billing begins.
          nullable: true
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Additional metadata.
      required:
      - customerId
      - planId
      additionalProperties: false
      description: Creates a new subscription for an existing customer.
    ForbiddenErrorResponseDto:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
          enum:
          - IdentityForbidden
          - AccessDeniedError
          - NoFeatureEntitlementError
          nullable: true
      required:
      - message
      - code
      description: Authorization error response.
    CancelSubscriptionRequestDto:
      type: object
      properties:
        endDate:
          type: string
          format: date-time
          description: When to cancel the subscription (defaults to immediate cancellation).
          nullable: true
        cancelAt:
          type: string
          enum:
          - END_OF_BILLING_PERIOD
          - IMMEDIATE
          description: Cancellation timing strategy.
          nullable: true
      additionalProperties: false
      description: Options for canceling a subscription.
    UnauthenticatedErrorResponseDto:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
          enum:
          - Unauthenticated
          nullable: true
      required:
      - message
      - code
      description: Authentication error response.
    PaginationDto:
      type: object
      properties:
        next:
          type: string
          format: uuid
          description: Cursor for fetching the next page of results, or null if no additional pages exist.
          nullable: true
        prev:
          type: string
          format: uuid
          description: Cursor for fetching the previous page of results, or null if at the beginning.
          nullable: true
      required:
      - next
      - prev
      description: Pagination metadata including cursors for navigating through results.
    AddonDto:
      type: object
      properties:
        addonId:
          type: string
          description: The add-on identifier.
        quantity:
          type: integer
          description: The quantity of the add-on.
      description: An add-on attached to a subscription.
    PreviewSubscriptionRequestDto:
      type: object
      properties:
        customerId:
          type: string
          description: The customer ID.
        planId:
          type: string
          description: The plan ID.
        billingPeriod:
          type: string
          enum:
          - MONTHLY
          - ANNUALLY
          description: Billing recurrence period.
        addons:
          type: array
          items:
            $ref: '#/components/schemas/AddonDto'
          description: Add-ons to include in the preview.
      required:
      - customerId
      - planId
      description: Parameters for previewing a subscription without creating it.
    BadInputErrorResponseDto:
      type: object
      properties:
        message:
          type: string
          description: Human-readable error message.
        code:
          type: string
          description: Machine-readable error code.
          nullable: true
      required:
      - message
      - code
      description: Bad request error response.
    ConflictErrorResponseDto:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
          enum:
          - DuplicatedEntityNotAllowed
          - EntitlementBelongsToFeatureGroupError
          nullable: true
      required:
      - message
      - code
      description: Conflict error response (e.g., duplicate resource).
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-API-KEY
      description: Full access key from the Stigg dashboard (Integrations > API keys).