Skip to main content

Bold Subscriptions V1 Manage Subscriptions Page

caution
  • The documentation found on this page applies only to Bold Subscriptions V1. If you are looking for Bold Subscriptions V2 documentation, visit the Bold Subscriptions V2 section.
  • All new installations of the app are Bold Subscriptions V2 — you can see which version you have installed by visiting the app admin. To learn more about the feature differences between Bold Subscriptions V1 and V2, refer to the Help Center.

This API documentation describes the endpoints available when building a custom Manage Subscription Page for the Bold Subscriptions app (Recurring Orders).

The Manage Subscription Page makes it possible for a merchant's customers to view, modify, or cancel existing subscriptions. To access the page, users must already be authenticated via the Shopify store. To enable a custom Manage Subscription Page for your client, install the Bold Subscriptions app and request access to this feature under the Manage Subscription Page Setting.

API Examples

These API reference docs are meant to clearly define the URLs, parameters, request bodies, responses and error states of the Recurring Orders Manage Subscription API.

For instance, the following HTTPS request representation:

GET /manage/subscription/orders/{order_id}/products HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

The response section immediately follows the request and outputs both the HTTP response code:

HTTPS/1.1 200 OK

as well as the response:

{
"status":200,
"success":true,
"message":"OK",
"data":{
"id":1,
"products":{...},
"order":{...},
"coupon":null,
"taxes_included":true,
"has_prepaid":true
}
}

Variables

Request Parameter variables are displayed as {parameter} with the documentation.

You can find the associated/response definitions along side the examples in the element tables.

Using Our API

Manage Subscription API authenticated endpoint prefix

"/tools/checkout/api"

All calls must be made to the Manage Subscription API using HTTP Bearer Authentication flow over HTTPS.

All Manage Subscription API requests are made through Shopify proxy requests. This means that you can make relative calls on the storefront. By default, the Bold Subscriptions applications proxy prefix is /tools/checkout. Merchants are able to configure this prefix in the app settings on the app list page on Shopify.

Endpoints

GET /manage/subscription/endpoint?customer_id={customer_id}&shop={myshopify_domain}&t={current_timestamp} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

Ensure you have set Content-Type: application/json header so requests do not fail. You must also include your customer ID and Shopify domain as a GET parameter for each request.

All our endpoints return a JSON body type. JSON endpoints examples are contained in the json tab of the code column in the document.

All of our JSON responses have a standard format. The response data includes all data returned from the endpoint.

Request Parameters

ParameterTypeInDescriptionRequired
customer_idintegerqueryShopify Customer IDtrue
shopstringqueryThe store's Shopify domain, e.g. mystore.myshopify.comtrue
ttimestampqueryCurrent timestamp
(Used to avoid Shopify caching the responses of API endpoints)
true

Responses

Example success response

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"order_products": {}
}
}

Example error response

{
"status": 400,
"success": false,
"message": "Bad Request",
"errors": {
"message": "Unable to find a valid discount matching the code entered"
}
}

Response Body

ElementDescription
statusThe status of the HTTP response
successBoolean value: true/false
messageDefault message of the HTTP response
dataReturned data from request (only for "success": true responses)
errorsArray of errors (only for "success": false responses)

Authentication

The Manage Subscription API uses a Bearer Authentication scheme. The bearer token is a cryptic string, generated by the server in response to a login request. The client must send this token in the BOLD-Authorization header when making requests to protected resources

Get Token

GET /tools/checkout/api/auth/token?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
Content-Type: application/json

HTTPS/1.1 200 OK

This endpoint gets an authorization token.

GET /tools/checkout/api/auth/token

Example response

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"token": "ABCDEF"
}
}

URL Parameters

ElementTypeDescription
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
tokenstringRecurring Orders API Token

Once you have an access token, include it in the BOLD-Authorization header for every request you make:

BOLD-Authorization: Bearer {token}

The header name is BOLD-Authorization and the value of the header is Bearer {token}. Since the access token is being transmitted in clear text, all API calls are done over HTTPS.

Application

Get Load App

GET api/manage/subscription/app HTTPS/1.1
Content-Type: text/html

HTTPS/1.1 200 OK

Example response has been truncated for brevity

<!-- THEME SPECIFIC CODE -->
<div id="manage-subscription-root"></div>
<script src="https://www.shopify.com/services/countries.js"></script>
<script>
var manageSubscription = {
shopifyCustomerId: 123,
proxyEndpoint: '/tools/checkout',
acceptLanguageHeader: 'en-US,en;q=0.9',
initialState: {
data: {
customer: {
firstName: 'First',
lastName: 'Last',
},
translations: {
frequency_interval_updated_message: 'Your order frequency was successfully updated!',
frequency: 'Select Frequency',
next_ship_date_updated_message: 'Your next order date was successfully updated!',
...
}
}
}
};
</script>
<script type="text/javascript" src=""></script>
<!-- THEME SPECIFIC CODE -->

This endpoint is used as the HTML root of the Manage Subscription Page. Customers are directed to /tools/checkout/api/manage/subscription/app which loads this HTML code inside of the stores theme code. Inside of this code there is

  • <div id="manage-subscription-root"></div> that the Manage Subscription App mounts to
  • A script tag that sets up a Javascript variable containing language settings and other things for the app
  • A script tag that loads the Manage Subscription App bundle file

Once the bundle file is loaded it should first get an Authorization token and then load the initial data using that token to begin rendering a customers manage subscription page.

Get Initial Data

