Liftoff

Liftoff Documentation

Beta status

 

The Liftoff OData API is currently in beta status.

Resources and responses are subject to change.

About the Liftoff OData API

 

The Liftoff OData API is a powerful way to fine-tune your API queries to return only the data you need.

The OData standard supports multiple query options that may be appended to requests. These query options may be combined and adjusted to return whatever data you need. Examples include:

$expand: Specifies related resources to include in the results. Multiple values may be specified as a comma-separated list. For example, the following Order query includes the items and shipments associated with each order:

https://odata.liftoff.shop/odata/v1/Order?$expand=Items,Shipments

$filter: Filters a query to only include items that match the specified expressions. For example, the following Order query includes only finalized orders that were submitted in September 2019:

https://odata.liftoff.shop/odata/v1/Order?$filter=Status eq 'Finalized' and year(SubmissionDate) eq 2019 and month(SubmissionDate) eq 9

$orderby: Sorts the results according to the specified property and in the specified direction. For example, the following Customer query returns customers sorted by last login date, starting with the most recent login date:

https://odata.liftoff.shop/odata/v1/Customer?$orderby=LastLoginDate desc

$select: Specifies a limited subset of properties to include in the results. Multiple properties may be specified as a comma-separated list. For example, the following Order query returns only the order ID, order number, and submission date for each order:

https://odata.liftoff.shop/odata/v1/Order?$select=Id,OrderNumber,SubmissionDate

$skip: Specifies the number of items to skip in the returned results. This can be useful since Liftoff OData API responses are limited to a maximum of 100 items. For example, the following Order query returns the second 100 orders:

https://odata.liftoff.shop/odata/v1/Order?$skip=100

$top: Specifies the maximum number of items to include in the returned results. For example, the following Order query returns only the first 10 orders:

https://odata.liftoff.shop/odata/v1/Order?$top=10

Authentication

 

Authentication to the Liftoff OData API is handled by providing the following with every API request:

  1. Your account code as your Basic Auth username
  2. Your admin user's unique API key as your Basic Auth password

You can find your account code by logging in to My Liftoff and going to Account Details.

You can generate, view, or regenerate your admin user's API key by logging in to My Liftoff and going to Profile.

Treat your API key as a password. Keep it secret.

Anyone who has access to your API key can view, create, update, or delete your Liftoff data, as supported by the API and your API key's permissions.

Your API key should never be included in client-side code or anywhere else that is publicly accessible.

As an extra precaution, we strongly recommend regenerating your API key on a regular basis.

Authorization

 

Access to individual Liftoff OData API resources is restricted based on your admin user's permissions. For example, the Get order resource requires the View Orders permission. If an admin user is not assigned to a role with the View Orders permission, then using that admin user's API key to make a Get order request will result in a 403 Forbidden response.

Role permissions are managed via Roles on My Liftoff. Admin user role assignments are managed via Users. If you do not have access to role or user management, contact the owner of your Liftoff account.

Best practices

  1. Create an admin role specifically for API access. Grant that role access only to the permissions required by the API methods you need.
  2. Create an admin user specifically for API access. Place that user in the admin role you created for API access.
  3. Use that admin user's API key for all API access.
  4. Regenerate that admin user's API key on a regular basis.
  5. Keep all API keys secret. Never include them in client-side code or anywhere else that is publicly accessible.

Making Liftoff OData API requests

 

In order to make Liftoff OData API requests from your code, you will need to provide your Basic Auth credentials in an Authorization header with your API request. Follow these steps to generate the value for this header:

  1. Concatenate your username (your account code), a colon, and your password (your API key); e.g.:
    myaccount:2cde4235-84dc-4cb2-ac14-1af134253fe5
  2. Base64-encode the resulting string; e.g.:
    bXlhY2NvdW50OjJjZGU0MjM1LTg0ZGMtNGNiMi1hYzE0LTFhZjEzNDI1M2ZlNQ==
  3. Prepend "Basic " to the base64-encoded value; e.g.:
    Basic bXlhY2NvdW50OjJjZGU0MjM1LTg0ZGMtNGNiMi1hYzE0LTFhZjEzNDI1M2ZlNQ==

In the above example, the final Authorization header would be:

Authorization: Basic bXlhY2NvdW50OjJjZGU0MjM1LTg0ZGMtNGNiMi1hYzE0LTFhZjEzNDI1M2ZlNQ==

Response codes

 

The Liftoff OData API is a RESTful API. As such, it responds to requests with standard HTTP status codes, along with a JSON body, as appropriate. Common HTTP status codes used by the Liftoff OData API include:

Code
Message
Description

200

OK

The request succeeded.

201

Created

The request succeeded and resulted in a new resource being created.

400

Bad Request

The request could not be understood by the server due to malformed syntax.

401

Unauthorized

Authentication is required and failed.

403

Forbidden

The authenticated user does not have permission to fulfill the request.

404

Not Found

The requested resource could not be found.

405

Method Not Supported

The specified method (e.g., GET, POST, PATCH, etc.) is not supported by the resource.

500

Internal Server Error

The server encountered an unexpected error.

Exploring the Liftoff OData API

 

Our interactive documentation lets you explore Liftoff OData API resources in real time. Click Try It to send live requests to the Liftoff API.

Per our Authentication specs, you will be prompted to specify a username (your account code) and password (your API key) for each request.

Our interactive documentation acts upon your production data.

Adding, updating, and deleting resources via our interactive documentation will add, update, and delete production data for your Liftoff account.

Customer resources

 

A Customer represents an end customer within your Liftoff account.

Properties

Name
Type
Description

Id

int

The ID of the customer.

AccountId

int

The ID of the account that the customer belongs to.

Email

string

The email of the customer. The customer's email also serves as the customer's username for login purposes.

Name

string

The full name of the customer.

CreateDate

datetimeoffset

The date the customer was created.

LastModifiedDate

datetimeoffset

The date the customer was most recently modified.

LastLoginDate

datetimeoffset

The date the customer most recently logged in.

IsActive

boolean

Flag that indicates whether this is an active customer.

IsGuest

boolean

Flag that indicates whether this is a guest customer.

CurrencyCode

string

The 3-character currency code the customer has selected.

BillingAddresses (via $expand)

CustomerBillingAddress array

The collection of billing addresses for the customer.

ShippingAddresses (via $expand)

CustomerShippingAddress array

The collection of shipping addresses for the customer.

Get customers

Returns: Array of Customer resources
Permission required: View Customers

Note: Retrieves both active and inactive customers.

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Customer
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Customer \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Customer',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Customer")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Customer");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Customer"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get customer

Returns: Customer resource
Permission required: View Customers

