ThriveCart API

REST API for a ThriveCart account. Reads products, bump offers, upsells, downsells and their pricing options; searches transactions and affiliates; reads customer records; refunds transactions; cancels, pauses and resumes subscriptions; creates and manages affiliates and their commissions; creates Learn students; and creates or removes targeted event subscriptions. Authenticated with an account API key or an OAuth 2.0 access token sent as a bearer token. Rate limited to 60 requests per minute per connected account.

Documentation

Specifications

Other Resources

OpenAPI Specification

thrivecart-api-openapi.yml Raw ↑
# Derived by API Evangelist from ThriveCart's first-party Postman collection.
# Source: https://apidocs.thrivecart.com/ (collection 13408532-d1b367e5-6d66-4b28-871e-b33ece602ddc)
# Fetched: 2026-08-12. ThriveCart publishes no OpenAPI of its own.
openapi: 3.1.0
info:
  title: ThriveCart API
  version: '1'
  description: 'The ThriveCart API lets you read and manage the products, bumps, upsells, downsells, transactions,
    customers, subscriptions, affiliates and Learn students in a ThriveCart account, and to create targeted
    event subscriptions (webhooks).


    This OpenAPI document is DERIVED by API Evangelist from ThriveCart''s own published Postman collection
    (https://apidocs.thrivecart.com/). Every path, method, parameter, request field, description and example
    response body is carried over from that first-party source. ThriveCart does not publish an OpenAPI
    definition of its own.'
  termsOfService: https://thrivecart.com/legal/thrivecart/
  contact:
    name: ThriveCart Developer Support
    url: https://developers.thrivecart.com/
    email: support@thrivecart.com
externalDocs:
  description: ThriveCart Developers
  url: https://developers.thrivecart.com/documentation/
servers:
- url: https://thrivecart.com/api/external
  description: Production
tags:
- name: Account
- name: Products
- name: Bumps
- name: Upsells
- name: Downsells
- name: Transactions
- name: Customers
- name: Subscriptions
- name: Affiliates
- name: Learn
- name: Event subscriptions
security:
- bearerAuth: []
- oauth2: []
paths:
  /ping:
    get:
      operationId: ping
      summary: Ping
      description: Get information about the account that your API key or access token grants access to.
        No parameters are required for this endpoint. It's also useful to check the validity of your token.
      tags:
      - Account
      responses:
        '401':
          description: Invalid/expired credentials
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  error_description:
                    type: string
              examples:
                Invalid_expired_credentials:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '200':
          description: Ping
          content:
            application/json:
              schema:
                type: object
                properties:
                  account_name:
                    type: string
                  account_id:
                    type: string
                  account_version:
                    type: string
                  account_url:
                    type: string
                  user_id:
                    type: string
                  user_username:
                    type: string
                  user_name:
                    type: string
                  custom_domain_enabled:
                    type: boolean
                  custom_domain: {}
              examples:
                Ping:
                  value:
                    account_name: myaccount
                    account_id: '1'
                    account_version: pro
                    account_url: https://myaccount.thrivecart.com/
                    user_id: '1'
                    user_username: marc@thrivecart.com
                    user_name: Marc Fowler
                    custom_domain_enabled: false
                    custom_domain: null
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /products:
    get:
      operationId: listProducts
      summary: List products
      tags:
      - Products
      responses:
        '200':
          description: List products
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    product_id:
                      type: string
                    name:
                      type: string
                    label:
                      type: string
                    url:
                      type: string
                    embed_type:
                      type: string
                    status:
                      type: string
                    statusString:
                      type: string
                    type:
                      type: string
                    typeString:
                      type: string
              examples:
                List_products:
                  value:
                  - product_id: '2'
                    name: My Example Product
                    label: Internal label for this product
                    url: https://myaccount.thrivecart.com/my-example-product/
                    embed_type: standard
                    status: '2'
                    statusString: live
                    type: '1'
                    typeString: digital
                  - product_id: '1'
                    name: My First Product
                    label: Optional internal label
                    url: https://myaccount.thrivecart.com/my-first-product/
                    embed_type: standard
                    status: '1'
                    statusString: test
                    type: '2'
                    typeString: physical
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /bumps:
    get:
      operationId: listBumpOffers
      summary: List bump offers
      tags:
      - Bumps
      responses:
        '200':
          description: List bump offers
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    product_id:
                      type: string
                    product_name:
                      type: string
                    product_label:
                      type: string
                    bump_id:
                      type: string
                    bump_name:
                      type: string
                    name:
                      type: string
                    id:
                      type: string
                    url:
                      type: string
                    embed_type:
                      type: string
                    status:
                      type: string
                    statusString:
                      type: string
                    type:
                      type: string
                    typeString:
                      type: string
                    payment_currency:
                      type: string
                    payment_amount:
                      type: integer
              examples:
                List_bump_offers:
                  value:
                  - product_id: '4'
                    product_name: My Product + Bump
                    product_label: Internal product label
                    bump_id: '4'
                    bump_name: Special Bump Offer
                    name: Special Bump Offer
                    id: '4'
                    url: https://myaccount.thrivecart.com/my-bump/
                    embed_type: standard
                    status: '2'
                    statusString: live
                    type: '1'
                    typeString: digital
                    payment_currency: GBP
                    payment_amount: 3200
                  - product_id: '1'
                    product_name: Product with Bump
                    product_label: Internal label for this product
                    bump_id: '1'
                    bump_name: Demo Bump
                    name: Demo Bump
                    id: '1'
                    url: https://myaccount.thrivecart.com/product-with-bump/
                    embed_type: standard
                    status: '2'
                    statusString: live
                    type: '1'
                    typeString: digital
                    payment_currency: USD
                    payment_amount: 1200
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /upsells:
    get:
      operationId: listUpsells
      summary: List upsells
      tags:
      - Upsells
      responses:
        '200':
          description: List upsells
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    upsell_id:
                      type: string
                    name:
                      type: string
                    label:
                      type: string
                    type:
                      type: string
                    typeString:
                      type: string
              examples:
                List_upsells:
                  value:
                  - upsell_id: '2'
                    name: My Example Upsell
                    label: Internal label for this upsell
                    type: '1'
                    typeString: digital
                  - upsell_id: '1'
                    name: My First Upsell
                    label: Optional internal label
                    type: '2'
                    typeString: physical
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /downsells:
    get:
      operationId: listDownsells
      summary: List downsells
      tags:
      - Downsells
      responses:
        '200':
          description: List downsells
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    downsell_id:
                      type: string
                    name:
                      type: string
                    label:
                      type: string
                    type:
                      type: string
                    typeString:
                      type: string
              examples:
                List_downsells:
                  value:
                  - downsell_id: '2'
                    name: My Demo Downsell
                    label: Internal label for this downsell
                    type: '1'
                    typeString: digital
                  - downsell_id: '1'
                    name: My Example Downsell
                    label: Optional internal label
                    type: '1'
                    typeString: digital
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /products/{product_id}:
    get:
      operationId: getProduct
      summary: Get product
      tags:
      - Products
      parameters:
      - name: product_id
        in: path
        required: true
        description: Product ID
        schema:
          type: string
      responses:
        '200':
          description: Product details
          content:
            application/json:
              schema:
                type: object
                properties:
                  product_id:
                    type: string
                  name:
                    type: string
                  slug:
                    type: string
                  label:
                    type: string
                  status:
                    type: string
                  statusString:
                    type: string
                  type:
                    type: string
                  typeString:
                    type: string
                  payment_currency:
                    type: string
                  url:
                    type: string
                  embed_type:
                    type: string
              examples:
                Product_details:
                  value:
                    product_id: '1'
                    name: My Product
                    slug: my-product
                    label: Internal label for this product
                    status: '2'
                    statusString: live
                    type: '1'
                    typeString: digital
                    payment_currency: USD
                    url: https://myaccount.thrivecart.com/my-product/
                    embed_type: standard
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /products/{product_id}/pricing_options:
    get:
      operationId: getProductPriceDetails
      summary: Get product price details
      tags:
      - Products
      parameters:
      - name: product_id
        in: path
        required: true
        description: product_id path parameter.
        schema:
          type: string
      - name: affiliate_id
        in: query
        required: false
        description: (Optional) Provide an affiliate ID to query the commissions tailored to this specific
          affiliate
        schema:
          type: string
      responses:
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /bumps/{bump_id}:
    get:
      operationId: getBump
      summary: Get bump
      tags:
      - Bumps
      parameters:
      - name: bump_id
        in: path
        required: true
        description: bump_id path parameter.
        schema:
          type: string
      responses:
        '404':
          description: No such bump
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  reason:
                    type: string
              examples:
                No_such_bump:
                  value:
                    error: method.exception
                    reason: The requested bump cannot be identified.
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '200':
          description: Bump offer details
          content:
            application/json:
              schema:
                type: object
                properties:
                  product_id:
                    type: string
                  product_name:
                    type: string
                  bump_id:
                    type: string
                  name:
                    type: string
                  slug:
                    type: string
                  label:
                    type: string
                  status:
                    type: string
                  statusString:
                    type: string
                  type:
                    type: string
                  typeString:
                    type: string
                  payment_currency:
                    type: string
                  url:
                    type: string
                  embed_type:
                    type: string
              examples:
                Bump_offer_details:
                  value:
                    product_id: '1'
                    product_name: My Bump Product
                    bump_id: '1'
                    name: My Bump
                    slug: my-bump-product
                    label: ''
                    status: '2'
                    statusString: live
                    type: '1'
                    typeString: digital
                    payment_currency: USD
                    url: https://myaccount.thrivecart.com/my-bump-product/
                    embed_type: standard
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /bumps/{bump_id}/pricing_options:
    get:
      operationId: getBumpPriceDetails
      summary: Get bump price details
      tags:
      - Bumps
      parameters:
      - name: bump_id
        in: path
        required: true
        description: bump_id path parameter.
        schema:
          type: string
      responses:
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /upsells/{upsell_id}:
    get:
      operationId: getUpsell
      summary: Get upsell
      tags:
      - Upsells
      parameters:
      - name: upsell_id
        in: path
        required: true
        description: Upsell ID
        schema:
          type: string
      responses:
        '200':
          description: Upsell details
          content:
            application/json:
              schema:
                type: object
                properties:
                  upsell_id:
                    type: string
                  name:
                    type: string
                  label:
                    type: string
              examples:
                Upsell_details:
                  value:
                    upsell_id: '1'
                    name: 'Example Upsell #123'
                    label: Internal label for this upsell
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /upsells/{upsell_id}/pricing_options:
    get:
      operationId: getUpsellPriceDetails
      summary: Get upsell price details
      tags:
      - Upsells
      parameters:
      - name: upsell_id
        in: path
        required: true
        description: upsell_id path parameter.
        schema:
          type: string
      responses:
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /downsells/{downsell_id}:
    get:
      operationId: getDownsell
      summary: Get downsell
      tags:
      - Downsells
      parameters:
      - name: downsell_id
        in: path
        required: true
        description: Downsell ID
        schema:
          type: string
      responses:
        '200':
          description: Downsell details
          content:
            application/json:
              schema:
                type: object
                properties:
                  downsell_id:
                    type: string
                  name:
                    type: string
                  label:
                    type: string
              examples:
                Downsell_details:
                  value:
                    downsell_id: '1'
                    name: My Demo Downsell
                    label: Internal label for this downsell
          headers:
            X-ThriveCart-Account-Name:
              description: X-ThriveCart-Account-Name
              schema:
                type: string
              example: myaccount
            X-ThriveCart-Account-URL:
              description: X-ThriveCart-Account-URL
              schema:
                type: string
              example: https://myaccount.thrivecart.com/
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /downsells/{downsell_id}/pricing_options:
    get:
      operationId: getDownsellPriceDetails
      summary: Get downsell price details
      tags:
      - Downsells
      parameters:
      - name: downsell_id
        in: path
        required: true
        description: downsell_id path parameter.
        schema:
          type: string
      responses:
        '401':
          description: Unauthorized - the API key or access token is missing, invalid or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                auth_missing:
                  value:
                    error: auth.missing
                invalid_token:
                  value:
                    error: invalid_token
                    error_description: The access token provided is invalid
        '429':
          description: Too Many Requests - the account has exceeded 60 requests per minute.
      security:
      - bearerAuth: []
      - oauth2: []
  /transactions:
    get:
      operationId: searchTransactions
      summary: Search transactions
      description: 'Search through transaction events and return the info about activity within your account.


        Events such as charges, rebills, refunds and cancellations will be included under the transaction_type
        key.'
      tags:
      - Transactions
      parameters:
      - name: page
        in: query
        required: true
        description: Page number (1 through N)
        schema:
          type: string
        example: '1'
      - name: perPage
        in: query
        required: true
        description: Results per page (max of 100)
        schema:
          type: string
        example: '10'
      - name: query
        in: query
        required: true
        description: Search query (e.g. customer email, order ID, etc)
        schema:
          type: string
      - name: transactionType
        in: query
        required: true
        description: '''any'', ''charge'', ''rebill'', ''refund'', ''cancel'''
        schema:
          type: string
        example: any
      - name: currency
        in: query
        required: true
        description: '''usd'', ''gbp'', etc (optional; leave blank for all currencies)'
        schema:
          type: string
      responses:
        '200':
          description: Search transactions
          content:
            application/json:
              schema:
                type: object
                properties:
                  transactions:
                    type: array
                    items:
                      type: object
                      properties:
                        event_id:
                          type: string
                        base_product:
                          type: string
                        date:
                          type: string
                        time:
                          type: string
                        timestamp:
                          type: integer
                        transaction_type:
                          type: string
                        item_type:
                          type: string
                        item_id:
                          type: integer
                        amount:
                          type: integer
                        order_id:
                          type: string
                        invoice_id:
                          type: string
                    

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