GET api/manage/subscription/initial_data?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"orders": [
{
"id": 1,
"shopify_customer_id": 1,
"interval_number": 1,
"interval_type_id": 1,
"first_name": "FirstName",
"last_name": "LastName",
"customer_email": "customer@email.com",
"idempotency_key": "",
"shopify_cart_token": "1",
"address1": "Address1",
"address2": null,
"country": "Country",
"province": "Province",
"city": "City",
"zip": "Zip",
"phone": "1111111111",
"company": "Bold",
"purchase_date": "2018-06-12",
"delete_date": null,
"last_ship_date": "2018-06-12",
"next_ship_date": "2018-06-12",
"discount_code_id": 1,
"cancel_discount_code_id": 0,
"billing_first_name": "FirstName",
"billing_last_name": "LastName",
"billing_address1": "Address1",
"billing_address2": "Apt 102",
"billing_country": "Country",
"billing_province": "Province",
"billing_city": "City",
"billing_zip": "Zip",
"billing_phone": "1111111111",
"billing_company": "Bold",
"notes": null,
"taxes_included": 0,
"tax_shipping": 0,
"attributes": "[]",
"is_cancellable": 1,
"cancel_reason": null,
"reactivatable": false,
"next_active_ship_date": null,
"billing_plan_id": 0,
"order_day": null,
"last_updated": "2018-06-12 11:11:51",
"order_logs": [
{
"shopify_order_num": "#1",
"shopify_order_token": "1",
"price": "1.00",
"tax": "1.00",
"shipping": "1.00",
"purchase_date": "2018-06-12",
"share_shipping": false,
"discount_amount": "0.00",
"free_shipping_discount_applied": 0,
"charged_amount": "1.00"
}
],
"order_product_exceptions": [
{
"date": "2018-07-12",
"products": [
{
"product_internal_id": 1,
"quantity": 8
}
]
}
],
"order_interval_type": {
"interval_type": "day",
"interval_text": "Day",
"estimated_days": 1
},
"order_fixed_recurrences": null,
"order_products": [
{
"id": 1,
"bold_order_id": 1,
"product_id": 111,
"variant_id": 222,
"price": "1.00",
"quantity": 1,
"gram": 0,
"product_title": "ProductTitle",
"variant_title": "VariantTitle",
"status": 0,
"price_changed": 0,
"shopify_price": "1.00",
"shopify_new_price": null,
"sku": "",
"shopify_inventory": null,
"inventory_management": null,
"taxable": 1,
"properties": "{\u0022frequency_num\u0022:\u00227\u0022,\u0022frequency_type\u0022:\u00221\u0022,\u0022group_id\u0022:\u00226\u0022,\u0022is_prepaid\u0022:\u0022\u0022,\u0022total_recurrences\u0022:\u0022\u0022,\u0022prepaid_id\u0022:\u0022\u0022,\u0022recurr_after_limit\u0022:\u00221\u0022,\u0022_ro_subscription_box_choices\u0022:[{\u0022slot\u0022:\u002211\u0022,\u0022quantity\u0022:\u00222\u0022},{\u0022slot\u0022:\u002212\u0022,\u0022quantity\u0022:\u00221\u0022}],\u0022_ro_billing_plan\u0022:0,\u0022frequency_type_text\u0022:\u0022Day(s)\u0022}",
"vendor": "VendorName",
"is_active": true,
"last_updated": "2018-06-12 11:06:23",
"properties_group_id": 6
}
],
"order_shipping_rate": {
"bold_order_id": 1,
"code": "DOM.EP",
"name": "ShipName",
"price": 1.00,
"source": "shopify",
"need_change": false,
"hash": "123"
},
"order_exceptions":[
"2018-08-12",
"2018-09-12"
],
"order_hooks": [
{
"bold_product_id": 111,
"conditions": [
{
"condition_type": "countdown",
"condition_value": "8"
}
],
"title": "Switch Price",
"new_price": null
}
],
"next_orders": ["2018-06-12",...],
"is_billing_the_same": true,
"build_a_box_next_orders": [
{
"date": "2018-06-12",
"status": "See details in Build a Box Statuses table",
"choices": [
{
"slot_id": 1,
"product_id": 111,
"variant_id": 222,
"quantity": 1
},{...},{...}],
},{...},{...}],
"build_a_box": true,
"has_prepaid": false,
"group_id": 1,
"discount": {
"discount_details": "$0.00 off entire order",
"discount_code": "SAVE0",
"discount_uses_per_customer": 2,
"discount_used_by_customer": 1
},
"discount_queue": [
],
"status": 0
},
{...}, {...}
],
"general_settings": {
"recurring_type": 2,
"cancel_mode": 1,
"provide_cancel_incentives_enabled": false,
"custom_cancel_message_enabled": false,
"custom_cancel_message": null,
"shop_name": "",
"allow_change_shipping_date": true,
"allow_change_discounts": true,
"allow_manage_prepaid": false,
"bold_token": "123",
"bold_signature": "123",
"select_products_url": "https:\/\/test.myshopify.com\/tools\/checkout\/manage_subscription_box\/select_products\/",
"gateway_name": "",
"gateway_token": "token",
"disallowed_line_item_properties": [...],
},
"groups":[
{
"id":6,
"frequency_info": {
"frequency_max": 7,
"frequency_types": [
{
"interval_id": 1,
"interval_type": "day",
"interval_text": "Day",
"estimated_days": 1
}
],
"is_fixed_interval": true
}
},{...},{...}],
"countries": [
{
"code": "CA",
"country_id": 54200369218,
"name": "Canada",
"tax": 0.05,
"tax_name": "GST"
},{...},{...}],
"products": [
{
"product_id": 111,
"handle": "Product1"
},{...},{...}]
}
}

This endpoint retrieves all information needed to render a specific customer's manage subscription page.

GET api/manage/subscription/initial_data

URL Parameters

ElementTypeDescription
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementDescription
ordersArray of all the Initial Data Orders Object associated to a customer
general_settingsGeneral Settings Object containing the Recurring Orders App settings for the shop
groupsThe subscription group information for the subscriptions
countriesList of available countries
productsArray of all products appearing in the orders above

Orders

Add Products

POST api/manage/subscription/orders/{order_id}/products?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"new_order_products": [
{
"shopify_product_id": 111111,
"shopify_variant_id": 222222,
"quantity": 3,
},
{
"shopify_product_id": 333333,
"shopify_variant_id": 444444,
"quantity": 1,
},
],
"order_shipping_rate": {
"code": "Free Shipping",
"name": "Free Shipping",
"price": "0.00",
"source": "shopify",
"need_change": false,
"hash": "2abcbdea0deff6e6d85b506c247dbebf4475b41358e023f7b3781230ff423c9c5692c5fcf4f643bfca48bdd0759687e4c3c0401da376ee8da4471a7617f5f43b",
},
"one_time": false
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"order_products": [
{...}, {...}
],
"order_product_exceptions": [
{...}, {...}
],
"order_shipping_rate": {
"bold_order_id": 1,
"code": "Free Shipping",
"name": "Free Shipping",
"price": "0.00",
"source": "shopify",
"need_change": false,
"hash": "hash"
}
}
}

This endpoint allows you to add products to a subscription. These products can be added as recurring products or added only for the next shipment. You can add a maximum of 20 products at a time. If a product is already on a subscription the quantity would be updated. To add a product as a one time product to just the next shipment then set the flag "one_time" = true in the request body. You can only set the one time flag if you are adding a new product, or adding additional product quantities to the order.

POST api/manage/subscription/orders/{order_id}/products

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementSub ElementTypeDescription
new_order_products
 shopify_product_idintegerShopify Product ID
 shopify_variant_idintegerShopify Variant ID
 quantityintegerProduct Quantity
