Bold Customers API

List, retrieve, create, and update customer records tied to a shop, used across checkout, subscriptions, and pricing to associate orders and recurring plans with shoppers.

OpenAPI Specification

bold-commerce-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Bold Commerce API
  description: >-
    Bold Commerce provides modular e-commerce APIs for subscriptions, headless
    checkout, and pricing, plus supporting Products, Customers, and Shops APIs.
    All requests are made against https://api.boldcommerce.com and authenticated
    with a Bearer token - either an OAuth 2.0 access token (public integrations,
    obtained through the Developer Dashboard authorization-code flow) or a scoped
    API access token (private integrations, generated in the Bold Account
    Center). Most paths are scoped to a shop_identifier GUID that is retrieved
    from the Shops API. Versioned endpoints accept a Bold-API-Version-Date
    header. Endpoints below are modeled from Bold's public developer
    documentation; request and response schemas are representative.
  version: '1.0'
  contact:
    name: Bold Commerce
    url: https://developer.boldcommerce.com
servers:
  - url: https://api.boldcommerce.com
    description: Bold Commerce API
security:
  - bearerAuth: []
tags:
  - name: Subscriptions
    description: Recurring orders, intervals, and subscription management.
  - name: Checkout
    description: Headless storefront checkout order operations.
  - name: Price Rules
    description: Discounts, promotions, and dynamic pricing.
  - name: Products
    description: Product catalog for a shop.
  - name: Customers
    description: Customer records tied to a shop.
  - name: Shops
    description: Shop configuration and shop_identifier lookup.