Note: Retrieves both active and inactive customers.

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Customer(CustomerId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Customer(CustomerId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Customer(CustomerId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Customer(CustomerId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Customer(CustomerId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Customer(CustomerId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

CustomerId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Order resources

 

An Order represents a pending or finalized order for your Liftoff account.

Properties

Name
Type
Description

Id

int

The ID of the order. If you have configured custom order numbers for your Liftoff account, the Id value will be distinct from the OrderNumber.

AccountId

int

The ID of the Liftoff account the order belongs to.

CustomerId

int

The ID of the customer who placed the order.

Customer (via $expand)

Customer

The customer who placed the order.

CreateDate

datetimeoffset

The date/time the order was begun.

LastModifiedDate

datetimeoffset

The date/time the order was most recently modified.

SubmissionDate

datetimeoffset

The date/time the order was submitted.

Status

OrderStatus

The status of the order. Valid values are InProgress, Saved, Pending, Declined, Finalized, and Deleted.

OrderNumber

string

The order number of the order that is displayed in My Liftoff and on your Liftoff account's site.

Billing

Address

The billing address for the order.

Items (via $expand)

Item array

The collection of items in the order.

Shipments (via $expand)

Shipment array

The collection of shipments for the order.

CartTotal

decimal(18,2)

The total of all items in the order, in USD. Does not include shipping, taxes, or discounts.

UserCartTotal

decimal(18,2)

The total of all items in the order, converted to the user's currency. Does not include shipping, taxes, or discounts.

ShippingTotal

decimal(18,2)

The total shipping and handling price for the order, in USD.

UserShippingtotal

decimal(18,2)

The total shipping and handling price for the order, converted to the user's currency.

TaxTotal

decimal(18,2)

The total taxes for the order, in USD.

UserTaxTotal

decimal(18,2)

The total taxes for the order, converted to the user's currency.

DiscountTotal

decimal(18,2)

The total discount amount for the order, in USD.

UserDiscountTotal

decimal(18,2)

The total discount amount for the order, converted to the user's currency.

OrderTotal

decimal(18,2)

The total order amount, in USD. Includes all items, shipping, taxes, and discounts.

UserOrderTotal

decimal(18,2)

The total order amount, converted to the user's currency. Includes all items, shipping, taxes, and discounts.

CurrencyCode

string

The currency selected by the user who placed the order.

DisplayName

string

The user-assigned display name of the cart. Typically only used for saved orders.

Get orders

Returns: Array of Order resources
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Order
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Order \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Order',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Order")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Order");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Order"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get order

Returns: Order resource
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Order(OrderId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Order(OrderId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Order(OrderId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Order(OrderId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Order(OrderId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Order(OrderId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

OrderId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Order field resources

 

An Order Field represents a customer-entered order value, such as a PO number or cost center. You may define custom order fields for your Liftoff account. Customers are then prompted to enter values for these fields during the checkout process.

Name
Type
Description

Id

int

The ID of the order field.

OrderId

int

The ID of the order that the order field belongs to.

Order (via $expand)

Order

The order that the order field belongs to.

Name

string

The name of the order field.

Value

string

The value of the order field.

Get order fields

Returns: Array of Order Field resources
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/OrderField
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/OrderField \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/OrderField',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/OrderField")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/OrderField");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/OrderField"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get order field

Returns: OrderField resource
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/OrderField(OrderFieldId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/OrderField(OrderFieldId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/OrderField(OrderFieldId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/OrderField(OrderFieldId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/OrderField(OrderFieldId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/OrderField(OrderFieldId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

ItemId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Item resources

 

An Item represents a line item in an order.

Properties

Name
Type
Description

Id

int

The ID of the item.

OrderId

int

The ID of the order that the item belongs to.

Order (via $expand)

Order

The order that the item belongs to.

Status

ItemStatus

The status of the item. Values are Active, Pending Admin Approval, and Deleted.

ParentItemId

int

The ID of the parent item. This value will be null unless the item is a child item within a bundle.

ParentItem (via $expand)

Item

The parent item.

ProductId

int

The ID of the item's product.

Product (via $expand)

Product

The item's product.

ProductVariantId

int

The ID of the item's product variant.

ProductVariant (via $expand)

ProductVariant

The item's product variant.

Quantity

int

The quantity of the item.

BackorderedQuantity

int

The quantity of the item that is not currently in stock.

CurrencyCode

string

The currency selected by the user who placed the order.

BasePrice

decimal

The base extended price of the item, in USD. This value does not include upcharges or discounts.

UserBasePrice

decimal(18,2)

The base extended price of the item, converted to the customer's currency.

TotalPrice

decimal(18,2)

The total extended price of the item, in USD. This value includes upcharges. This value does not include discounts.

UserTotalPrice

decimal(18,2)

The total extended price of the item, converted to the customer's currency.

BaseCost

decimal(18,2)

Your base extended cost for the item, in USD. This value does not include upcharges or discounts.

TotalCost

decimal(18,2)

Your total extended cost of the item, in USD. This value includes upcharges. This value does not include discounts.

DiscountAmount

decimal(18,2)

The discount applied to the item, in USD.

BudgetAmount

decimal(18,2)

The budget amount applied to the item, in USD.

IsConfigurable

boolean

Flag that indicates whether the item involves any type of configuration.

IsConfigured

boolean

Flag that indicates whether the items has been configured, as applicable.

Get items

Returns: Array of Item resources
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Item
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Item \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Item',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Item")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Item");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Item"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get item

Returns: Item resource
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Item(ItemId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Item(ItemId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Item(ItemId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Item(ItemId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Item(ItemId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Item(ItemId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

ItemId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Shipment resources

 

A Shipment represents an individual shipment for a Liftoff order. Liftoff orders may have multiple shipments.

Properties

Name
Type
Description

Id

int

The ID of the shipment.

OrderId

int

The ID of the order that the shipment belongs to.

Order (via $expand)

Order

The order that the shipment belongs to.

ShipmentNumber

int

The number of the shipment. Together with an orderId, the shipmentNumber identifies an individual shipment.

Origin

Address

The origin address for the shipment.

Destination

Address

The destination address for the shipment.

ShippingPrice

decimal(18,2)

The shipping price of the shipment, in USD.

HandlingPrice

decimal(18,2)

The handling price of the shipment, in USD.

Status

ShipmentStatus

The status of the shipment. Valid values are InProcess, InProduction, ReadyToShip, Shipped, and Canceled.

EstimatedShipDate

date

The date the shipment is expected to leave the origin.

ActualShipDate

date

The date the shipment left the origin.

TrackingNumber

string

The tracking number of the shipment.

Weight

decimal(18,4)

The weight of the shipment.

Get shipments

Returns: Array of Shipment resources
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Shipment
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Shipment \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Shipment',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Shipment")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Shipment");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Shipment"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get shipment

Returns: Shipment resource
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

ShipmentId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Update shipment

Returns: Updated Shipment resource
Permission required: Edit Orders

 

Basic Auth

 Authentication is required for this endpoint.
patchhttps://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)
curl --request PATCH \
  --url 'https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'PATCH',
  url:
   'https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("PATCH", "https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Shipment(ShipmentId)"

headers = {'content-type': 'application/json'}

response = requests.request("PATCH", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

ShipmentId
int32
required

Body Params

Status
string

Valid values: Pending; InProduction; ReadyToShip; Shipped; Canceled; AutoFulfilled

EstimatedShipDate
date
ActualShipDate
date
TrackingNumber
string

Headers

Content-Type
string
required
 

Product resources

 

A Product represents a product in your Liftoff account.

Note that a Product may have multiple ProductVariants with different Option values.

For example, you may have a Product in your Liftoff account named Gel-Ink Pen. That Product may have an Option for Color, and individual ProductVariants for Black Gel-Ink Pen, Blue Gel-Ink Pen, and Red Gel-Ink Pen.

Properties

Name
Type
Description

Id

int

The ID of the product.

AccountId

int

The ID of the account that the product belongs to.

Type

ProductType

The type of product. Valid values are Product (for standard products) and Bundle (for bundles of products).

Code

string

The code for the product. Maximum length is 35 characters. Codes may contain letters, numbers, and hyphens.

Name

string

The name of the product. Displayed in product listings and search results.

Description

string

A brief description of the product. Displayed in product listings and search results.

IsPublished

boolean

Flag that indicates whether the product is active in your Liftoff account.

UrlPath

string

The URL path for the product's landing page. The URL path does not include https://, your domain name, or a leading slash.

Title

string

The title of the product's landing page.

PageText

string

The HTML that appears in the content area of your product's landing page.

SearchTerms

string

Comma-delimited list of search terms for the product. Must contain only letters, numbers, hyphens, and spaces. These terms are used by your Liftoff site's search feature. They do not impact searches conducted by external search engines such as Google.

MetaDescription

string

Content for the product landing page's meta description tag. This is an optional value for SEO purposes. Maximum length is 250 characters, but most search engines truncate this value to 150-160 characters.

MetaKeywords

string

Content for the product landing page's meta keywords tag. This is an optional value for SEO purposes. Place a comma between each keyword.

TrackInventory

boolean

Flag that indicates whether to enable inventory tracking for the product's SKUs.

DefaultOnHand

int

The default on hand quantity to assign to new variants of this product.

DefaultParLevel

int

The default par level to assign to new variants of this product.

DisplayStockLevel

boolean

Flag that indicates whether to display the current stock level to users. Not applicable if trackInventory is false.

AllowOutOfStockOrders

boolean

Flag that indicates whether to allow ordering if the stock level is 0. Not applicable if trackInventory is false.

RequireBudget

boolean

Flag that indicates whether a budget or gift card is required to order this product.

ProductSelectionType

ProductSelectionType

Valid values are Standard and Cascade. If the product has multiple SKUs, the product selection type specifies whether to present all option dropdowns to the user at once (Standard), or to step the user through selecting one option at a time (Cascade).

Get products

Returns: Array of Product resources
Permission required: View Products

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Product
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Product \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Product',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Product")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Product");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Product"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get product

Returns: Product resource
Permission required: View Products

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Product(ProductId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Product(ProductId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Product(ProductId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Product(ProductId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Product(ProductId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Product(ProductId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

ProductId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

ProductVariant resources

 

A ProductVariant represents an individual product variant in your Liftoff account.

See Product resources for details on the relationship between Products and ProductVariants.

Properties

Name
Type
Description

Id

int

The ID of the product variant.

AccountId

int

The ID of the account that the product variant belongs to.

ProductId

int

The ID of the product that the variant belongs to.

Product (via $expand)

Product

The product that the variant belongs to.

SKU

string

The SKU for the product variant. Maximum length is 75 characters. SKUs may contain letters, numbers, hyphens, underscores, number signs, and spaces. The same SKU may be assigned to multiple product variants.

IsPublished

boolean

Flag that indicates whether the product variant is active in your Liftoff account.

VariantName

string

The name of the product variant. Displayed on product landing pages and in users' carts.

VariantDescription

string

A brief description of the product variant. Displayed on product landing pages.

RestrictQuantities

boolean

If this flag is true, a dropdown containing only the product variant's price breaks will be presented for quantity entry. If false, a free-form text field will be presented for quantity entry.

QuantityIncrement

int

If this value is 0, then available quantities will include only the product variant's price breaks. If non-0, then available quantities will be incremented by that value between each price break.

MaxQuantity

int

The maximum quantity allowed for ordering. If null, then no maximum will be enforced.

UnitOfMeasurement

UnitOfMeasurement

The unit in which the product variant is sold. Used for calculating pricing and shipping rates. Valid values are Ea, M, L, Ct, Pkg, and Bx.

WeightPerUnit

decimal(18,4)

The weight of each unit of your product, in pounds. IMPORTANT: If this value is null, then your site's first shipping option will be $0, and all other shipping options will be disabled.

HandlingFeePerCarton

decimal(18,2)

The handling fee for each shipment, in USD. If provided, this value is added to the shipping charges for the order.

TemplateId

int

The ID of the template used for product configuration. Set to null for stock products.

Template (via $expand)

Template

The template used for product configuration.

Get product variants

Returns: Array of ProductVariant resources
Permission required: View Products

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/ProductVariant
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/ProductVariant \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/ProductVariant',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/ProductVariant")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/ProductVariant");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/ProductVariant"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get product variant

Returns: ProductVariant resource
Permission required: View Products

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/ProductVariant(ProductVariantId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/ProductVariant(ProductVariantId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/ProductVariant(ProductVariantId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/ProductVariant(ProductVariantId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/ProductVariant(ProductVariantId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/ProductVariant(ProductVariantId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

ProductVariantId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Vendor resources

 

A Vendor fulfills orders for your Liftoff account.

A Vendor may have multiple Locations. The Location that fulfills a given item may be selected based on its proximity to the shipping destination or based on current its inventory on hand.

Properties

Name
Type
Description

Id

int

The ID of the vendor.

SubscriberId

int

The ID of the subscriber that the vendor belongs to.

AccountId

int

The ID of the account that the vendor belongs to. Set to null if the vendor is shared among all accounts for your subscription.

Address

Address

The name, address, and phone of the vendor.

Email

string

The email of the vendor.

DefaultInstructions

string

The fulfillment instructions that are assigned by default to products fulfilled by this vendor.

Get vendors

Returns: Array of Vendor resources
Permission required: View Vendors

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Vendor
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Vendor \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Vendor',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Vendor")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Vendor");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Vendor"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get vendor

Returns: Vendor resource
Permission required: View Vendors

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Vendor(VendorId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Vendor(VendorId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Vendor(VendorId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Vendor(VendorId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Vendor(VendorId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Vendor(VendorId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

VendorId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Location resources

 

A Location is a specific location for a Vendor that fulfills orders for your Liftoff account.

The Location that fulfills a given item may be selected based on its proximity to the shipping destination or based on current its inventory on hand.

Properties

Name
Type
Description

Id

int

The ID of the location.

VendorId

int

The ID of the vendor that the location belongs to.

Vendor (via $expand)

Vendor

The vendor that the location belongs to.

Address

Address

The name, address, and phone of the vendor location.

OrderEmail

string

The email that fulfillment notifications are sent to. This is an optional value. If omitted, no fulfillment notification will be sent for items fulfilled by this vendor location.

Get vendor locations

Returns: Array of Location resources
Permission required: View Vendors

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Location
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Location \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Location',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Location")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Location");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Location"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get vendor location

Returns: Location resource
Permission required: View Vendors

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Location(LocationId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Location(LocationId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Location(LocationId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Location(LocationId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Location(LocationId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Location(LocationId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

LocationId
string
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Template resources

 

A Template represents a Pageflex template that can be applied to product variants in your Liftoff account. These templates allow your users to configure products with any number of variables, including text, images, and colors.

Properties

Name
Type
Description

Id

int

The ID of the template.

AccountId

int

The ID of the account that the template belongs to.

Name

string

The name of the template.

ProjectDirectory

string

The path to the Pageflex project directory for the template.

DesignFile

string

The path to the design file (.pf) for the template.

VariableFile

string

The path to the variable file (.xml) for the template.

Get templates

Returns: Array of Template resources
Permission required: View Templates

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Template
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Template \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Template',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Template")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Template");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Template"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get template

Returns: Template resource
Permission required: View Templates

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Template(TemplateId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Template(TemplateId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Template(TemplateId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Template(TemplateId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Template(TemplateId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Template(TemplateId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

TemplateId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Inventory Resources

 

An Inventory record specifies the inventory and par levels for a ProductVariant at a specific Location.

Properties

Name
Type
Description

Id

int

The ID of the inventory record.

ProductVariantId

int

The ID of the product variant being inventoried.

ProductVariant (via $expand)

ProductVariant

The product variant being inventoried.

VendorId

int

The ID of the vendor whose location holds inventory for the specified product variant.

Vendor (via $expand)

Vendor

The vendor whose location holds inventory for the specified product variant.

LocationId

int

The ID of the vendor location that holds inventory for the specified product variant.

Location (via $expand)

Location

The vendor location that holds inventory for the specified product variant.

OnHand

int

The on-hand inventory for the specified product variant at the specified vendor location.

Available

int

The available inventory for the specified product variant at the specified vendor location.

ParLevel

int

The par level for the specified product variant at the specified vendor location.

Get inventories

Returns: Array of Inventory resources
Permission required: Manage Inventory

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Inventory
curl --request GET \
  --url https://odata.liftoff.shop/odata/v1/Inventory \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://odata.liftoff.shop/odata/v1/Inventory',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Inventory")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Inventory");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Inventory"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

$expand
string
$filter
string
$orderby
string
$select
string
$skip
int32
$top
int32

Headers

Content-Type
string
required
 

Get inventory

Returns: Inventory resource
Permission required: Manage Inventory

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://odata.liftoff.shop/odata/v1/Inventory(InventoryId)
curl --request GET \
  --url 'https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

InventoryId
int32
required

Query Params

$expand
string
$select
string

Headers

Content-Type
string
required
 

Update inventory

Returns: Updated Inventory resource
Permission required: Manage Inventory

 

Basic Auth

 Authentication is required for this endpoint.
patchhttps://odata.liftoff.shop/odata/v1/Inventory(InventoryId)
curl --request PATCH \
  --url 'https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)' \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'PATCH',
  url:
   'https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("PATCH", "https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://odata.liftoff.shop/odata/v1/Inventory(InventoryId)"

headers = {'content-type': 'application/json'}

response = requests.request("PATCH", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

InventoryId
int32
required

Body Params

OnHand
int32
ParLevel
int32

Headers

Content-Type
string
required
 

Authentication

 

Authentication to the Liftoff REST API is handled by providing the following with every API request:

  1. Your account code as your Basic Auth username
  2. Your admin user's unique API key as your Basic Auth password

You can find your account code by logging in to My Liftoff and going to Account Details.

You can generate, view, or regenerate your admin user's API key by logging in to My Liftoff and going to Profile.

Treat your API key as a password. Keep it secret.

Anyone who has access to your API key can view, create, update, or delete your Liftoff data, as supported by the API and your API key's permissions.

Your API key should never be included in client-side code or anywhere else that is publicly accessible.

As an extra precaution, we strongly recommend regenerating your API key on a regular basis.

Authorization

 

Access to individual Liftoff REST API resources is restricted based on your admin user's permissions. For example, the Get order resource requires the View Orders permission. If an admin user is not assigned to a role with the View Orders permission, then using that admin user's API key to make a Get order request will result in a 403 Forbidden response.

Role permissions are managed via Roles on My Liftoff. Admin user role assignments are managed via Users. If you do not have access to role or user management, contact the owner of your Liftoff account.

Best practices

  1. Create an admin role specifically for API access. Grant that role access only to the permissions required by the API methods you need.
  2. Create an admin user specifically for API access. Place that user in the admin role you created for API access.
  3. Use that admin user's API key for all API access.
  4. Regenerate that admin user's API key on a regular basis.
  5. Keep all API keys secret. Never include them in client-side code or anywhere else that is publicly accessible.

Making Liftoff REST API requests

 

In order to make Liftoff REST API requests from your code, you will need to provide your Basic Auth credentials in an Authorization header with your API request. Follow these steps to generate the value for this header:

  1. Concatenate your username (your account code), a colon, and your password (your API key); e.g.:
    myaccount:2cde4235-84dc-4cb2-ac14-1af134253fe5
  2. Base64-encode the resulting string; e.g.:
    bXlhY2NvdW50OjJjZGU0MjM1LTg0ZGMtNGNiMi1hYzE0LTFhZjEzNDI1M2ZlNQ==
  3. Prepend "Basic " to the base64-encoded value; e.g.:
    Basic bXlhY2NvdW50OjJjZGU0MjM1LTg0ZGMtNGNiMi1hYzE0LTFhZjEzNDI1M2ZlNQ==

In the above example, the final Authorization header would be:

Authorization: Basic bXlhY2NvdW50OjJjZGU0MjM1LTg0ZGMtNGNiMi1hYzE0LTFhZjEzNDI1M2ZlNQ==

Response codes

 

The Liftoff REST API is a RESTful API. As such, it responds to requests with standard HTTP status codes, along with a JSON body, as appropriate. Common HTTP status codes used by the Liftoff REST API include:

Code
Message
Description

200

OK

The request succeeded.

201

Created

The request succeeded and resulted in a new resource being created.

400

Bad Request

The request could not be understood by the server due to malformed syntax.

401

Unauthorized

Authentication is required and failed.

403

Forbidden

The authenticated user does not have permission to fulfill the request.

404

Not Found

The requested resource could not be found.

405

Method Not Supported

The specified method (e.g., GET, POST, PATCH, etc.) is not supported by the resource.

500

Internal Server Error

The server encountered an unexpected error.

Error responses

 

If an API request results in an error, the response will contain the appropriate HTTP status code, along with a JSON body containing an array of Error objects describing each error that occurred.

Properties

Name
Type
Description

status

int

The HTTP status code that corresponds to the error. Generally this will be the same as the HTTP status code of the response. If multiple errors are being returned, status values for each individual error may vary.

title

string

A brief statement of the error that occurred.

detail

string

If applicable, a detailed statement of the error that occurred.

{
  "errors": [
    {
      "status": 404,
      "title": "Order not found.",
      "detail": null
    }
  ]
}
{
  "errors": [
    {
      "status": 400,
      "title": "Status not valid.",
      "detail": "Status must be one of the following values: InProcess, InProduction, ReadyToShip, Shipped, Canceled."
    },
    {
      "status": 400,
      "title": "Actual ship date not valid.",
      "detail": null
    }
  ]
}

Success responses

 

If an API request results in success, the response will contain an HTTP status code 200 (OK). The response may also contain a JSON body containing one or more of the following top-level members:

Member
Description

data

The data returned by the resource.

meta

Descriptive information about the data being returned. For example, if the data is an array, the meta object may contain a count property with the number of elements in the array.

The structure of the JSON body and the properties of the data and meta objects will vary for each resource. See that resource's documentation for details.

{
  "data": [
    {
      "id": 5163,
      "orderId": 1032830,
      "shipmentNumber": 1
      ...
    },
    {
      "id": 5169,
      "orderId": 1032830,
      "shipmentNumber": 2
      ...
    }
  ],
  "meta": {
    "count": 2
  }
}

Pagination

 

If a resource returns an array of data, then you can specify two optional query parameters to paginate results:

Parameter
Type
Description

page

integer

Page number to return. Defaults to 1.

limit

integer

Number of records per page. Defaults to 50. Maximum value is 200.

In addition, the meta object in the response body will contain the following properties:

Name
Type
Description

count

integer

Number of records in the response.

total

integer

Total number of available records.

totalPages

integer

Total number of available pages.

page

integer

Returned page.

limit

integer

Number of records per page.

Exploring the Liftoff REST API

 

Our interactive documentation lets you explore Liftoff REST API resources in real time. Click Try It to send live requests to the Liftoff API.

Per our Authentication specs, you will be prompted to specify a username (your account code) and password (your API key) for each request.

Our interactive documentation acts upon your production data.

Adding, updating, and deleting resources via our interactive documentation will add, update, and delete production data for your Liftoff account.

User resources

 

A User represents an end customer within your Liftoff account.

Properties

Name
Type
Description

id

int

The ID of the user.

email

string

The email of the user. The user's email also serves as the user's username for login purposes.

name

string

The full name of the user.

createDate

datetime

The date the user was created.

lastModifiedDate

datetime

The date the user was most recently modified.

lastLoginDate

datetime

The date the user most recently logged in.

isActive

boolean

Flag that indicates whether this is an active account.

isGuest

boolean

Flag that indicates whether this is a guest account.

currencyCode

string

The 3-character currency code the user has selected.

defaultBilling

LoginAddress

The default billing address for the user.

defaultShipping

LoginAddress

The default shipping address for the user.

Get users

Returns: Array of User objects
Permission required: View Users

Note: Retrieves both active and inactive users.

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/users
curl --request GET \
  --url https://my.liftoff.shop/api/v1/users \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://my.liftoff.shop/api/v1/users',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/users");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

page
int32
limit
int32

Headers

Content-Type
string
required
 

Get user

Returns: User object
Permission required: View Users

Note: Retrieves both active and inactive users.

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/users/userId
curl --request GET \
  --url https://my.liftoff.shop/api/v1/users/userId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/users/userId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users/userId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/users/userId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users/userId"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

userId
int32
required

Headers

Content-Type
string
required
 

Add user

Returns: New User object
Permission required: Add Users

 

Basic Auth

 Authentication is required for this endpoint.
posthttps://my.liftoff.shop/api/v1/users
curl --request POST \
  --url https://my.liftoff.shop/api/v1/users \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'POST',
  url: 'https://my.liftoff.shop/api/v1/users',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://my.liftoff.shop/api/v1/users");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users"

headers = {'content-type': 'application/json'}

response = requests.request("POST", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Body Params

email
string
required
password
string
required
name
string
currencyCode
string

Defaults to the default currency code for your Liftoff account.

isActive
boolean

Headers

Content-Type
string
required
 

Update user

Returns: Updated User object
Permission required: Edit Users

 

Basic Auth

 Authentication is required for this endpoint.
patchhttps://my.liftoff.shop/api/v1/users/userId
curl --request PATCH \
  --url https://my.liftoff.shop/api/v1/users/userId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'PATCH',
  url:
   'https://my.liftoff.shop/api/v1/users/userId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users/userId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("PATCH", "https://my.liftoff.shop/api/v1/users/userId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users/userId"

headers = {'content-type': 'application/json'}

response = requests.request("PATCH", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

userId
int32
required

Body Params

email
string
password
string
name
string
currencyCode
string
isActive
boolean

Headers

Content-Type
string
required
 

UserAddress resources

 

A UserAddress represents an address that belongs to an end user of your Liftoff account.

Properties

Name
Type
Description

id

int

The ID of the user address.

userId

int

The ID of the user that the address belongs to.

type

string

The type of address. Valid values are Billing and Shipping.

isDefault

boolean

Flag that indicates whether this is the user's default address for the specified type.

address

Address

The address itself. This is an Address object with its own properties (name, address 1, address 2, city, etc.).

Get user addresses

Returns: Array of UserAddress objects
Permission required: View Users

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/users/userId/addresses/type
curl --request GET \
  --url https://my.liftoff.shop/api/v1/users/userId/addresses/type \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/users/userId/addresses/type',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users/userId/addresses/type")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/users/userId/addresses/type");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users/userId/addresses/type"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

userId
int32
required
type
string
required

Valid values: Billing; Shipping.

Query Params

page
int32
limit
int32

Headers

Content-Type
string
required
 

Get user address

Returns: UserAddress object
Permission required: View Users

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId
curl --request GET \
  --url https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

userId
int32
required
userAddressId
int32
required

Headers

Content-Type
string
required
 

Add user address

Returns: New UserAddress object
Permission required: Edit Users

 

Basic Auth

 Authentication is required for this endpoint.
posthttps://my.liftoff.shop/api/v1/users/userId/addresses
curl --request POST \
  --url https://my.liftoff.shop/api/v1/users/userId/addresses \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'POST',
  url: 'https://my.liftoff.shop/api/v1/users/userId/addresses',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users/userId/addresses")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://my.liftoff.shop/api/v1/users/userId/addresses");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users/userId/addresses"

headers = {'content-type': 'application/json'}

response = requests.request("POST", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Body Params

type
string
required

Valid values: Billing; Shipping.

isDefault
boolean

Note: Only one address of a given type can have an isDefault value of true. Setting isDefault to true for a new address will set isDefault to false for all other addresses of that type.

name
string
required
attention
string
address1
string
required
address2
string
city
string

Note: If the country supports postal code lookups, then this value will automatically be overridden by the city derived from the postal code.

state
string

Note: If the country supports postal code lookups, then this value will automatically be overridden by the state derived from the postal code.

postalCode
string
required
country
string

Defaults to the default country code for your Liftoff account.

phone
string

Headers

Content-Type
string
required
 

Update user address

Returns: Updated UserAddress object
Permission required: Edit Users

 

Basic Auth

 Authentication is required for this endpoint.
patchhttps://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId
curl --request PATCH \
  --url https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'PATCH',
  url:
   'https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("PATCH", "https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId"

headers = {'content-type': 'application/json'}

response = requests.request("PATCH", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

userId
int32
required
userAddressId
int32
required

Body Params

isDefault
boolean

Note: Only one address of a given type can have an isDefault value of true. Changing isDefault to true will set isDefault to false for all other addresses of that type.

name
string
attention
string
address1
string
address2
string
city
string

Note: If the country supports postal code lookups, then this value will automatically be overridden by the city derived from the postal code.

state
string

Note: If the country supports postal code lookups, then this value will automatically be overridden by the state derived from the postal code.

postalCode
string
country
string
phone
string

Headers

Content-Type
string
required
 

Delete user address

Returns: No body
Permission required: Edit Users

 

Basic Auth

 Authentication is required for this endpoint.
deletehttps://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId
curl --request DELETE \
  --url https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'DELETE',
  url:
   'https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("DELETE", "https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/users/userId/addresses/userAddressId"

headers = {'content-type': 'application/json'}

response = requests.request("DELETE", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

userId
int32
required
userAddressId
int32
required

Headers

Content-Type
string
required
 

Product resources

 

A Product represents a product in your Liftoff account.

Note that a Product may have multiple ProductVariants with different Option values.

For example, you may have a Product in your Liftoff account named Gel-Ink Pen. That Product may have an Option for Color, and individual ProductVariants for Black Gel-Ink Pen, Blue Gel-Ink Pen, and Red Gel-Ink Pen.

Properties

Name
Type
Description

id

int

The ID of the product.

type

string

The type of product. Valid values are Product (for standard products) and Bundle (for bundles of products).

code

string

The code for the product. Maximum length is 35 characters. Codes may contain letters, numbers, and hyphens.

name

string

The name of the product. Displayed in product listings and search results.

description

string

A brief description of the product. Displayed in product listings and search results.

isPublished

boolean

Flag that indicates whether the product is active in your Liftoff account.

urlPath

string

The URL path for the product's landing page. The URL path does not include http://, your domain name, or a leading slash.

title

string

The title of the product's landing page.

pageText

string

The HTML that appears in the content area of your product's landing page.

searchTerms

string

Comma-delimited list of search terms for the product. Must contain only letters, numbers, hyphens, and spaces. These terms are used by your Liftoff site's search feature. They do not impact searches conducted by external search engines such as Google.

metaDescription

string

Content for the product landing page's meta description tag. This is an optional value for SEO purposes. Maximum length is 250 characters, but most search engines truncate this value to 150-160 characters.

metaKeywords

string

Content for the product landing page's meta keywords tag. This is an optional value for SEO purposes. Place a comma between each keyword.

trackInventory

boolean

Flag that indicates whether to enable inventory tracking for the product's SKUs.

defaultOnHand

int

The default on hand quantity to assign to new variants of this product.

defaultParLevel

int

The default par level to assign to new variants of this product.

displayStockLevel

boolean

Flag that indicates whether to display the current stock level to users. Not applicable if trackInventory is false.

allowOutOfStockOrders

boolean

Flag that indicates whether to allow ordering if the stock level is 0. Not applicable if trackInventory is false.

requireBudget

boolean

Flag that indicates whether a budget or gift card is required to order this product.

productSelectionType

string

Valid values are Standard and Cascade. If the product has multiple SKUs, the product selection type specifies whether to present all option dropdowns to the user at once (Standard), or to step the user through selecting one option at a time (Cascade).

Get products

Returns: Array of Product objects
Permission required: View Products

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/products
curl --request GET \
  --url https://my.liftoff.shop/api/v1/products \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://my.liftoff.shop/api/v1/products',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/products");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

page
int32
limit
int32

Headers

Content-Type
string
required
 

Get product

Returns: Product object
Permission required: View Products

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/products/productId
curl --request GET \
  --url https://my.liftoff.shop/api/v1/products/productId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/products/productId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/products/productId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required

Headers

Content-Type
string
required
 

Add product

Returns: New Product object
Permission required: Add Products

 

Basic Auth

 Authentication is required for this endpoint.
posthttps://my.liftoff.shop/api/v1/products
curl --request POST \
  --url https://my.liftoff.shop/api/v1/products \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'POST',
  url: 'https://my.liftoff.shop/api/v1/products',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://my.liftoff.shop/api/v1/products");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products"

headers = {'content-type': 'application/json'}

response = requests.request("POST", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Body Params

code
string
required
name
string
required
description
string
isPublished
boolean
urlPath
string
required
title
string
required
pageText
string
searchTerms
string
metaDescription
string
metaKeywords
string
trackInventory
boolean
defaultOnHand
int32
defaultParLevel
int32
displayStockLevel
boolean
allowOutOfStockOrders
boolean
requireBudget
boolean
productSelectionType
string

Valid values: Standard; Cascade.

Headers

Content-Type
string
required
 

Update product

Returns: Updated Product object
Permission required: Edit Products

 

Basic Auth

 Authentication is required for this endpoint.
patchhttps://my.liftoff.shop/api/v1/products/productId
curl --request PATCH \
  --url https://my.liftoff.shop/api/v1/products/productId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'PATCH',
  url:
   'https://my.liftoff.shop/api/v1/products/productId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("PATCH", "https://my.liftoff.shop/api/v1/products/productId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId"

headers = {'content-type': 'application/json'}

response = requests.request("PATCH", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required

Body Params

code
string
name
string
description
string
isPublished
boolean
urlPath
string
title
string
pageText
string
searchTerms
string
metaDescription
string
metaKeywords
string
trackInventory
boolean
defaultOnHand
int32
defaultParLevel
int32
displayStockLevel
boolean
allowOutOfStockOrders
boolean
requireBudget
boolean
productSelectionType
string

Valid values: Standard; Cascade.

Headers

Content-Type
string
required
 

Delete product

Returns: No body
Permission required: Delete Products

 

Basic Auth

 Authentication is required for this endpoint.
deletehttps://my.liftoff.shop/api/v1/products/productId
curl --request DELETE \
  --url https://my.liftoff.shop/api/v1/products/productId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'DELETE',
  url:
   'https://my.liftoff.shop/api/v1/products/productId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("DELETE", "https://my.liftoff.shop/api/v1/products/productId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId"

headers = {'content-type': 'application/json'}

response = requests.request("DELETE", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required

Headers

Content-Type
string
required
 

ProductVariant resources

 

A ProductVariant represents an individual product variant in your Liftoff account.

See Product resources for details on the relationship between Products and ProductVariants.

Properties

Name
Type
Description

id

int

The ID of the product variant.

productId

int

The ID of the product that the variant belongs to.

sku

string

The SKU for the product variant. Maximum length is 75 characters. SKUs may contain letters, numbers, hyphens, underscores, number signs, and spaces. The same SKU may be assigned to multiple product variants.

isPublished

boolean

Flag that indicates whether the product variant is active in your Liftoff account.

variantName

string

The name of the product variant. Displayed on product landing pages and in users' carts.

variantDescription

string

A brief description of the product variant. Displayed on product landing pages.

restrictQuantities

boolean

If this flag is true, a dropdown containing only the product variant's price breaks will be presented for quantity entry. If false, a free-form text field will be presented for quantity entry.

quantityIncrement

int

If this value is 0, then available quantities will include only the product variant's price breaks. If non-0, then available quantities will be incremented by that value between each price break.

maxQuantity

int

The maximum quantity allowed for ordering. If null, then no maximum will be enforced.

unitOfMeasurement

string

The unit in which the product variant is sold. Used for calculating pricing and shipping rates. Valid values are Ea, M, L, Ct, Pkg, and Bx.

weightPerUnit

decimal

The weight of each unit of your product, in pounds. IMPORTANT: If this value is null, then your site's first shipping option will be $0, and all other shipping options will be disabled.

handlingFeePerCarton

decimal

The handling fee for each shipment, in USD. If provided, this value is added to the shipping charges for the order.

createDate

datetime

The date the product variant was created.

lastModifiedDate

datetime

The date the product variant was most recently modified.

template

Template

The template used for product configuration. Not applicable to static products.

Get product variants

Returns: Array of ProductVariant objects
Permission required: View Products

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/products/productId/variants
curl --request GET \
  --url https://my.liftoff.shop/api/v1/products/productId/variants \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/products/productId/variants',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId/variants")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/products/productId/variants");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId/variants"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required

Headers

Content-Type
string
required
 

Get product variant

Returns: ProductVariant object
Permission required: View Products

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/products/productId/variants/productVariantId
curl --request GET \
  --url https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required
productVariantId
int32
required

Query Params

page
int32
limit
int32

Headers

Content-Type
string
required
 

Update product variant

Returns: Updated ProductVariant object
Permission required: Edit Products

 

Basic Auth

 Authentication is required for this endpoint.
patchhttps://my.liftoff.shop/api/v1/products/productId/variants/productVariantId
curl --request PATCH \
  --url https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'PATCH',
  url:
   'https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("PATCH", "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId"

headers = {'content-type': 'application/json'}

response = requests.request("PATCH", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required
productVariantId
int32
required

Body Params

sku
string
isPublished
boolean
variantName
string
variantDescription
string
restrictQuantities
boolean
quantityIncrement
int32
maxQuantity
int32
unitOfMeasurement
string

Valid values: Ea; M; L; Ct; Pkg; Bx.

weightPerUnit
double
handlingFeePerCarton
double
templateId
int32

Headers

Content-Type
string
required
 

Delete product variant

Returns: No body
Permission required: Edit Products

 

Basic Auth

 Authentication is required for this endpoint.
deletehttps://my.liftoff.shop/api/v1/products/productId/variants/productVariantId
curl --request DELETE \
  --url https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'DELETE',
  url:
   'https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("DELETE", "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId"

headers = {'content-type': 'application/json'}

response = requests.request("DELETE", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required

Headers

Content-Type
string
required
 

Vendor resources

 

A Vendor fulfills orders for your Liftoff account.

A Vendor may have multiple Locations. The Location that fulfills a given item may be selected based on its proximity to the shipping destination or based on current its inventory on hand.

Properties

Name
Type
Description

id

int

The ID of the vendor.

address

Address

The name, address, and phone of the vendor. This is an Address object with its own properties (name, address 1, address 2, city, etc.).

email

string

The email of the vendor.

defaultInstructions

string

The fulfillment instructions that are assigned by default to products fulfilled by this vendor.

Get vendors

Returns: Array of Vendor object
Permission required: View Vendors

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/vendors
curl --request GET \
  --url https://my.liftoff.shop/api/v1/vendors \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url: 'https://my.liftoff.shop/api/v1/vendors',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/vendors")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/vendors");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/vendors"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Query Params

page
int32
limit
int32

Headers

Content-Type
string
required
 

Get vendor

Returns: Vendor object
Permission required: View Vendors

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/vendors/vendorId
curl --request GET \
  --url https://my.liftoff.shop/api/v1/vendors/vendorId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/vendors/vendorId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/vendors/vendorId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/vendors/vendorId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/vendors/vendorId"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

vendorId
int32
required

Headers

Content-Type
string
required
 

Location resources

 

A Location is a specific location for a Vendor that fulfills orders for your Liftoff account.

The Location that fulfills a given item may be selected based on its proximity to the shipping destination or based on current its inventory on hand.

Properties

Name
Type
Description

id

int

The ID of the location.

vendorId

int

The ID of the vendor that the location belongs to.

vendorName

string

The name of the vendor that the location belongs to.

address

Address

The name, address, and phone of the vendor location. This is an Address object with its own properties (name, address 1, address 2, city, etc.).

orderEmail

string

The email that fulfillment notifications are sent to. This is an optional value. If omitted, no fulfillment notification will be sent for items fulfilled by this vendor location.

Get vendor locations

Returns: Array of Location object
Permission required: View Vendors

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/vendors/vendorId/locations
curl --request GET \
  --url https://my.liftoff.shop/api/v1/vendors/vendorId/locations \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/vendors/vendorId/locations',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/vendors/vendorId/locations")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/vendors/vendorId/locations");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/vendors/vendorId/locations"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

vendorId
int32
required

Query Params

page
int32
limit
int32

Headers

Content-Type
string
required
 

Get vendor location

Returns: Location object
Permission required: View Vendors

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/vendors/vendorId/locations/vendorLocationId
curl --request GET \
  --url https://my.liftoff.shop/api/v1/vendors/vendorId/locations/vendorLocationId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/vendors/vendorId/locations/vendorLocationId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/vendors/vendorId/locations/vendorLocationId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/vendors/vendorId/locations/vendorLocationId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/vendors/vendorId/locations/vendorLocationId"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

vendorId
int32
required
vendorLocationId
int32
required

Headers

Content-Type
string
required
 

Inventory resources

 

An Inventory record specifies the inventory and par levels for a ProductVariant at a specific Location.

Properties

Name
Type
Description

id

int

The ID of the inventory record.

productVariantId

int

The ID of the product variant.

vendorId

int

The ID of the vendor whose location holds inventory for the specified product variant.

vendorLocationId

int

The ID of the vendor location that holds inventory for the specified product variant.

onHand

int

The on hand inventory for the specified product variant at the specified vendor location.

available

int

The available inventory for the specified product variant at the specified vendor location.

parLevel

int

The par level for the specified product variant at the specified vendor location.

Get inventory

Returns: Array of Inventory objects
Permission required: Manage Inventory

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory
curl --request GET \
  --url https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required
productVariantId
int32
required

Headers

Content-Type
string
required
 

Update inventory

Returns: Updated Inventory object
Permission required: Manage Inventory

 

Basic Auth

 Authentication is required for this endpoint.
patchhttps://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory/inventoryId
curl --request PATCH \
  --url https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory/inventoryId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'PATCH',
  url:
   'https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory/inventoryId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory/inventoryId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("PATCH", "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory/inventoryId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/products/productId/variants/productVariantId/inventory/inventoryId"

headers = {'content-type': 'application/json'}

response = requests.request("PATCH", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

productId
int32
required
productVariantId
int32
required
inventoryId
int32
required

Body Params

onHand
int32
parLevel
int32

Headers

Content-Type
string
required
 

Template resources

 

A Template represents a Pageflex template that can be applied to product variants in your Liftoff account. These templates allow your users to configure products with any number of variables, including text, images, and colors.

Properties

Name
Type
Description

id

int

The ID of the template.

name

string

The name of the template.

projectDirectory

string

The path to the Pageflex project directory for the template.

designFile

string

The path to the design file (.pf) for the template.

variableFile

string

The path to the variable file (.xml) for the template.

Get template

Returns: Template object
Permission required: View Templates

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/templates/templateId
curl --request GET \
  --url https://my.liftoff.shop/api/v1/templates/templateId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/templates/templateId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/templates/templateId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/templates/templateId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/templates/templateId"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

templateId
int32
required

Headers

Content-Type
string
required
 

Order resources

 

An Order represents a pending or finalized order for your Liftoff account.

Properties

Name
Type
Description

id

int

The ID of the order. If you have configured custom order numbers for your Liftoff account, the id value will be distinct from the orderNumber.

siteId

int

The ID of the Liftoff account the order belongs to.

userId

int

The ID of the user who placed the order.

createDate

datetime

The date/time the order was begun.

lastModifiedDate

datetime

The date/time the order was most recently modified.

submissionDate

datetime

The date/time the order was submitted.

status

string

The status of the order. Valid values are InProgress, Saved, Pending, Declined, Finalized, and Deleted.

orderNumber

string

The order number of the order that is displayed in My Liftoff and on your Liftoff account's site.

billing

Address

The billing address for the order.

items

array

The collection of Item resources in the order.

cartTotal

decimal

The total of all items in the order, in USD. Does not include shipping, taxes, or discounts.

userCartTotal

decimal

The total of all items in the order, converted to the user's currency. Does not include shipping, taxes, or discounts.

shippingTotal

decimal

The total shipping and handling price for the order, in USD.

userShippingtotal

decimal

The total shipping and handling price for the order, converted to the user's currency.

taxTotal

decimal

The total taxes for the order, in USD.

userTaxTotal

decimal

The total taxes for the order, converted to the user's currency.

discountTotal

decimal

The total discount amount for the order, in USD.

userDiscountTotal

decimal

The total discount amount for the order, converted to the user's currency.

orderTotal

decimal

The total order amount, in USD. Includes all items, shipping, taxes, and discounts.

userOrderTotal

decimal

The total order amount, converted to the user's currency. Includes all items, shipping, taxes, and discounts.

currencyCode

string

The currency selected by the user who placed the order.

displayName

string

The user-assigned display name of the cart. Typically only used for saved orders.

Get order

Returns: Order object
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/orders/orderId
curl --request GET \
  --url https://my.liftoff.shop/api/v1/orders/orderId \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/orders/orderId',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/orders/orderId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/orders/orderId");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/orders/orderId"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

orderId
int32
required

Headers

Content-Type
string
required
 

Item resources

 

An Item represents a line item in an order.

Properties

Name
Type
Description

id

int

The ID of the item.

orderId

int

The ID of the order that the item belongs to.

status

string

The status of the item. Values are Active, Pending Admin Approval, and Deleted.

parentItemId

int

The ID of the parent item. This value will be null unless the item is a child item within a bundle.

productVariantId

int

The ID of the item's product variant.

code

string

The code for the item's product.

sku

string

The SKU for the item's product variant.

name

string

The name of the item's product variant.

description

string

The description for the item's product variant.

quantity

int

The quantity of the item.

backorderedQuantity

int

The quantity of the item that is not currently in stock.

currencyCode

string

The currency selected by the user who placed the order.

basePrice

decimal

The base extended price of the item, in USD. This value does not include upcharges or discounts.

userBasePrice

decimal

The base extended price of the item, converted to the user's currency.

totalPrice

decimal

The total extended price of the item, in USD. This value includes upcharges. This value does not include discounts.

userTotalPrice

decimal

The total extended price of the item, converted to the user's currency.

baseCost

decimal

Your base extended cost for the item, in USD. This value does not include upcharges or discounts.

totalCost

decimal

Your total extended cost of the item, in USD. This value includes upcharges. This value does not include discounts.

discountAmount

decimal

The discount applied to the item, in USD.

itemFiles

array

The collection of ItemFile associated with the item.

productImage

string

The filename of the item's product image.

previewImageUrl

string

The URL path for the item's preview image.

upcharges

array

The collection of ItemUpcharge resources that have been applied to the item.

childItems

array

The collection of Item resources that are children of the item. This collection will be empty unless the item is a bundle.

ItemFile resources

 

An ItemFile represents a file that is associated with the item. An item may have the following files:

  • Preview: A user-facing preview of the item.
  • Proof: A proof of a customized item.
  • Production files: A production-ready file for fulfillment of a customized item.
  • Upload: A file the user has uploaded for the item.

Properties

Name
Type
Description

id

int

The ID of the item file.

type

string

The type of file. Valid values are Preview, Proof, Production, and Upload.

filename

string

The filename of the item file.

ItemUpcharge resources

 

An ItemUpcharge represents a charge (such as a setup fee) that is added to an item's base price.

Properties

Name
Type
Description

name

string

The name of the upcharge.

code

string

The code for the upcharge.

price

decimal

The user's extended price for the upcharge, in USD.

userPrice

decimal

The user's extended price for the upcharge, converted to the user's currency.

cost

decimal

Your extended cost for the upcharge, in USD.

Shipment resources

 

A Shipment represents an individual shipment for a Liftoff order. Liftoff orders may have multiple shipments.

Properties

Name
Type
Description

id

int

The ID of the shipment.

orderId

int

The ID of the order that the shipment belongs to.

shipmentNumber

int

The number of the shipment. Together with an orderId, the shipmentNumber identifies an individual shipment.

shippingPrice

decimal

The shipping price of the shipment, in USD.

handlingPrice

decimal

The handling price of the shipment, in USD.

status

string

The status of the shipment. Valid values are InProcess, InProduction, ReadyToShip, Shipped, and Canceled.

estimatedShipDate

date

The date the shipment is expected to leave the origin.

actualShipDate

date

The date the shipment left the origin.

trackingNumber

string

The tracking number of the shipment.

weight

decimal

The weight of the shipment.

destination

Address

The destination of the shipment.

origin

Address

The origin of the shipment.

shippingOption

ShippingOption

The shipping service level of the shipment.

shippingCarrier

ShippingCarrier

The carrier company handling delivery of the shipment.

Get order shipments

Returns: Array of Shipment objects
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/orders/orderId/shipments
curl --request GET \
  --url https://my.liftoff.shop/api/v1/orders/orderId/shipments \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/orders/orderId/shipments',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/orders/orderId/shipments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/orders/orderId/shipments");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/orders/orderId/shipments"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

orderId
int32
required

Headers

Content-Type
string
required
 

Get order shipment

Returns: Shipment object
Permission required: View Orders

 

Basic Auth

 Authentication is required for this endpoint.
gethttps://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber
curl --request GET \
  --url https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'GET',
  url:
   'https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber"

headers = {'content-type': 'application/json'}

response = requests.request("GET", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

orderId
int32
required
shipmentNumber
int32
required

Query Params

page
int32
limit
int32

Headers

Content-Type
string
required
 

Update order shipment

Returns: Updated Shipment object
Permission required: Edit Orders

 

Basic Auth

 Authentication is required for this endpoint.
patchhttps://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber
curl --request PATCH \
  --url https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber \
  --header 'content-type: application/json'
var request = require("request");

var options = { method: 'PATCH',
  url:
   'https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber',
  headers:
   { 'content-type': 'application/json' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});
require 'uri'
require 'net/http'

url = URI("https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
var data = JSON.stringify(false);

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("PATCH", "https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber");
xhr.setRequestHeader("content-type", "application/json");

xhr.send(data);
import requests

url = "https://my.liftoff.shop/api/v1/orders/orderId/shipments/shipmentNumber"

headers = {'content-type': 'application/json'}

response = requests.request("PATCH", url, headers=headers)

print(response.text)
A binary file was returned

You couldn't be authenticated

Try the API to see results

Path Params

orderId
int32
required
shipmentNumber
int32
required

Body Params

status
string

Valid values: InProcess; InProduction; ReadyToShip; Shipped; Canceled.

estimatedShipDate
date
actualShipDate
date
trackingNumber
string

Headers

Content-Type
string
required