order_shipping_rate Object
 bold_order_idintegerSubscription Order ID
 codestringOrder Shipping Code
 namestringOrder Shipping Name
 pricestringShipping Price
 sourcestringShipping Source
for example: shopify, cashier, decimal etc.
 need_changeinteger0/1
 hashstringShipping Hash
one_time booleanAdd products to next upcoming shipment only

Data Object

ElementTypeDescription
idintegerSubscription Order ID
order_hooksarrayList of Order Hook Objects
order_productsarrayList of Order Product Object
order_product_exceptionsarrayList of Order Product Exceptions Object
order_shipping_rateobjectOrder Shipping Object

Cancel Subscription

DELETE api/manage/subscription/orders/{order_id}?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"cancel_reason": "I want to delete the order"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "Order Deleted",
"data": {
"id": 1
}
}

This endpoint cancels the specified subscription. When a subscription is cancelled we clear all records of order skips and changes to product quantities for specific upcoming shipments. Most subscriptions can be reactivated if you would like orders to process in the future. You can reactivate a subscription through the Bold Subscription admin.

DELETE api/manage/subscription/orders/{order_id}

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementTypeDescription
cancel_reasonstringReason of cancellation provided by the customer

Data Object

ElementTypeDescription
idintegerSubscription Order ID

Get Build-a-Box Upcoming Orders

GET api/manage/subscription/orders/{order_id}/build_a_box_slots?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"build_a_box": {
"date": "2018-12-17",
"status": "build_a_box_available",
"choices": [
{
"product_id": 1,
"variant_id": 1,
"quantity": 1
},
{
"product_id": 2,
"variant_id": 2,
"quantity": 2
}
]
}
}
}

This endpoint retrieves the build-a-box status and choices for a given date, for a subscription.

GET api/manage/subscription/orders/{order_id}/build_a_box_slots

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
order_datedateUpcoming order date in the Y-m-d format
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
datedateUpcoming order date
statusstringBuild a box status, whether choices are available
choicesarrayArray of selected choices for build-a-box slots

Get Cancellation Offers

GET api/manage/subscription/orders/{order_id}/cancellation_offers?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"id": "1",
"reasonId": "1",
"manageOffers": [
{
"id": 3,
"offer_type": 2,
"discount_code_id": null,
"cancel_reason_id": 1
}
],
"discountOffers": [
{
"id": 5,
"type": 2,
"discount_code": "CANCELCODE",
"useable_time": 200,
"only_first_discount": 0,
"discount_type": 2,
"discount_amount": "2.00",
"discount_condition": 0,
"discount_condition_amount": "0.00",
"free_shipping_amount": "0.00",
"free_shipping_country_id": 1,
"free_shipping_country": "All countries",
"start_date": "2017-03-24",
"end_date": "0000-00-00",
"used": 0,
"status": 0,
"deleted": 0,
"once_per_customer": 0,
"eligible_product_list": "",
"id_parent": 0,
"cancel_id": 1,
"offer_type": 1,
"cancel_reason_id": 1
}
]
}

In the Bold Subscriptions admin you can set up different cancellation flows that your customer wil experience when they go to cancel their subscription. In your cancellation flow you can provide your customers with incentives to keep their subscription, like discount codes they can add to their subscription. This endpoint returns valid cancellation incentives for the given subscription.

GET api/manage/subscription/orders/{order_id}/cancellation_offers

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
reason_idintegerCancellation Reason ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Response Data

ElementTypeDescription
idintegerSubscription Order ID
reasonIdintegerCancellation Reason ID
manageOffersarrayList of Discount Manage Offers Object
discountOffersarrayList of Discount Offer Objects

Get Order Credit Card

GET api/manage/subscription/orders/{order_id}/card?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"credit_card": {
"expiry_date": "2020-06-30",
"last_four": 4532
}
}
}

This endpoint gets the basic credit card information associated with the subscription.

GET api/manage/subscription/orders/{order_id}/card

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Response Data

ElementSub ElementTypeDescription
idintegerSubscription Order ID
credit_cardarray
 expiry_datedateCredit Card Expiry date
 last_fourintegerLast 4 Credit Card digits

Get Order Cashier Credit Cards

GET api/manage/subscription/orders/{order_id}/cashier_card_data?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"cashier_cards": [
{
"public_id": "public_id_1",
"cc_type": "VISA",
"expiration": {
"date": "2024-04-30 00:00:00.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"last_four": "4242",
"is_default": true
}
],
"cashier_selected_card_id": "public_id_1"
}
}

This endpoint gets the list of Cashier credit cards information. TODO

GET api/manage/subscription/orders/{order_id}/cashier_card_data

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Response Data

ElementTypeDescription
idintegerSubscription Order ID
cashier_cardsarrayList of Cashier Card Object
cashier_selected_card_idstringSelected card Public ID

Get Discounts

GET api/manage/subscription/orders/{order_id}/discounts?customer_id={shopify_customer_id}&shop={myshopify_domain}  HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 15,
"discount": {
"discount_code": "DISCOUNTCODE",
"discount_details": "Free shipping to Anywhere up to $100.00 or less"
},
"discount_queue": [
{
"discount_queue_id": 2,
"discount_code": "DISCOUNT10",
"discount_details": "$10.00 off all orders"
}
]
}
}

This endpoint retrieves discount code information for a subscription.

GET /manage/subscription/orders/{order_id}/discounts

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
discountobjectOrder Discount Object
discount_queuearrayList of Order Discount Queue Objects

Get Discounts

GET api/manage/subscription/orders/{order_id}/discounts?customer_id={shopify_customer_id}&shop={myshopify_domain}  HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 15,
"discount": {
"discount_code": "DISCOUNTCODE",
"discount_details": "Free shipping to Anywhere up to $100.00 or less"
},
"discount_queue": [
{
"discount_queue_id": 2,
"discount_code": "DISCOUNT10",
"discount_details": "$10.00 off all orders"
}
]
}
}

This endpoint retrieves discount code information for a subscription.

GET /manage/subscription/orders/{order_id}/discounts

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
discountobjectOrder Discount Object
discount_queuearrayList of Order Discount Queue Objects

Get Products