paths:
  /subscriptions/v1/shops/{shop_identifier}/subscriptions:
    get:
      operationId: listSubscriptions
      tags:
        - Subscriptions
      summary: List subscriptions
      description: Retrieve a list of subscriptions for the shop.
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
      responses:
        '200':
          description: A list of subscriptions.
          content:
            application/json:
              schema:
                type: object
                properties:
                  subscriptions:
                    type: array
                    items:
                      $ref: '#/components/schemas/Subscription'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createSubscription
      tags:
        - Subscriptions
      summary: Create a subscription
      description: Create a new subscription for the shop.
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Subscription'
      responses:
        '201':
          description: The created subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /subscriptions/v1/shops/{shop_identifier}/subscriptions/{subscription_id}:
    get:
      operationId: getSubscription
      tags:
        - Subscriptions
      summary: Retrieve a subscription
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: The subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: replaceSubscription
      tags:
        - Subscriptions
      summary: Update a subscription
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Subscription'
      responses:
        '200':
          description: The updated subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
    patch:
      operationId: patchSubscription
      tags:
        - Subscriptions
      summary: Partially update a subscription
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Subscription'
      responses:
        '200':
          description: The updated subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
  /subscriptions/v1/shops/{shop_identifier}/subscriptions/{subscription_id}/pause:
    post:
      operationId: pauseSubscription
      tags:
        - Subscriptions
      summary: Pause a subscription
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: The paused subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
  /subscriptions/v1/shops/{shop_identifier}/subscriptions/{subscription_id}/cancel:
    post:
      operationId: cancelSubscription
      tags:
        - Subscriptions
      summary: Cancel a subscription
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: The cancelled subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
  /subscriptions/v1/shops/{shop_identifier}/subscriptions/{subscription_id}/activate:
    post:
      operationId: activateSubscription
      tags:
        - Subscriptions
      summary: Reactivate a subscription
      description: Reactivate an inactive or cancelled subscription.
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: The reactivated subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
  /subscriptions/v1/shops/{shop_identifier}/subscriptions/{subscription_id}/line_items:
    post:
      operationId: addSubscriptionLineItems
      tags:
        - Subscriptions
      summary: Add line items to a subscription
      description: Add one or more line items to a subscription.
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                line_items:
                  type: array
                  items:
                    $ref: '#/components/schemas/LineItem'
      responses:
        '200':
          description: The updated subscription.
  /subscriptions/v1/shops/{shop_identifier}/subscriptions/{subscription_id}/intervals:
    get:
      operationId: listSubscriptionIntervals
      tags:
        - Subscriptions
      summary: List subscription intervals
      description: Retrieve a list of available intervals for a subscription.
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: A list of intervals.
  /subscriptions/v1/shops/{shop_identifier}/subscriptions/{subscription_id}/orders:
    get:
      operationId: listSubscriptionOrders
      tags:
        - Subscriptions
      summary: List subscription orders
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: A list of orders for the subscription.
  /subscriptions/v1/shops/{shop_identifier}/subscriptions/{subscription_id}/orders/{order_id}/skip:
    put:
      operationId: skipSubscriptionOrder
      tags:
        - Subscriptions
      summary: Skip an upcoming order
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - $ref: '#/components/parameters/SubscriptionId'
        - name: order_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: The skipped order.
  /checkout/storefront/{shop_id}/{order_id}/addresses/shipping:
    post:
      operationId: setShippingAddress
      tags:
        - Checkout
      summary: Set the shipping address
      description: Sets the shipping address on the order.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Address'
      responses:
        '200':
          description: The updated order application state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutState'
    get:
      operationId: getShippingAddress
      tags:
        - Checkout
      summary: Retrieve the shipping address
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      responses:
        '200':
          description: The shipping address.
  /checkout/storefront/{shop_id}/{order_id}/addresses/billing:
    post:
      operationId: setBillingAddress
      tags:
        - Checkout
      summary: Set the billing address
      description: Sets the billing address on the order.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Address'
      responses:
        '200':
          description: The updated order application state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutState'
  /checkout/storefront/{shop_id}/{order_id}/line_items:
    post:
      operationId: addCheckoutLineItems
      tags:
        - Checkout
      summary: Add line items to the order
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                line_items:
                  type: array
                  items:
                    $ref: '#/components/schemas/LineItem'
      responses:
        '200':
          description: The updated order application state.
  /checkout/storefront/{shop_id}/{order_id}/discounts:
    post:
      operationId: applyCheckoutDiscount
      tags:
        - Checkout
      summary: Apply a discount code to the order
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
      responses:
        '200':
          description: The updated order application state.
  /checkout/storefront/{shop_id}/{order_id}/payments:
    post:
      operationId: addCheckoutPayment
      tags:
        - Checkout
      summary: Add a payment to the order
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                token:
                  type: string
                amount:
                  type: integer
      responses:
        '200':
          description: The updated order application state.
  /price_rules/rules/v2/shops/{shop_identifier}/rulesets:
    get:
      operationId: listRulesets
      tags:
        - Price Rules
      summary: List rulesets
      description: List all rulesets available for the specified shop.
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
      responses:
        '200':
          description: A list of rulesets.
          content:
            application/json:
              schema:
                type: object
                properties:
                  rulesets:
                    type: array
                    items:
                      $ref: '#/components/schemas/Ruleset'
    post:
      operationId: createRuleset
      tags:
        - Price Rules
      summary: Create a ruleset
      description: Create a new ruleset. Requires the write_price_rulesets scope.
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Ruleset'
      responses:
        '201':
          description: The created ruleset.
  /price_rules/rules/v2/shops/{shop_identifier}/rulesets/{ruleset_id}:
    get:
      operationId: getRuleset
      tags:
        - Price Rules
      summary: Retrieve a ruleset
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - name: ruleset_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: The ruleset.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ruleset'
    put:
      operationId: updateRuleset
      tags:
        - Price Rules
      summary: Update a ruleset
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - name: ruleset_id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Ruleset'
      responses:
        '200':
          description: The updated ruleset.
    delete:
      operationId: deleteRuleset
      tags:
        - Price Rules
      summary: Delete a ruleset
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - name: ruleset_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: The ruleset was deleted.
  /price_rules/rules/v2/shops/{shop_identifier}/process:
    post:
      operationId: processPrice
      tags:
        - Price Rules
      summary: Process the final price for a line item
      description: Return the final price for a line item in a cart.
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                line_items:
                  type: array
                  items:
                    $ref: '#/components/schemas/LineItem'
      responses:
        '200':
          description: The processed prices.
  /products/v2/shops/{shop_identifier}/products:
    get:
      operationId: listProducts
      tags:
        - Products
      summary: List products
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
      responses:
        '200':
          description: A list of products.
          content:
            application/json:
              schema:
                type: object
                properties:
                  products:
                    type: array
                    items:
                      $ref: '#/components/schemas/Product'
  /products/v2/shops/{shop_identifier}/products/{product_id}:
    get:
      operationId: getProduct
      tags:
        - Products
      summary: Retrieve a product
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
        - name: product_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: The product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
  /customers/v2/shops/{shop_identifier}/customers:
    get:
      operationId: listCustomers
      tags:
        - Customers
      summary: List customers
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
      responses:
        '200':
          description: A list of customers.
          content:
            application/json:
              schema:
                type: object
                properties:
                  customers:
                    type: array
                    items:
                      $ref: '#/components/schemas/Customer'
    post:
      operationId: createCustomer
      tags:
        - Customers
      summary: Create a customer
      parameters:
        - $ref: '#/components/parameters/ShopIdentifier'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Customer'
      responses:
        '201':
          description: The created customer.
  /shops/v1/info:
    get:
      operationId: getShopInfo
      tags:
        - Shops
      summary: Retrieve shop info
      description: >-
        Retrieve the shop configuration, including the shop_identifier GUID
        required in the path of most Bold API requests, plus shop name, domain,
        platform, and default currency.
      responses:
        '200':
          description: The shop info.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shop'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        OAuth 2.0 access token (public integrations) or scoped API access token
        (private integrations), passed as Authorization: Bearer {token}.
  parameters:
    ShopIdentifier:
      name: shop_identifier
      in: path
      required: true
      description: The unique shop GUID, retrieved from the Shops API.
      schema:
        type: string
    ShopId:
      name: shop_id
      in: path
      required: true
      description: The shop identifier for the checkout order.
      schema:
        type: string
    OrderId:
      name: order_id
      in: path
      required: true
      description: The public order ID for the checkout session.
      schema:
        type: string
    SubscriptionId:
      name: subscription_id
      in: path
      required: true
      schema:
        type: string
  responses:
    Unauthorized:
      description: Authentication is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Subscription:
      type: object
      properties:
        id:
          type: integer
        status:
          type: string
          enum:
            - active
            - paused
            - cancelled
        customer_id:
          type: integer
        interval_id:
          type: integer
        line_items:
          type: array
          items:
            $ref: '#/components/schemas/LineItem'
        next_order_datetime:
          type: string
          format: date-time
    LineItem:
      type: object
      properties:
        product_id:
          type: string
        variant_id:
          type: string
        quantity:
          type: integer
        price:
          type: integer
    Address:
      type: object
      properties:
        first_name:
          type: string
        last_name:
          type: string
        address1:
          type: string
        city:
          type: string
        province:
          type: string
        country:
          type: string
        postal_code:
          type: string
    CheckoutState:
      type: object
      properties:
        application_state:
          type: object
          description: Complete order context - customer, items, totals, and more.
    Ruleset:
      type: object
      properties:
        id:
          type: string
        external_id:
          type: string
        name:
          type: string
        active:
          type: boolean
        rules:
          type: array
          items:
            type: object
    Product:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        variants:
          type: array
          items:
            type: object
    Customer:
      type: object
      properties:
        id:
          type: integer
        email:
          type: string
        first_name:
          type: string
        last_name:
          type: string
    Shop:
      type: object
      properties:
        shop_identifier:
          type: string
        shop_name:
          type: string
        domain:
          type: string
        platform:
          type: string
        default_currency:
          type: string
    Error:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
              field:
                type: string