Bold Subscriptions V1 Manage Subscriptions Page
- 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
Parameter | Type | In | Description | Required |
---|---|---|---|---|
customer_id | integer | query | Shopify Customer ID | true |
shop | string | query | The store's Shopify domain, e.g. mystore.myshopify.com | true |
t | timestamp | query | Current 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
Element | Description |
---|---|
status | The status of the HTTP response |
success | Boolean value: true /false |
message | Default message of the HTTP response |
data | Returned data from request (only for "success": true responses) |
errors | Array 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
Element | Type | Description |
---|---|---|
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
token | string | Recurring 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
Element | Type | Description |
---|---|---|
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Description |
---|---|
orders | Array of all the Initial Data Orders Object associated to a customer |
general_settings | General Settings Object containing the Recurring Orders App settings for the shop |
groups | The subscription group information for the subscriptions |
countries | List of available countries |
products | Array 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Sub Element | Type | Description |
---|---|---|---|
new_order_products | |||
shopify_product_id | integer | Shopify Product ID | |
shopify_variant_id | integer | Shopify Variant ID | |
quantity | integer | Product Quantity | |
order_shipping_rate | Object | ||
bold_order_id | integer | Subscription Order ID | |
code | string | Order Shipping Code | |
name | string | Order Shipping Name | |
price | string | Shipping Price | |
source | string | Shipping Source for example: shopify , cashier , decimal etc. | |
need_change | integer | 0/1 | |
hash | string | Shipping Hash | |
one_time | boolean | Add products to next upcoming shipment only |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
order_hooks | array | List of Order Hook Objects |
order_products | array | List of Order Product Object |
order_product_exceptions | array | List of Order Product Exceptions Object |
order_shipping_rate | object | Order 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Type | Description |
---|---|---|
cancel_reason | string | Reason of cancellation provided by the customer |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
order_date | date | Upcoming order date in the Y-m-d format |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
date | date | Upcoming order date |
status | string | Build a box status, whether choices are available |
choices | array | Array 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
reason_id | integer | Cancellation Reason ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Response Data
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
reasonId | integer | Cancellation Reason ID |
manageOffers | array | List of Discount Manage Offers Object |
discountOffers | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Response Data
Element | Sub Element | Type | Description |
---|---|---|---|
id | integer | Subscription Order ID | |
credit_card | array | ||
expiry_date | date | Credit Card Expiry date | |
last_four | integer | Last 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Response Data
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
cashier_cards | array | List of Cashier Card Object |
cashier_selected_card_id | string | Selected 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
discount | object | Order Discount Object |
discount_queue | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
discount | object | Order Discount Object |
discount_queue | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
products | array | Array of Order Product Objects |
order | object | Order Object |
coupon | object | Order Discount Object |
taxes_included | integer | 0 - no / 1 - yes |
has_prepaid | boolean | If 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
new_order_products | array | URL encoded representation of the data used to add products to a subscriptions |
order_products | array | URL encoded representation of the data used to update quantity of products in a subscription |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
shipping_rates | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
has_prepaid | boolean | If order is prepaid |
next_orders | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
products | array | Array of Order Product Objects |
order_date | date | Order Date in Y-m-d format |
has_prepaid | boolean | If 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
is_paused | boolean | If 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Description |
---|---|
next_ship_date | Next date order should generate in the Y-m-d format |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
active | date | Subscription active status |
is_paused | boolean | Subscription is paused status |
next_ship_date | array | Next date order will generate |
reactivatable | boolean | Status 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Description |
---|---|
order_date | recover date in the Y-m-d format |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
next_active_ship_date | date | Next Active Order Date |
order_exceptions | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
is_paused | boolean | If 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
cancel_reason | String | The 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Type | Description |
---|---|---|
order_date | date | Upcoming order date |
choices | array | Array of selected choices for build-a-box slots |
Response Data
Element | Type | Description |
---|---|---|
orders | array | List of Order objects |
order_products | array | List of Order Product Objects |
build_a_box_next_orders | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Type | Description |
---|---|---|
discount_code | string | Discount Code |
reason_id | integer | Cancellation Reason ID |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
cancel_discount_code_id | integer | Cancel Discount Code ID |
message | string | Response 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Type | Description |
---|---|---|
discount_code | string | Discount code |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
discount | object | Order Discount Object |
discount_queue | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Sub Element | Type | Description |
---|---|---|---|
order_date | date | Order Date in Y-m-d format | |
order_products | array | ||
product_internal_id | integer | Recurring Orders internal product ID | |
quantity | integer | Product quantity | |
order_shipping_rate | Object | ||
code | string | Order Shipping Code | |
name | string | Order Shipping Name | |
price | string | Shipping Price | |
source | string | Shipping Source for example: shopify , cashier , decimal etc. | |
need_change | integer | 0/1 | |
hash | string | shipping Hash |
Response Data
Element | Type | Description |
---|---|---|
id | integer | |
order_product_exceptions | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Sub Element | Type | Description |
---|---|---|---|
product_internal_id | integer | Recurring Orders internal product ID for the product being replaced. | |
product_id | integer | Shopify product ID for the swap product. | |
variant_id | integer | Shopify variant ID for the swap product. | |
order_shipping_rate | object | ||
code | string | Order Shipping Code | |
name | string | Order Shipping Name | |
price | string | Shipping Price | |
source | string | Shipping Source for example: shopify , cashier , decimal etc. | |
need_change | integer | 0/1 | |
hash | string | shipping Hash |
Response Data
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
order_products | array | List of Order Product Objects |
order_shipping_rate | object | Order 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Description |
---|---|
order_date | skip date in the Y-m-d format |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
next_active_ship_date | date | Next Active Order Date |
order_exceptions | array | List 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Sub Element | Type | Description |
---|---|---|---|
billing_address | Object | ||
billing_first_name | string | Billing First name | |
billing_last_name | string | Billing Last name | |
billing_address1 | string | Billing Address | |
billing_address2 | string | Billing Address optional | |
billing_country | string | Billing Country | |
billing_company | string | Billing Company | |
billing_province | string | Billing Province | |
billing_city | string | Billing City | |
billing_zip | string | Billing Zip code | |
billing_phone | string | Billing Phone number |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
billing_first_name | string | Billing First Name |
billing_last_name | string | Billing Last name |
billing_address1 | string | Billing Address |
billing_address2 | string | Billing Address optional |
billing_country | string | Billing Country |
billing_province | string | Billing Province |
billing_city | string | Billing City |
billing_zip | string | Billing Zip Code |
billing_phone | string | Billing Phone Number |
billing_company | string | Billing 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Type | Description |
---|---|---|
token | string | Payment Gateway token |
Response Data
Element | Sub Element | Type | Description |
---|---|---|---|
id | integer | Subscription Order ID | |
credit_card | array | ||
expiry_date | date | Credit Card Expiry date | |
last_four | integer | Last 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Type | Description |
---|---|---|
next_ship_date | string | Next order date in the Y-m-d format |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
next_ship_date | date | Next order date in the Y-m-d format |
next_orders | date | Next orders date in the Y-m-d format |
build_a_box_next_orders | date | Next orders date and selections if the type is build a box |
order_exceptions | array | Array of order exception dates |
order_product_exceptions | array | List of Order Product Exceptions Object |
message | string | Message 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Type | Description |
---|---|---|
frequency_type | integer | Recurring interval type:1 - Day 2 - Week 3 - Month 5 - Year |
frequency_num | integer | Recurring interval number for example: 2 (for every 2 weeks/days etc.) |
Data Object
Element | Description |
---|---|
id | Subscription Order ID |
interval_number | Recurring interval number |
interval_type_id | Recurring interval type |
next_ship_date | Next order date in date string Y-m-d |
next_orders | The array of new next order dates |
order_exceptions | The 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Sub Element | Type | Description |
---|---|---|---|
prepaid_settings | object | ||
recurr_after_limit | integer | Automatically renew after last prepaid order Allowed: 0 / 1 |
Response Data
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
prepaid_settings | object | Order 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Sub Element | Type | Description |
---|---|---|---|
shipping_address | Object | ||
first_name | string | Shipping First name | |
last_name | string | Shipping Last name | |
address1 | string | Shipping Address | |
address2 | string | Shipping Address optional | |
country | string | Shipping Country | |
company | string | Shipping Company | |
province | string | Shipping Province | |
city | string | Shipping City | |
zip | string | Shipping Zip code | |
phone | string | Shipping Phone number | |
order_shipping_rate | Object | ||
code | string | Order Shipping Code | |
name | string | Order Shipping Name | |
price | string | Shipping Price | |
source | string | Shipping Source for example: shopify , cashier , decimal etc. | |
need_change | integer | 0/1 | |
hash | string | shipping Hash |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
first_name | string | Shipping First Name |
last_name | string | Shipping Last name |
address1 | string | Shipping Address |
address2 | string | Shipping Address optional |
country | string | Shipping Country |
province | string | Shipping Province |
city | string | Shipping City |
zip | string | Shipping Zip Code |
phone | string | Shipping Phone Number |
company | string | Shipping Company |
order_shipping_rate | object | Order 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Body Request
Element | Sub Element | Type | Description |
---|---|---|---|
order_shipping_rate | Object | ||
code | string | Order Shipping Code | |
name | string | Order Shipping Name | |
price | string | Shipping Price | |
source | string | Shipping Source for example: shopify , cashier , decimal etc. | |
need_change | integer | 0/1 | |
hash | string | shipping Hash |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
order_shipping_rate | object | Order 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Sub Element | Type | Description |
---|---|---|---|
order_products | |||
product_internal_id | integer | Recurring Orders internal product ID | |
quantity | integer | Product quantity | |
is_deleted | boolean | true/false | |
order_shipping_rate | Object | ||
bold_order_id | integer | Subscription Order ID | |
code | string | Order Shipping Code | |
name | string | Order Shipping Name | |
price | string | Shipping Price | |
source | string | Shipping Source for example: shopify , cashier , decimal etc. | |
need_change | integer | 0/1 | |
hash | string | shipping Hash |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
order_products | array | List of Order Product Object |
order_product_exceptions | array | List of Order Product Exceptions Object |
order_shipping_rate | object | Order 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
Element | Type | Description |
---|---|---|
order_id | integer | Subscription Order ID |
customer_id | integer | Shopify Customer ID |
shop | string | The store's Shopify domain, e.g. mystore.myshopify.com |
Request Body
Element | Type | Description |
---|---|---|
shopify_order_tags | string | A comma separated string of the tags that want to be applied to the order |
Data Object
Element | Type | Description |
---|---|---|
id | integer | Subscription Order ID |
shopify_order_tags | string | A comma separated string of the tags that want to be applied to the order |