GET api/manage/subscription/orders/{order_id}/products?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"products": [
{
"id": 5,
"shop_app_id": 1,
"bold_order_id": 1,
"product_id": 111,
"variant_id": 222,
"price": "10.00",
"quantity": 1,
"gram": 100,
"product_title": "ProductTitle",
"variant_title": "VariantTItle",
"status": 0,
"price_changed": 0,
"shopify_price": "10.00",
"shopify_new_price": null,
"sku": "skuprod1",
"shopify_inventory": null,
"inventory_management": "shopify",
"taxable": 1,
"properties": "{\u0022frequency_num\u0022:1,\u0022frequency_type\u0022:2,\u0022frequency_type_text\u0022:\u0022Weekx(s***)\u0022,\u0022group_id\u0022:\u00221\u0022,\u0022is_prepaid\u0022:\u0022\u0022,\u0022total_recurrences\u0022:\u0022\u0022,\u0022prepaid_id\u0022:\u0022\u0022,\u0022recurr_after_limit\u0022:\u00220\u0022,\u0022_ro_billing_plan\u0022:0}",
"vendor": "Vendor",
"is_active": true,
"shopify_product": {
"id": 111,
"body_html": "",
"handle": "product_handle",
"product_type": "",
"published_scope": "global",
"title": "ProductTitle",
"vendor": "vendor",
"tags": "",
"options": [
{
"id": 123,
"name": "Title",
"position": 1,
"product_id": 111,
"values": [
{
"Default Title"
}
]
}
],
"images":{...},
"created_at": "2017-02-28T09:41:56+10:30",
"updated_at": "2017-06-16T02:12:55+09:30",
"published_at": "2017-02-28T09:35:00+10:30",
"image": {...},
"variant": {...}
}
}
],
"order": {...},
"coupon": null,
"taxes_included": 0,
"has_prepaid": true
}
}

This endpoint retrieves all associated products for a subscription.

GET api/manage/subscription/orders/{order_id}/products

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
productsarrayArray of Order Product Objects
orderobjectOrder Object
couponobjectOrder Discount Object
taxes_includedinteger0 - no / 1 - yes
has_prepaidbooleanIf subscription is prepaid

Get Shipping Rates

GET api/manage/subscription/orders/{order_id}/shipping_rates?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"shipping_rates": [
{
"code": "DOM.EP",
"name": "Expedited Parcel",
"price": "10.00",
"source": "canada_post",
"need_change": false,
"hash": "hash_value"
},{...},{...}
]
}

This endpoint retrieves all the shipping rates for the provided subscription id (order id). You can also retrieve the shipping rates for a subscription that you are going to change. You can send optional parameters in the request that would describe the change, and we will return the shipping rates that would be applied to that changed order.

GET api/manage/subscription/orders/{order_id}/shipping_rates

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
new_order_productsarrayURL encoded representation of the data used to add products to a subscriptions
order_productsarrayURL encoded representation of the data used to update quantity of products in a subscription
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
shipping_ratesarrayList of Order Shipping Rate Objects

Get Upcoming Orders

GET api/manage/subscription/orders/{order_id}/upcoming?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"has_prepaid": false,
"next_orders": ["2018-06-20", "2018-06-27", "2018-07-04", "2018-07-11", "2018-07-18", "2018-07-25", "2018-08-01"]
}
}

This endpoint retrieves a listing of the next upcoming order dates for a subscription.

GET api/manage/subscription/orders/{order_id}/upcoming

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
has_prepaidbooleanIf order is prepaid
next_ordersarrayList of next order dates

Get Upcoming Products

GET api/manage/subscription/orders/{order_id}/upcoming_products?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": "1",
"products": [
{
"id": 222,
"shop_app_id": 1,
"bold_order_id": 1,
"product_id": 222,
"variant_id": 333,
"price": "10.00",
"quantity": 1,
"gram": 0,
"product_title": "ProductTitle",
"variant_title": "VariantTitle",
"status": 0,
"price_changed": 0,
"shopify_price": "10.00",
"shopify_new_price": null,
"sku": "",
"shopify_inventory": null,
"inventory_management": null,
"taxable": 1,
"properties": "{\"frequency_num\":\"7\",\"frequency_type\":\"1\",\"group_id\":\"6\",\"is_prepaid\":\"\",\"total_recurrences\":\"\",\"prepaid_id\":\"\",\"recurr_after_limit\":\"1\",\"_ro_subscription_box_choices\":{{\"slot\":\"11\",\"quantity\":\"2\"},{\"slot\":\"12\",\"quantity\":\"1\"}},\"_ro_billing_plan\":0,\"frequency_type_text\":\"Day(s)\"}",
"vendor": "VendorName",
"is_active": true,
"last_updated": "2018-06-12 11:06:23",
"properties_group_id": null,
"shopify_product": {
"id": 222,
"body_html": "123",
"handle": "product-handle",
"product_type": "",
"title": "ProductTitle",
"vendor": "VenderName",
"tags": "",
"images": {
{...},{...}
},
"image": {...},
"variant": {...}
}
}
],
"order_date": "2018-06-12",
"has_prepaid": false
}
}

This endpoint returns the products that will be in an upcoming order for the subscription

GET api/manage/subscription/orders/{order_id}/upcoming_products

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
productsarrayArray of Order Product Objects
order_datedateOrder Date in Y-m-d format
has_prepaidbooleanIf order is prepaid

Pause Subscription

POST api/manage/subscription/orders/{order_id}/pause?customer_id={customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 25,
"is_paused": true
}
}

This endpoint allows the user to pause all orders of that subscription until it is resumed.

POST api/manage/subscription/orders/{order_id}/pause

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
is_pausedbooleanIf subscription is paused

Reactivate Subscription

POST api/manage/subscription/orders/{order_id}/reactivate?customer_id={customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"next_ship_date": "2020-05-20"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 99,
"active": true,
"is_paused": false,
"next_ship_date": "2020-05-25",
"reactivatable": false
}
}

This endpoint allows the user to reactivate a subscription that was cancelled in the past. This endpoint will only work for subscriptions that have the reactivatable property set to true. Prepaid and limited length subscriptions are not reactivatable. Subscriptions that are active, are not reactivatable because they are already active. To un pause a subscription see resume subscription. You can optionally send the next_ship_date for the date you would like the next order to generate, if no date is sent, then the current date will be used.

POST api/manage/subscription/orders/{order_id}/reactivate

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementDescription
next_ship_dateNext date order should generate in the Y-m-d format

Data Object

ElementTypeDescription
idintegerSubscription Order ID
activedateSubscription active status
is_pausedbooleanSubscription is paused status
next_ship_datearrayNext date order will generate
reactivatablebooleanStatus on if a subscription can be reactivated

Recover Order

POST api/manage/subscription/orders/{order_id}/recover?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"order_date": "2018-06-20"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"next_active_ship_date": "2018-06-20",
"order_exceptions": {}
}
}

This endpoint allows you to unskip an order that was previously set to be skipped for a given order date.

POST api/manage/subscription/orders/{order_id}/recover

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementDescription
order_daterecover date in the Y-m-d format

Data Object

ElementTypeDescription
idintegerSubscription Order ID
next_active_ship_datedateNext Active Order Date
order_exceptionsarrayList of order exceptions

Resume Subscription

POST api/manage/subscription/orders/{order_id}/resume?customer_id={customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 25,
"is_paused": false
}
}

This endpoint allows the user to resume a paused subscription.

POST api/manage/subscription/orders/{order_id}/resume

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
is_pausedbooleanIf subscription is paused

Log Attempted Cancellation

POST api/manage/subscription/orders/{order_id}/cancellation_log?customer_id={customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"cancel_reason": "Too expensive"
}
HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK"
}

This endpoint allows you to add a User Activity Log to the customer history with type "Cancellation Flow Started".

POST api/manage/subscription/orders/{order_id}/cancellation_log

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Data Object

ElementTypeDescription
idintegerSubscription Order ID
cancel_reasonStringThe reason selected for starting the cancellation flow

Save Build-a-Box Choices

POST api/manage/subscription/orders/{order_id}/build_a_box_choices?customer_id={customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"order_date":"2019-11-15",
"choices": [
{
"slot_id": 1,
"quantity": 1
},
{
"slot_id": 2,
"quantity": 2
}
]
}

HTTPS/1.1 200 OK

Example response

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"orders": [
{
"id": 1,
"shopify_customer_id": 1234,
"interval_number": 1,
"interval_type_id": 1,
"first_name": "Marie",
"last_name": "Curie",
"customer_email": "marie.curie@boldcommerce.com",
"gateway_payment_method_id": "",
"address1": "50 Fultz blvd",
"address2": null,
"country": "Canada",
"province": "Manitoba",
"city": "Winnipeg",
"zip": "R3Y 0L6",
"phone": "5555555555",
"company": "",
"purchase_date": "2019-10-25",
"last_ship_date": "2019-10-25",
"next_ship_date": "2019-11-12",
"active": true,
"discount_code_id": 0,
"cancel_discount_code_id": 0,
"billing_first_name": "Marie",
"billing_last_name": "Curie",
"billing_address1": "50 Fultz blvd",
"billing_address2": null,
"billing_country": "Canada",
"billing_province": "Manitoba",
"billing_city": "Winnipeg",
"billing_zip": "R3Y 0L6",
"billing_phone": "5555555555",
"billing_company": "",
"notes": null,
"taxes_included": 0,
"tax_shipping": 1,
"attributes": "[]",
"is_cancellable": true,
"cancel_reason": null,
"reactivatable": false,
"next_active_ship_date": "2019-10-26",
"billing_plan_id": 0,
"order_day": null,
"last_updated": "2019-11-13 08:49:11",
"shopify_order_tags": null,
"is_paused": false,
"currency": "",
"currency_exchange_rate": "1.000000000000",
"currency_format": null,
"order_products": [
{
"id": 2530,
"bold_order_id": 1,
"product_id": 1574423429210,
"variant_id": 15434163224666,
"price": "10.00",
"quantity": 1,
"gram": 0,
"product_title": "BUILD A BOX",
"variant_title": "Default Title",
"status": 0,
"price_changed": 0,
"shopify_price": "10.00",
"shopify_new_price": null,
"sku": "",
"shopify_inventory": null,
"inventory_management": null,
"taxable": 1,
"properties": "{\"frequency_num\":\"1\",\"frequency_type\":\"1\",\"group_id\":\"6\",\"is_prepaid\":\"\",\"total_recurrences\":\"\",\"prepaid_id\":\"\",\"recurr_after_limit\":\"1\",\"_ro_subscription_box_choices\":[{\"slot\":\"1\",\"quantity\":\"3\"},{\"slot\":\"2\",\"quantity\":\"0\"}],\"_ro_billing_plan\":0,\"frequency_type_text\":\"Day(s)\"}",
"vendor": "test-shop",
"is_active": true,
"last_updated": "2019-10-25 13:16:39",
"converted_price": 0,
"properties_group_id": 6
}
],
"order_fixed_recurrences": null,
"next_orders": [
"2019-11-12",
"2019-11-13",
"2019-11-14",
"2019-11-15",
"2019-11-16",
"2019-11-17",
"2019-11-18"
],
"build_a_box": true,
"build_a_box_next_orders": [
{
"date": "2019-11-12",
"status": "build_a_box_locked_default_choices",
"choices": [
{
"slot_id": 1,
"product_id": 1649329406042,
"variant_id": 16089077022810,
"quantity": 2
},
{
"slot_id": 2,
"product_id": 1649345200218,
"variant_id": 16089118081114,
"quantity": 1
}
]
},
{
"date": "2019-11-13",
"status": "build_a_box_locked_default_choices",
"choices": [
{
"slot_id": 1,
"product_id": 1649329406042,
"variant_id": 16089077022810,
"quantity": 2
},
{
"slot_id": 2,
"product_id": 1649345200218,
"variant_id": 16089118081114,
"quantity": 1
}
]
},
{
"date": "2019-11-14",
"status": "build_a_box_locked_default_choices",
"choices": [
{
"slot_id": 1,
"product_id": 1649329406042,
"variant_id": 16089077022810,
"quantity": 2
},
{
"slot_id": 2,
"product_id": 1649345200218,
"variant_id": 16089118081114,
"quantity": 1
}
]
},
{
"date": "2019-11-15",
"status": "build_a_box_available_choices_made",
"choices": [
{
"slot_id": 1,
"product_id": 1649329406042,
"variant_id": 16089077022810,
"quantity": 1
},
{
"slot_id": 2,
"product_id": 1649345200218,
"variant_id": 16089118081114,
"quantity": 2
}
]
},
{
"date": "2019-11-16",
"status": "build_a_box_available",
"choices": [
{
"slot_id": 1,
"product_id": 1649329406042,
"variant_id": 16089077022810,
"quantity": 2
},
{
"slot_id": 2,
"product_id": 1649345200218,
"variant_id": 16089118081114,
"quantity": 1
}
]
},
{
"date": "2019-11-17",
"status": "build_a_box_unavailable",
"choices": [
{
"slot_id": 1,
"product_id": 1649329406042,
"variant_id": 16089077022810,
"quantity": 2
},
{
"slot_id": 2,
"product_id": 1649345200218,
"variant_id": 16089118081114,
"quantity": 1
}
]
},
{
"date": "2019-11-18",
"status": "build_a_box_unavailable",
"choices": [
{
"slot_id": 1,
"product_id": 1649329406042,
"variant_id": 16089077022810,
"quantity": 2
},
{
"slot_id": 2,
"product_id": 1649345200218,
"variant_id": 16089118081114,
"quantity": 1
}
]
}
],
"is_price_based_on_choices": false
}
]
}
}

This endpoint allows you to save selections for an order date, for a Build-a-Box subscription. This endpoint respects the lock settings, of the subscription group.

POST api/manage/subscription/orders/{order_id}/build_a_box_choices

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementTypeDescription
order_datedateUpcoming order date
choicesarrayArray of selected choices for build-a-box slots

Response Data

ElementTypeDescription
ordersarrayList of Order objects
order_productsarrayList of Order Product Objects
build_a_box_next_ordersarrayList of Build-a-Box Objects

Save Cancellation Offer Code

POST api/manage/subscription/orders/{order_id}/cancellation_offer_code?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"discount_code": "CANCELCODE",
"reason_id": 1
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": "1",
"cancel_discount_code_id": 1,
"message": "Order Updated"
}
}

This endpoint applies cancellation discount code to the given order.

POST api/manage/subscription/orders/{order_id}/cancellation_offer_code

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementTypeDescription
discount_codestringDiscount Code
reason_idintegerCancellation Reason ID

Data Object

ElementTypeDescription
idintegerSubscription Order ID
cancel_discount_code_idintegerCancel Discount Code ID
messagestringResponse message

Save Discount

POST api/manage/subscription/orders/{order_id}/discount?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"discount_code": "DISCOUNTCODE"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 15,
"discount": {
"discount_code": "DISCOUNTCODE",
"discount_details": "Free shipping to Anywhere up to $100.00 or less"
},
"discount_queue": [
{
"discount_queue_id": 2,
"discount_code": "DISCOUNTCODE2",
"discount_details": "$10.00 off all orders"
}
]
}
}

This endpoint adds or updates existing discount code for specific subscription.

POST api/manage/subscription/orders/{order_id}/discount

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementTypeDescription
discount_codestringDiscount code

Data Object

ElementTypeDescription
idintegerSubscription Order ID
discountobjectOrder Discount Object
discount_queuearrayList of Order Discount Queue Objects

Save Upcoming Products

PUT api/manage/subscription/orders/{order_id}/upcoming_products?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"order_date": "2017-06-01",
"order_products": [
{
"product_internal_id": 1,
"quantity": 1
},
{
"product_internal_id": 2,
"quantity": 1
},
{
"product_internal_id": 3,
"quantity": 0
}
],
"order_shipping_rate": {
"code": "DOM.EP",
"name": "Expedited Parcel",
"source": "canada_post",
"price": "2312.10",
"need_change": false,
"hash": "aksdjfhlakjshd97hajh8r328ynjksjhda989"
}
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 145,
"order_product_exceptions": [
{
"date": "2017-06-01",
"products": [
{
"product_internal_id": 1,
"quantity": 1
},
{
"product_internal_id": 2,
"quantity": 1
},
{
"product_internal_id": 3,
"quantity": 0
}
]
}
]
}
}

This endpoint updates products quantity for a specific upcoming order for the subscription.

PUT api/manage/subscription/orders/{order_id}/upcoming_products

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementSub ElementTypeDescription
order_date dateOrder Date in Y-m-d format
order_productsarray
 product_internal_idintegerRecurring Orders internal product ID
 quantityintegerProduct quantity
order_shipping_rate Object
 codestringOrder Shipping Code
 namestringOrder Shipping Name
 pricestringShipping Price
 sourcestringShipping Source
for example: shopify, cashier, decimal etc.
 need_changeinteger0/1
 hashstringshipping Hash

Response Data

ElementTypeDescription
idinteger
order_product_exceptionsarrayList of Order Product Exceptions Object

Save Swap Product

PUT api/manage/subscription/orders/{order_id}/save_swap_product?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"order_id": 1,
"product_internal_id": 1,
"product_id": 123456789,
"variant_id": 234567891,
"order_shipping_rate": {
"code": "DOM.EP",
"name": "Expedited Parcel",
"source": "canada_post",
"price": "2312.10",
"need_change": false,
"hash": "hash"
}
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"order_products": [
{
"id": 1,
"bold_order_id": 1,
"product_id": 123456789,
"variant_id": 234567891,
"price": "5.00",
"quantity": 1,
"gram": 0,
"product_title": "SwappedProductTitle",
"variant_title": "SwappedVariantTitle",
"status": 0,
"price_changed": 0,
"shopify_price": "1.00",
"shopify_new_price": null,
"sku": "",
"shopify_inventory": null,
"inventory_management": null,
"taxable": 1,
"properties": "{\u0022frequency_num\u0022:\u00227\u0022,\u0022frequency_type\u0022:\u00221\u0022,\u0022group_id\u0022:\u00226\u0022,\u0022is_prepaid\u0022:\u0022\u0022,\u0022total_recurrences\u0022:\u0022\u0022,\u0022prepaid_id\u0022:\u0022\u0022,\u0022recurr_after_limit\u0022:\u00221\u0022,\u0022_ro_subscription_box_choices\u0022:[{\u0022slot\u0022:\u002211\u0022,\u0022quantity\u0022:\u00222\u0022},{\u0022slot\u0022:\u002212\u0022,\u0022quantity\u0022:\u00221\u0022}],\u0022_ro_billing_plan\u0022:0,\u0022frequency_type_text\u0022:\u0022Day(s)\u0022}",
"vendor": "VendorName",
"is_active": true,
"last_updated": "2018-06-12 11:06:23",
"properties_group_id": 6
},
{...}
],
"order_shipping_rate": {
"code": "DOM.EP",
"name": "Expedited Parcel",
"source": "canada_post",
"price": "2312.10",
"need_change": false,
"hash": "hash"
}
}
}

This endpoint will swap a product on an order with the product indicated by the product id and variant id. You must send a valid shipping rate for the subscription that was calculated with the new product.

PUT api/manage/subscription/orders/{order_id}/save_swap_product

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementSub ElementTypeDescription
product_internal_id integerRecurring Orders internal product ID for the product being replaced.
product_id integerShopify product ID for the swap product.
variant_id integerShopify variant ID for the swap product.
order_shipping_rate object
 codestringOrder Shipping Code
 namestringOrder Shipping Name
 pricestringShipping Price
 sourcestringShipping Source
for example: shopify, cashier, decimal etc.
 need_changeinteger0/1
 hashstringshipping Hash

Response Data

ElementTypeDescription
idintegerSubscription Order ID
order_productsarrayList of Order Product Objects
order_shipping_rateobjectOrder Shipping Object

Skip Order

POST api/manage/subscription/orders/{order_id}/skip?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"order_date": "2018-06-20"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 15,
"next_active_ship_date": "2018-06-27",
"order_exceptions": ["2018-06-20"]
}
}

This endpoint allows you to add and order exception date. When this order goes to process it will be skipped. The order will not be placed in Shopify, and the next ship date will be advanced for the subscription.

POST api/manage/subscription/orders/{order_id}/skip

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementDescription
order_dateskip date in the Y-m-d format

Data Object

ElementTypeDescription
idintegerSubscription Order ID
next_active_ship_datedateNext Active Order Date
order_exceptionsarrayList of order exceptions

Update Billing Address

PUT api/manage/subscription/orders/{order_id}/billing_address?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"billing_address": {
"billing_first_name": "John",
"billing_last_name": "Doe",
"billing_address1": "123 Not Real St.",
"billing_address2": "",
"billing_country": "CA",
"billing_province": "MB",
"billing_city": "Winnipeg",
"billing_zip": "R3T 0H4",
"billing_phone": "",
"billing_company": ""
}
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"billing_first_name": "John",
"billing_last_name": "Doe",
"billing_address1": "123 Not Real St.",
"billing_address2": null,
"billing_country": "CA",
"billing_province": "MB",
"billing_city": "Winnipeg",
"billing_zip": "R3T 0H4",
"billing_phone": "",
"billing_company": ""
}
}

This endpoint updates the billing address for subscription.

PUT /manage/subscription/orders/{order_id}/billing_address

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementSub ElementTypeDescription
billing_address Object
 billing_first_namestringBilling First name
 billing_last_namestringBilling Last name
 billing_address1stringBilling Address
 billing_address2stringBilling Address optional
 billing_countrystringBilling Country
 billing_companystringBilling Company
 billing_provincestringBilling Province
 billing_citystringBilling City
 billing_zipstringBilling Zip code
 billing_phonestringBilling Phone number

Data Object

ElementTypeDescription
idintegerSubscription Order ID
billing_first_namestringBilling First Name
billing_last_namestringBilling Last name
billing_address1stringBilling Address
billing_address2stringBilling Address optional
billing_countrystringBilling Country
billing_provincestringBilling Province
billing_citystringBilling City
billing_zipstringBilling Zip Code
billing_phonestringBilling Phone Number
billing_companystringBilling Company

Update Order Credit Card

PUT api/manage/subscription/orders/{order_id}/card?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"token": "gateway_token"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"credit_card": {
"expiry_date": "2020-06-30",
"last_four": 4532
}
}
}

This endpoint updates order credit card information.

PUT api/manage/subscription/orders/{order_id}/card

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementTypeDescription
tokenstringPayment Gateway token

Response Data

ElementSub ElementTypeDescription
idintegerSubscription Order ID
credit_cardarray
 expiry_datedateCredit Card Expiry date
 last_fourintegerLast 4 Credit Card digits

Update Next Order Date

PUT /manage/subscription/orders/{order_id}/next_ship_date?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"next_shipping_date": "2018-06-20"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"next_ship_date": "2018-06-20",
"next_orders": {
"2018-06-20",
"2018-06-27",
"2018-07-04",
"2018-07-11",
"2018-07-18",
"2018-07-25",
"2018-08-01",
},
"build_a_box_next_orders" : [],
"order_product_exceptions": [],
"order_exceptions": [],
"message": "Upcoming order date was changed."
}
}

This endpoint updates next order date for specific subscription.

PUT api/manage/subscription/orders/{order_id}/next_ship_date

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementTypeDescription
next_ship_datestringNext order date in the Y-m-d format

Data Object

ElementTypeDescription
idintegerSubscription Order ID
next_ship_datedateNext order date in the Y-m-d format
next_ordersdateNext orders date in the Y-m-d format
build_a_box_next_ordersdateNext orders date and selections if the type is build a box
order_exceptionsarrayArray of order exception dates
order_product_exceptionsarrayList of Order Product Exceptions Object
messagestringMessage with translations

Update Order Interval

PUT api/manage/subscription/orders/{order_id}/interval?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"frequency_type": "1",
"frequency_num": "7"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"interval_number": 7,
"interval_type_id": 1,
"next_ship_date": "2018-06-12",
"next_orders": {
"2018-06-12",
"2018-06-19",
"2018-06-26",
"2018-07-03",
"2018-07-10",
"2018-07-17",
"2018-07-24"
},
"order_exceptions": {}
}
}

This endpoint updates order interval for a subscription. When you update the subscription interval all order exceptions (e.g. skipped orders), will be removed.

PUT /manage/subscription/orders/{order_id}/interval

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementTypeDescription
frequency_typeintegerRecurring interval type:
1 - Day
2 - Week
3 - Month
5 - Year
frequency_numintegerRecurring interval number
for example: 2 (for every 2 weeks/days etc.)

Data Object

ElementDescription
idSubscription Order ID
interval_numberRecurring interval number
interval_type_idRecurring interval type
next_ship_dateNext order date in date string Y-m-d
next_ordersThe array of new next order dates
order_exceptionsThe array of order exceptions dates

Update Prepaid Settings

PUT api/manage/subscription/orders/{order_id}/prepaid_settings?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"prepaid_settings": {
"recurr_after_limit": 1
}
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"prepaid_settings": {
"total_recurrences": 6,
"recurrence_count": 1,
"one_charge_only": 0,
"recurr_after_limit": 1
}
}
}

This endpoint updates the prepaid settings for specific order.

PUT api/manage/subscription/orders/{order_id}/prepaid_settings

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementSub ElementTypeDescription
prepaid_settingsobject
 recurr_after_limitintegerAutomatically renew after last prepaid order
Allowed: 0 / 1

Response Data

ElementTypeDescription
idintegerSubscription Order ID
prepaid_settingsobjectOrder Fixed Recurrences Object

Update Shipping Address

PUT api/manage/subscription/orders/{order_id}/shipping_address?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"shipping_address": {
"first_name": "John",
"last_name": "Doe",
"address1": "123 Not Real St.",
"address2": "",
"country": "CA",
"province": "MB",
"city": "Winnipeg",
"zip": "R3T 0H4",
"phone": ""
},
"order_shipping_rate": {
"bold_order_id": 1,
"code": "Canada Post",
"name": "Canada Post",
"price": "10.00",
"source": "cashier",
"need_change": 0,
"hash": "73c168a51022850a4d1ca9f863c5bf29d911c292feaddeac0228f8d8908cce7ac9554a310972832b841e08b6e0d3fe489d7170819ea77bdcea1b2eba56856e81"
}
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"first_name": "John",
"last_name": "Doe",
"address1": "123 Not Real St.",
"address2": "",
"country": "CA",
"province": "MB",
"city": "Winnipeg",
"zip": "R3T 0H4",
"phone": "",
"company": "",
"order_shipping_rate": {
"bold_order_id": 1,
"code": "Canada Post",
"name": "Canada Post",
"price": "10",
"source": "cashier",
"need_change": false,
"hash": "33c83de87223252049549928fdbd133762a07db4d18073ca1620016591aa02c5c8965f1e2a24f224cb6cfdecf3fa097f0b7ab375d5a7d13e4fa46fd94e71bd36"
}
}
}

This endpoint updates the shipping method for a subscription.

PUT api/manage/subscription/orders/{order_id}/shipping_address

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementSub ElementTypeDescription
shipping_address Object
 first_namestringShipping First name
 last_namestringShipping Last name
 address1stringShipping Address
 address2stringShipping Address optional
 countrystringShipping Country
 companystringShipping Company
 provincestringShipping Province
 citystringShipping City
 zipstringShipping Zip code
 phonestringShipping Phone number
order_shipping_rate Object
 codestringOrder Shipping Code
 namestringOrder Shipping Name
 pricestringShipping Price
 sourcestringShipping Source
for example: shopify, cashier, decimal etc.
 need_changeinteger0/1
 hashstringshipping Hash

Data Object

ElementTypeDescription
idintegerSubscription Order ID
first_namestringShipping First Name
last_namestringShipping Last name
address1stringShipping Address
address2stringShipping Address optional
countrystringShipping Country
provincestringShipping Province
citystringShipping City
zipstringShipping Zip Code
phonestringShipping Phone Number
companystringShipping Company
order_shipping_rateobjectOrder Shipping Object

Update Shipping Method

PUT api/manage/subscription/orders/{order_id}/shipping_method?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTPS/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"order_shipping_rate": {
"code": "NEWSHIP",
"name": "new shipping method",
"price": "10.00",
"source": "new_source",
"need_change": 0,
"hash": "hashValue"
}
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"success": true,
"status": 200,
"message": "OK",
"data": {
"id": 1,
"order_shipping_rate": {
"code": "NEWSHIP",
"name": "new shipping method",
"price": "10.00",
"source": "new_source",
"need_change": 0,
"hash": "kajsdbncfaowq89urnjaijshdf823jcihjs2dnbh"
}
}
}

This endpoint updates the shipping method for the provided order id.

PUT api/manage/subscription/orders/{order_id}/shipping_method

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Body Request

ElementSub ElementTypeDescription
order_shipping_rate Object
 codestringOrder Shipping Code
 namestringOrder Shipping Name
 pricestringShipping Price
 sourcestringShipping Source
for example: shopify, cashier, decimal etc.
 need_changeinteger0/1
 hashstringshipping Hash

Data Object

ElementTypeDescription
idintegerSubscription Order ID
order_shipping_rateobjectOrder Shipping Object

Update Quantity

PUT api/manage/subscription/orders/{order_id}/quantity?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"order_products": [
{
"product_internal_id": 1,
"quantity": 3,
"is_deleted": false
},
{
"product_internal_id": 2,
"quantity": 2,
"is_deleted": false
},
{
"product_internal_id": 3,
"quantity": 0,
"is_deleted": false
}
],
"order_shipping_rate": {
"code": "Free Shipping",
"name": "Free Shipping",
"price": "0.00",
"source": "shopify",
"need_change": false,
"hash": "2abcbdea0deff6e6d85b506c247dbebf4475b41358e023f7b3781230ff423c9c5692c5fcf4f643bfca48bdd0759687e4c3c0401da376ee8da4471a7617f5f43b",
}
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"order_products": [
{...}, {...}
],
"order_product_exceptions": [
{...}, {...}
],
"order_shipping_rate": {
"bold_order_id": 1,
"code": "Free Shipping",
"name": "Free Shipping",
"price": "0.00",
"source": "shopify",
"need_change": false,
"hash": "hash"
}
}
}

This endpoint updates the quantity of specified products in the subscription for the remainder of the subscription, excluding upcoming orders where you have changed the quantity for a specific shipment date.

PUT api/manage/subscription/orders/{order_id}/quantity

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementSub ElementTypeDescription
order_products
 product_internal_idintegerRecurring Orders internal product ID
 quantityintegerProduct quantity
 is_deletedbooleantrue/false
order_shipping_rate Object
 bold_order_idintegerSubscription Order ID
 codestringOrder Shipping Code
 namestringOrder Shipping Name
 pricestringShipping Price
 sourcestringShipping Source
for example: shopify, cashier, decimal etc.
 need_changeinteger0/1
 hashstringshipping Hash

Data Object

ElementTypeDescription
idintegerSubscription Order ID
order_productsarrayList of Order Product Object
order_product_exceptionsarrayList of Order Product Exceptions Object
order_shipping_rateobjectOrder Shipping Object

Update Shopify Order Tags

PUT api/manage/subscription/orders/{order_id}/shopify_order_tags?customer_id={shopify_customer_id}&shop={myshopify_domain} HTTP/1.1
BOLD-Authorization: Bearer {token}
Content-Type: application/json

{
"shopify_order_tags" : "initial_order,new_subscriber"
}

HTTPS/1.1 200 OK

Example response has been truncated for brevity

{
"status": 200,
"success": true,
"message": "OK",
"data": {
"id": 1,
"shopify_order_tags": "initial_order,new_subscriber"
}
}

This endpoint updates the order tags in Shopify for the subscription. This change will only apply to future orders.

PUT api/manage/subscription/orders/{order_id}/shopify_order_tags

URL Parameters

ElementTypeDescription
order_idintegerSubscription Order ID
customer_idintegerShopify Customer ID
shopstringThe store's Shopify domain, e.g. mystore.myshopify.com

Request Body

ElementTypeDescription
shopify_order_tagsstringA comma separated string of the tags that want to be applied to the order

Data Object

ElementTypeDescription
idintegerSubscription Order ID
shopify_order_tagsstringA comma separated string of the tags that want to be applied to the order