Introduction
Welcome to the Sqquid.com API! You can use our API to access a store's catalog information or modify inventory levels. At Sqquid, each account is identified with a unique catalog which has products, product attributes, inventory, integrations, and orders.
Throttling
The rate limits are designed to allow your system to make steady requests over time while also having the capacity to make infrequent bursts. The rate limits use a leaky bucket algorithm. The bucket size and leak rate properties determine the API's burst behavior and request rate.
Rate Limit: | 2 per second |
Bucket Size: | 40 |
If the bucket size is exceeded, then an HTTP 429 Too Many Requests error is returned. The bucket empties at a leak rate of two requests per second. To avoid being throttled, you can build your system to average two requests per second.
Authentication
Key Based Authentication
This is the preferred authentication method for system integrations with Sqquid's API. Each account is able to manage their API keys through the dashboard. It is possible to have multiple API keys as needed and name them to identify which app uses which key.
To use this authentication method, the 3rd party application provides this API key and Sqquid returns a token that can be used for any subsequent API calls until it expires.
API Keys should be used as one per application and we encourage this integration method for all your needs.
POST
https://api.sqquid.com/v1/login
Content-Type: application/json
{
"api_key": "APP_API_KEY"
}
Response
Content-Type: application/json
Status: 200
{"token": "eyJhbGciOiJIUzI1NiIsfdfsdfsI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3RwcmVsInVzZXJfaWQiOjE3LCJlbWFpbCI6InRlc3RwcmVzcy5pbkBnbWFpbC5jb20iLCJleHAiOjE0NDc4MzMyMjl9.Ik_yi4lHbNbrRGhqmRpsW82Nls_O9lgXakk_syV-vSw"}
HTTP Request
POST https://api.sqquid.com/v1/login
Request Body
key | type | description |
---|---|---|
api_key | string | The app-specific api key (obtained via the UI) |
Response
The response will return a token which should be prefixed with Bearer
and included in all API requests to the server in a header that looks like the following:
Authorization: Bearer auth-token-string
(You must replace auth-token-string
with the token you got from the response.)
User Based Authentication
For ad-hoc API operations it is possible to authenticate using your account's username and password. Same as the other, it will return a token that can be used to authenticate any subsequent API calls until it expires.
Please make sure you take all security measures if using this authentication mechanism, including where you store the credentials on your end.
POST
https://api.sqquid.com/v1/login
Content-Type: application/json
{
"username": "your@email.com",
"password": "password"
}
Response
Content-Type: application/json
Status: 200
{"token": "eyJhbGciOiJIUzI1NiIsfdfsdfsI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3RwcmVsInVzZXJfaWQiOjE3LCJlbWFpbCI6InRlc3RwcmVzcy5pbkBnbWFpbC5jb20iLCJleHAiOjE0NDc4MzMyMjl9.Ik_yi4lHbNbrRGhqmRpsW82Nls_O9lgXakk_syV-vSw"}
This endpoint provides an authentication token to get access to private resources in Sqquid.
HTTP Request
POST https://api.sqquid.com/v1/login
Request Body
The username and password should be sent as a JSON object in the body of the request.
key | type | description |
---|---|---|
username | string | Username of the user (right now an email address) |
password | string | Password of the user |
Response
The response will return a token which should be prefixed with Bearer
and included in all API requests to the server in a header that looks like the following:
Authorization: Bearer auth-token-string
(You must replace auth-token-string
with the token you got from the response.)
Products
Get Products Count
Successful products count response:
{
"Products": 1000
}
This endpoint gets the number of orders since a specified date (or all if dates are blank). This also intended to use alongside the page and output limits associated with /products API endpoint.
HTTP Request
GET https://api.sqquid.com/v1/products/count
Query Parameters
Parameter | Required | Description |
---|---|---|
created_at_min | optional | Count products created after date (format: 2017-09-25T16:15:47-04:00) |
updated_at_min | optional | Count products created after date (format: 2017-09-25T16:15:47-04:00) |
Get Products
Successful orders response:
{
"Products": [
{
"id": 123,
"sku": "645506-493-123",
"name": "Women's Challenge Ss Jersey - Game Royal/white",
"description": "Women's Challenge SS Jersey - Game Royal/White",
"short_description": "",
"weight": null,
"price": "40.0000",
"price_special": "34.0000",
"price_msrp": null,
"created_at": "2017-08-30T17:20:40.000Z",
"updated_at": "2017-08-30T17:20:40.000Z",
"Attributes": [
{
"label": "Brand",
"value": "Acme",
},
{
"label": "Color1",
"value": "GAME ROYAL"
},
{
"label": "Color2",
"value": "WHITE"
}
],
"Categories": [
"Team"
],
"Child_Products": [
{
"id": 124,
"sku": "1523532750",
"name": "Women's Challenge Ss Jersey - Game Royal/white",
"description": "Wmn's Challenge Jsy Royal",
"short_description": "645506-493",
"weight": "1.5000",
"price": "40.0000",
"price_special": "34.0000",
"price_msrp": null,
"created_at": "2017-08-30T17:20:40.000Z",
"updated_at": "2017-08-30T17:20:41.000Z",
"Attributes": [
{
"label": "Size",
"value": "M",
},
{
"label": "Brand",
"value": "Acme"
},
{
"label": "ALU",
"value": "884776750365"
}
],
"qty": 1
}
]
}
]
}
This endpoint retrieves a list of products with all the associated order details.
HTTP Request
GET https://api.sqquid.com/v1/products
URL Parameters
Parameter | Required | Description |
---|---|---|
limit | optional | Amount of results (default: 50) (maximum: 250) |
page | optional | Page to show (default: 1) |
created_at_min | optional | Count products created after date (format: 2017-09-25T16:15:47-04:00) |
updated_at_min | optional | Count products updated after date (format: 2017-09-25T16:15:47-04:00) |
Update Product Inventory
Successful orders response:
{
"message": "success"
}
This endpoint retrieves a list of products with all the associated order details.
HTTP Request
POST https://api.sqquid.com/v1/products/inventory/update
URL Parameters
Parameter | Required | Description |
---|---|---|
sku | required | String or comma-separated list of product SKUs (list max 250) |
qty | required | Integer or comma-separated list of integers (list max 250) |
Products (New!)
Overview
Use our products API to create and manage products. A product in Sqquid is a global object that contains all of your data related to a specific product in your catalog. That includes: Sku/Style/Barcode, name, description, pricing data, brand, any other data, and the variants to the product itself such as color or size. Each channel has a copy of the global product data and can have channel specific data that will make it unique per channel. Some operations are only done on the global products such as create and delete. Some operations can be done on both the global and/or channel specific products: update, list.
Sqquid's product APIs can be used by POS and ERP systems to sync catalog information. This includes new product creation, updating, and deleting. When a POS or ERP system manages the catalog we recommend using the global product exclusively. This way the user can modify each channel with Sqquid's Merchandiser tool which is available from the dashboard.
Products in Sqquid
Products in Sqquid have a 2 layers structure of parent and child. The child product represents the variation of the product. Products have 1 or more variations and you have access to fully configurable variation attributes.
Products are flexible and can acommodate any number of attributes and/or variations. The minimal requirement for a product is a SKU and 1 variation. The variation carries the inventory location information for the products.
It is possible to filter and sort the product list results with the following defined product data fields:
Field Name | Type | Required | Searchable | Sortable | Default |
---|---|---|---|---|---|
sku | string | Yes | Yes | Yes | N/A |
name | string | No | Yes | Yes | "" |
description | string | No | Yes | No | "" |
alu | string | No | Yes | No | "" |
price | float | No | No | No | NULL |
price_special | float | No | No | No | NULL |
brand | string | No | Yes | Yes | "" |
data | Object | No | No | No | {} |
attributes | Object | No | No | No | {} |
created_at (read only) |
Datetime | Yes | No | Yes | N/A |
updated_at (read only) |
Datetime | Yes | No | Yes | N/A |
List products
This endpoint allows you to list the products in your catalog. Products can be listed with or without filters. Filters can be applied with any combination of the optional parameters. The list result can be sorted by a specified field or it will be sorted by the "created_at" field by default. This endpoint allows pagination and a maximum limit of 200 products per page. You can also choose to retrieve variants along with the products with a flag.
GET
https://api.sqquid.com/v2/products?channel_id=1&variants=true&sort=name&sort_direction=asc
Retrieve products with its variants
Response
Content-Type: application/json
Status: 200
{
"total": 3,
"limit": 20,
"offset": 0,
"results": [
{
"sku": "9023",
"price": 32.00,
"price_special": 4.45,
"name": "Adidas Supernova",
"alu": "",
"description": "my Adidas Supernova shoes",
"brand": "Adidas",
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z",
"variants": [],
"data": {}
},
{
"sku": "333556",
"price": 54.40,
"name": "Asics Nimbus 20",
"brand": "Asics",
"description": "",
"alu": "",
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z",
"variants": [
{
sku: "111111111",
"name": "",
"alu": "",
"description": "",
"brand": "",
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z",
"attributes": {
"color": "Red",
"size": "9.5"
},
"data": {
"weight": 9
}
}
]
},
{
"sku": "11122006",
"name": "Mizuno Wave 9",
"description": "These are some super awesome shoes",
"brand": "Mizuno",
"alu": "212214415535266436",
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z",
"variants": [],
"data": {
"categories": [
["Some", "Category"],
["Another", "Special", "List"]
]
}
}
]
}
GET https://api.sqquid.com/v2/products?channel_id={channel_id}
Querystring Parameters
key | type | description |
---|---|---|
channel_id | integer | (required) export channel id for products retrieved |
search | string | (optional) Search string (match in description, brand, and name) |
skus | string | (optional) comma separated list of skus to filter by |
brand | string | (optional) filter by a specific brand |
sort | string | (optional) sort by a specific field. The field must be sortable (see the table). Default is "created_at" |
sort_direction | string | (optional) sort direction, either "asc" or "desc". defaults to "asc" |
variants | boolean | (optional) retrieve products with variants. 'true' or 'false' (default) |
limit | integer | (optional) limits the amount of results. Default 20. Maximum 200 |
offset | integer | (optional) results to skip, for pagination |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Create a product
Create a new global product. A copy of the product is created for each channel. If a product with the sku provided already exists, it updates the product.
Note: products don't hold inventory, product variations do. Hence it is key that once a product was created the matching variation will also be created, then a matching inventory record can be created.
POST
https://api.sqquid.com/v2/products
Content-Type: application/json
{
"sku": "00933321",
"price": 34.22,
"name": "Mizuno Wave 9",
"description": "some description",
"brand": "Mizuno",
"data": {
"weight": 10,
"short_description": "short"
}
}
Response
Content-Type: application/json
Status: 200
{
"sku": "00933321",
"price": 34.22,
"name": "Mizuno Wave 9",
"description": "some description",
"brand": "Mizuno",
"data": {
"short_description": "short",
"weight": 10
},
"created_at": "2020-03-26T06:12:26.000Z",
"updated_at": "2020-03-26T16:04:31.000Z"
}
POST https://api.sqquid.com/v2/products
Request Body
key | type | description |
---|---|---|
sku | string | (required) Unique sku for the product |
name | string | (optional) Product name |
brand | string | (optional) Product's brand |
description | string | (optional) Product description |
alu | string | (optional) The product's ALU |
price | number | (optional) Price for the product. defaults to 0 |
price_special | number | (optional) Special price for the product |
data | object | (optional) Object containing custom data you want stored |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | Invalid format for request body. Please make sure you provide a valid JSON |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Update a product
Updates a product for all export channels, or for a specific channel if provided. The object fields are merged (simple merge) with the existing value.
PATCH
https://api.sqquid.com/v2/products/322542342
Content-Type: aplication/json
{
"price": 34.22,
"name": "Mizuno Wave 9",
"description": "some description",
"data": {
"weight": 20
}
}
Response
Content-Type: application/json
Status: 200
{
"sku": "322542342",
"price": 34.22,
"name": "Mizuno Wave 9",
"alu": "",
"description": "some description",
"brand": "Mizuno",
"data": {
"short_description": "short",
"weight": 20
}
"created_at": "2020-03-26T06:12:26.000Z",
"updated_at": "2020-03-26T16:04:31.000Z"
}
PATCH https://api.sqquid.com/v2/products/{sku}
URL Parameters
key | type | description |
---|---|---|
sku | string | sku of the product to be updated |
Request Body
key | type | description |
---|---|---|
channel_id | number | (optional) If provided, updates the copy of the product for this channel only |
name | string | (optional) Product name |
brand | string | (optional) Product's brand |
description | string | (optional) Product description |
alu | string | (optional) The product's ALU |
price | number | (optional) Price for the product. defaults to 0 |
price_special | number | (optional) Special price for the product |
data | object | (optional) Object containing custom data you want stored |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | Invalid format for request body. Please make sure you provide a valid JSON |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Product not found |
500 | Fatal | <Variable, internal error message> |
Delete a product
Deletes the product, along with all its variants
DELETE
https://api.sqquid.com/v2/products/3234556
Delete product with sku 3234556
Response
Content-Type: application/json
Status: 200
"OK"
DELETE https://api.sqquid.com/v2/products/{sku}
URL Parameters
key | type | description |
---|---|---|
sku | string | sku of the product |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Product not found |
500 | Fatal | <Variable, internal error message> |
List product variants
This endpoint allows you to list the product variants. You can also get the channel-specific copy of them.
GET
https://api.sqquid.com/v2/products/2344/variants?channel_id=1
Retrieve variants for product with sku 2344 on channel 1
Response
Content-Type: application/json
Status: 200
[
{
"sku": "9023",
"alu": "329025982598598332905",
"name": "",
"brand": "",
"description": "",
"attributes": {
"color": "Red",
"size": "9.5"
},
"data": {},
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z"
},
{
"sku": "333556",
"price_special": 4.40,
"name": "SPECIAL BUY NOW - Mizuno Wave 9",
"brand": "",
"price": 34.00,
"description": "",
"data": {
"weight": 2.3,
"special_price_end": "2020-08-24T19:35:58.000Z"
}
"attributes": {
"color": "Blue",
"size": "10"
}
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z"
}
]
GET https://api.sqquid.com/v2/products/{sku}/variants?channel_id={channel_id}
URL Parameters
key | type | description |
---|---|---|
sku | string | sku of the parent product |
Querystring Parameters
key | type | description |
---|---|---|
channel_id | integer | (require) channel id for products retrieved |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Create a product variant
Create a new product variant for all your channels. If a product variant with the sku provided already exists, it updates the variant
POST
https://api.sqquid.com/v2/products/2344/variants
Content-Type: application/json
{
"sku": "00933321",
"price": 34.22,
"name": "Mizuno Wave 9",
"description": "some description",
"brand": "Mizuno",
"data": {
"weight": 10,
"short_description": "short"
},
"attributes": {
"color": "Blue",
"size": "10"
}
}
Response
Content-Type: application/json
Status: 200
{
"sku": "00933321",
"price": 34.22,
"name": "Mizuno Wave 9",
"description": "some description",
"brand": "Mizuno",
"alu": "",
"data": {
"weight": 10,
"short_description": "short"
},
"attributes": {
"color": "Blue",
"size": "10"
}
"created_at": "2020-03-26T06:12:26.000Z",
"updated_at": "2020-03-26T16:04:31.000Z"
}
POST https://api.sqquid.com/v2/products/{sku}/variants
Request Body
key | type | description |
---|---|---|
sku | string | (required) Unique sku for the product |
name | string | (optional) Product name |
brand | string | (optional) Product's brand |
description | string | (optional) Product description |
alu | string | (optional) The product's ALU |
price | number | (optional) Price for the product. defaults to 0 |
price_special | number | (optional) Special price for the product |
data | object | (optional) Object containing custom data you want stored |
attributes | object | variation attributes (such as color, size, width, etc) |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | Invalid format for request body. Please make sure you provide a valid JSON |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Update a product variant
Updates a product variant for all export channels, or for a specific channel if provided. The "data" field will be merged with the existing value. Same for the "attributes" field
PATCH
https://api.sqquid.com/v2/products/2344/variants/45566
update variant with sku 45566 for product 2344
Content-Type: aplication/json
{
"price": 34.22,
"name": "Mizuno Wave 9AAA",
"description": "description"
}
Response
Content-Type: application/json
Status: 200
{
"sku": "00933321",
"price": 34.22,
"name": "Mizuno Wave 9AAA",
"description": "description",
"brand": "Mizuno",
"alu": "",
"data": {
"weight": 10,
"short_description": "short"
},
"attributes": {
"color": "Blue",
"size": "10"
}
"created_at": "2020-03-26T06:12:26.000Z",
"updated_at": "2020-03-26T16:04:31.000Z"
}
PATCH https://api.sqquid.com/v2/products/{sku}/variants/{variantSku}
URL Parameters
key | type | description |
---|---|---|
sku | string | sku of the parent product |
variantSku | string | sku of the product to be updated |
Request Body
key | type | description |
---|---|---|
channel_id | number | (optional) If provided, updates the copy of the product for this channel only |
name | string | (optional) Product name |
brand | string | (optional) Product's brand |
description | string | (optional) Product description |
alu | string | (optional) The product's ALU |
price | number | (optional) Price for the product. defaults to 0 |
price_special | number | (optional) Special price for the product |
data | object | (optional) Object containing custom data you want stored |
attributes | object | (optional) variation attributes (such as color, size, width, etc) |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | Invalid format for request body. Please make sure you provide a valid JSON |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Product or variant not found |
500 | Fatal | <Variable, internal error message> |
Delete a product variant
Deletes a product variant
DELETE
https://api.sqquid.com/v2/products/3234556/1234
Delete variant with sku 1234 for product with sku 3234556
Response
Content-Type: application/json
Status: 200
"OK"
DELETE https://api.sqquid.com/v2/products/{sku}/variants/{variantSku}
URL Parameters
key | type | description |
---|---|---|
sku | string | sku of the product |
variantSku | string | sku of the product to be updated |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Product or variant not found |
500 | Fatal | <Variable, internal error message> |
Inventory
Sqquid's Inventory APIs allow users to set, update, get and/or delete inventory for products and specify quantities by location. The APIs are built to support small and large catalogs. There are two main concepts in order to achieve real time inventory data flow: full sync and partial sync. The full sync is meant to be used anywhere between once per day to once per week and serves as a regular reset with a bigger payload. The partial sync is meant to be used on demand for specific skus that have changed in real time. The combination of both concepts guarantees accurate inventory data consistent across the entire catalog and in real time.
Inventory Location
Sqquid offers a flexible inventory model to support catalogs with various scenarios. Each product variation or individual sku has a unique inventory record which is shared across all channels in the account. Sqquid's inventory record supports a couple of location levels: location and bin. Although less preferred, Sqquid's model supports inventory without location information by using default locations and default bins. It's possible to use locations and ignore bins.
Locations for inventory can be set before or after an inventory location record is created. Managing locations can be done via the dashboard or the Locations API
Product Inventory
Each inventory record maps to a product. Inventory can be set before or after a product was created. However, products without an inventory record will always produce 0 qty_on_hand. Inventory records without products are meaningless but can exist. Either options may happen temporarily until the product record to match is created.
Managing products can be done via the Products API
Defaults
In all endpoints of the inventory APIs, the following defaults are applied:
Default location - If no location is specified for an item, inventory will be assigned to a default location all accounts have. This way, if you don't need support for inventory by location you are not forced to use it.
Default bin - If no bin data is provided for a sku in any given location, we will assign the inventory to the "default" bin.
Update Inventory - Partial
This endpoint sets the inventory quantities by location for each specified skus. A partial update call can be structured one sku at a time and hit our API as frequently as needed (although keep in mind throttling) or it can aggregate several skus and send a batch at a time. There is no functional difference.
PATCH
https://api.sqquid.com/v1/inventory/partial
Example 1: with inventory location and no bins
Content-Type: application/json
[
{
"sku": "609465503218",
"inventory": [
{
"location_external_id": "50",
      "qty_on_hand": 3
    },
    {
"location_external_id": "32",
"qty_on_hand": 4
    }
  ]
},
{
"sku": "609465503219",
"inventory": [
{
"location_external_id": "50",
      "qty_on_hand": 30
    },
    {
"location_external_id": "32",
"qty_on_hand": 30
    }
  ]
}
]
Example 2: with inventory location and bins
Content-Type: application/json
[
{
"sku": "609465503218",
"inventory": [
{
"location_external_id": "50",
"bin": "front",
      "qty_on_hand": 10
    },
{
"location_external_id": "50",
"bin": "back",
      "qty_on_hand": 15
    },
    {
"location_external_id": "32",
"bin": "front",
"qty_on_hand": 0
    }
  ]
}
]
Example 3: inventory only, no location data (old)
Content-Type: application/json
[
{
"sku": "609465503219",
"inventory": [
{
"qty_on_hand": 3
}
  ]
},
{
"sku": "609465503217",
"inventory": [
{
"qty_on_hand": 100
}
  ]
}
]
Response
Content-Type: application/json
Status: 200
"OK"
HTTP Request
PATCH https://api.sqquid.com/v1/inventory/partial
Request Body
The body for this request is a JSON array with objects. Each object has a sku and an array of inventory location items. Each inventory location item must contain an attribute called qty_on_hand.
key | type | description |
---|---|---|
sku | string | (required) sku the inventory corresponds to |
inventory | array | (required) array of inventory records for the product |
inventory > qty_on_hand | integer | (required) quantity to set the inventory record to. Set within each inventory item. |
|
string | (optional) external identifier for the store. if none is provided we set it to "default". Set within each inventory item. |
inventory > bin | string | (optional) Bin for the inventory record. If none is provided, we set it to "default". Set within each inventory item. |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | The request body is invalid |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Notes
- If location_external_id is not specified for an inventory record, the system will assign the inventory to "default" location.
- If bin is not specified for a location, the system will assign the inventory to "default" bin in the location.
- It is not an error to update an inventory before a matching product was created however the information will not be used or exposed until a matching product exists. Products can be created via POS integration or Products API.
Update Inventory - Full
Similar to update inventory partial, this endpoint sets inventory quantities by location for each sku however it also assumes that the list sent is the complete list of active skus and anything outside of this list is out of stock. Hence any inventory in Sqquid for skus that were not included with the call will be set to 0.
PATCH
https://api.sqquid.com/v1/inventory/full
Example of a full update. Any inventory records missing will be set to zero (0)
Content-Type: application/json
[
{
"sku": "609465503175",
"inventory": [
{
"location_external_id": "6050",
      "qty_on_hand": 43
    },
  ]
},
{
"sku": "609465503176",
"inventory": [
{
"location_external_id": "50",
      "qty_on_hand": 32
    }
  ]
},
{
"sku": "609465503177",
"inventory": [
{
"location_external_id": "50",
      "qty_on_hand": 32
    }
  ]
}
]
Response
Content-Type: application/json
Status: 200
"OK"
HTTP Request
PATCH https://api.sqquid.com/v1/inventory/full
Request Body
The body for this request is a JSON array with objects. Each object has a sku and an array of inventory location items. Each inventory location item must contain an attribute called qty_on_hand.
key | type | description |
---|---|---|
sku | string | (required) sku the inventory corresponds to |
inventory | array | (required) array of inventory records for the product |
inventory > qty_on_hand | integer | (required) quantity to set the inventory record to. Set within each inventory item. |
|
string | (optional) external identifier for the store. if none is provided we set it to "default". Set within each inventory item. |
inventory > bin | string | (optional) Bin for the inventory record. If none is provided, we set it to "default". Set within each inventory item. |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | The request body is invalid |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Notes
- If location_external_id is not specified for an inventory record, the system will assign the inventory to "default" location.
- If bin is not specified for a location, the system will assign the inventory to "default" bin in the location.
- It is not an error to update an inventory before a matching product was created however the information will not be used or exposed until a matching product exists. Products can be created via POS integration or Products API.
List inventory
This endpoint allows you to fetch all inventory records in sets of a maximum of 1000 records. You can filter the request by skus, location_external_id and bin.
GET
https://api.sqquid.com/v1/inventory?skus=99845,222345&location_external_id=234&bin=aisle-5&limit=2
Response
Content-Type: application/json
Status: 200
{
total: 12,
offset: 0,
limit: 2,
results: [
{
"sku": "99845",
"inventory": [
{
"qty_on_hand": 4,
"location_external_id": "234",
"bin": "aisle-5"
}
]
},
{
"sku": "222345",
"inventory": [
{
"qty_on_hand": 9,
"location_external_id": "234",
"bin": "aisle-5"
}
]
}
]
}
GET https://api.sqquid.com/v1/inventory
Querystring Parameters
key | type | description |
---|---|---|
skus | string | comma-separated list of skus. At least one needs to be provided. Maximum http request url length applies |
location_external_id | string | location id inventory records retrieved |
bin | string | retrieve inventory records only for this bin |
limit | integer | (optional) limits the amount of results. Default 20. Maximum 1000 |
offset | integer | (optional) results to skip, for pagination |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | The request can't be understood |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Get inventory by SKU
This endpoint allows you to fetch all inventory records by location for the specified sku.
GET
https://api.sqquid.com/v1/inventory/443332324
Response
Content-Type: application/json
Status: 200
[
{
"id": 1,
"qty_on_hand": 4,
"location_external_id": "234",
"bin": "aisle-5"
}
]
Update inventory by SKU
This endpoint allows you to provide inventory data for a single location with the specified location, bin and quantity. Unlike the massive updates (partial and full) this endpoint executes the update immediately and responds with the result of this operation.
PATCH
https://api.sqquid.com/v1/inventory/443332324
Content-Type: application/json
{
"qty_on_hand": 9,
"location_external_id": "234",
"bin": "aisle-5"
}
Response
Content-Type: application/json
Status: 200
{
"id": 212345556,
"qty_on_hand": 9,
"location_external_id": "234",
"bin": "aisle-5"
}
PATCH https://api.sqquid.com/v1/inventory/{sku}
URL Parameters
key | type | description |
---|---|---|
sku | string | (required) SKU you want to update inventory for |
Request body
key | type | description |
---|---|---|
qty_on_hand | string | (required) quantity to set the inventory record to |
location_external_id | string | (optional) external identifier for the store. if none is provided we set it to "default" |
bin | string | (optional) Bin for the inventory record. If none is provided, we set it to "default". |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | The request can't be understood |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Delete inventory by SKU
This endpoint deletes all inventory location records by sku.
DELETE
https://api.sqquid.com/v1/inventory/609465503177
Delete inventory record for sku 609465503177
Response
Content-Type: application/json
Status: 200
"OK"
DELETE https://api.sqquid.com/v1/inventory/{sku}
URL Parameters
key | type | description |
---|---|---|
sku | string | sku of the inventory record to be deleted |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | The request body is invalid |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Delete inventory by Id
This endpoint deletes a single inventory location record by for the specified sku.
DELETE
https://api.sqquid.com/v1/inventory/609465503177/111223234
Delete inventory record with id 111223234 for sku 609465503177
Response
Content-Type: application/json
Status: 200
"OK"
DELETE https://api.sqquid.com/v1/inventory/{sku}/{inventory_id}
URL Parameters
key | type | description |
---|---|---|
sku | string | sku of the inventory record to be deleted |
inventory_id | number | id of the inventory record to be deleted |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | The request body is invalid |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Orders
Get Orders Count
Successful orders count response:
{
"Orders": 28
}
This endpoint gets the number of orders since a specified date (or all if dates are blank). This API call is intended to be queried on a cron basis to check if we have any orders to fetch. The response is also intended to use alongside the page and output limits associated with /orders API endpoint.
HTTP Request
GET https://api.sqquid.com/v1/orders/count
Query Parameters
Parameter | Required | Description |
---|---|---|
created_at_min | optional | Count orders created after date (format: 2017-09-25T16:15:47-04:00) |
Get Orders
Successful orders response:
{
"Orders": [
{
"order_items": [
{
"id": 1,
"tax": "0.00",
"qty": 1,
"sku": "ABC",
"price": "19.99",
"discount": "0.00",
"total": "19.99",
"store_id": 123
}
],
"id": 1,
"external_id": "100000007",
"created_at": "2017-07-13T22:32:42.000Z",
"total": "24.99",
"tax": "0.00",
"receipt_id": "194860",
"source": "-",
"shipping_method": "Flat Rate - Fixed",
"shipping_address1": "123 Main St",
"shipping_address2": "",
"shipping_name": "Thomas Smith",
"shipping_city": "San Francisco",
"shipping_state": "California",
"shipping_zipcode": "94414",
"shipping_country": "US",
"shipping_phone": "123123131",
"shipping_charge": "5.00",
"billing_name": "Thomas Smith",
"billing_address1": "123 Main St",
"billing_address2": "",
"billing_city": "San Francisco",
"billing_state": "California",
"billing_zipcode": "94414",
"billing_country": "US",
"billing_phone": "123123131",
"customer_id": "9809372-98",
"customer_email": "email@gmail.com",
"customer_name": "Thomas Smith"
}
]
}
This endpoint retrieves a list of orders with all the associated order details.
HTTP Request
GET https://api.sqquid.com/v1/orders
URL Parameters
Parameter | Required | Description |
---|---|---|
ids | optional | A comma-separated list of order ids (list max 250) |
limit | optional | Amount of results (default: 50) (maximum: 250) |
page | optional | Page to show (default: 1) |
created_at_min | optional | Count orders created after date (format: 2017-09-25T16:15:47-04:00) |
Returns (Coming Soon)
Overview
The returns API allows you to mark items in an order to be returned and see all existing returns for an order. Returning items in an order will remove them from the items to be shipped and can, depending on your integrations settings, send the return against your POS system or export it to the sales channel the order was imported from.
Returns are formed by items being returned and an optional adjusment value. Each item always references a product being returned (by its sku), the quantity being returned and which one of your store locations is receiving that returned item.
The adjustment on the other hand is an optional number that you can use to return the customer certain charges such as shipping costs. The adjusment can also be nagative, which means you want to return some items but a portion of the total (for example, to fund your handling costs).
! To learn more on how to create locations in Sqquid, please visit the Locations section.
List returns
This endpoint allows you to list the returns for an order.
GET
https://api.sqquid.com/v2/orders/2345/returns
Retrieve returns for order with id 2345
Response
Content-Type: application/json
Status: 200
[
{
"id": 1,
"external_id": "331298352354-R1",
"channel_id": 3,
"tax": "24.00",
"total": "200.02",
"items": [
{
"sku": "2334555",
"store_id_return": "store1",
"qty": 2,
"tax": "12.00",
"price": "88.01",
"total": "200.02"
}
],
"created_at": "2020-06-12 12:34:00"
}
]
GET https://api.sqquid.com/v2/orders/{order_id}/returns
Path Parameters
key | type | description |
---|---|---|
order_id | integer | (required) order id in Sqquid |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Create a return
Given an order, you can return items in it, either fully or partially. You need to specify the store you're returning to. You can return items that are ready to be shipped, on hold or to ship, but not those that have been cancelled. You can't return items that have already been shipped or in quantities higher than the amount shipped. You can't return 0 quantity. You can define any adjustment you see fit, either positive or negative.
POST
https://api.sqquid.com/v2/orders/1234/returns
Content-Type: aplication/json
{
"items": [
{
"sku": "1234",
"store_id_return": "store2",
"qty": 1
}
]
}
Response
Content-Type: application/json
{
"id": 4,
"external_id": "331298352354-R3",
"channel_id": 3,
"tax": "4.00",
"total": "14.00",
"items": [
{
"sku": "1234",
"store_id_return": "store2",
"qty": 1,
"tax": "4.00",
"price": "10.00",
"total": "14.00"
}
],
"created_at": "2020-06-18 22:00:00"
}
POST
https://api.sqquid.com/v2/orders/1234/returns
Content-Type: aplication/json
{
"adjustment": -2.34
"items": [
{
"sku": "1234",
"store_id_return": "store2",
"qty": 1
}
]
}
Response
Content-Type: application/json
{
"id": 5,
"external_id": "331298352354-R4",
"channel_id": 3,
"adjustment": "-2.34"
"tax": "4.00",
"total": "11.56",
"items": [
{
"sku": "1234",
"store_id_return": "store2",
"qty": 1,
"tax": "4.00",
"price": "10.00",
"total": "14.00"
}
],
"created_at": "2020-06-18 22:00:00"
}
POST https://api.sqquid.com/v2/orders/{channel_id}/{order_no}/returns
Path Parameters
key | type | description |
---|---|---|
order_id | integer | (required) order id in Sqquid |
Request Body
key | type | description |
---|---|---|
adjustment | float | (optional) a number to be added to the return's total |
items | array | (required) order items to be returned |
items > sku | string | (required) Sku of the order item being returned |
items > store_id_return | string | (required) Store the order item is being returned to |
items > qty | integer | (required) Quantity being returned. Has to be greater than 0 |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | The message varies |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Dynamic Buffers
Overview
Dynamic buffers are a way to adjust inventory location quantities globally, by channel, by location, and/or by sku. Sqquid feeds inventory and/or inventory location quantities to all active online channels in real time. Dynamic buffers offers a way for users to adjust the quantities Sqquid will feed into the channels. We refer to the adjusted inventory quantities as calculated quantities.
The dynamic buffer concept: A buffer is any combination of the tuple <sku, channel_id, location_external_id> it applies to a quantity. Buffers can be created, listed and manipulated from our APIs, giving users tremendous flexibility over the calculated quantities Sqquid uses for channels.
Dynamic Buffers by example
Hot products A product starts selling fast, you have only 20 left and you don't want to run out of stock in your stores in case someone comes in while at the same time you're selling that same product on Amazon and your own website(s). Adding a dynamic buffer for these skus can protect your inventory at your brick and mortar stores. In some cases you might want to selectively add dynamic buffers for the sku for certain locations only. Adding a dynamic buffer for the sku AND the location would achieve that.
Hot locations A certain brick and mortar location is experiencing a higher than your average in store sales. As a result of your success you wish to protect inventory and fulfill online web orders with other locations. Adding a dynamic buffer to that location will help by automatically routing web orders elswhere and increase your keep in-store customer satisfaction high.
Reservations A retailer wishes to enable reservations for specific product quantities. Once a reservation is made, the product quantity should be taken out of inventory for all channels. Hence, adding a dynamic buffer for each corresponding sku will enable this in real time. In order to achieve that the buffers get created and assigned the desired quantity, when a reservation is complete the buffers quantities are set to 0 and when no longer needed they are deleted. If future reservations for the same SKUs are expected, the ids for the buffers can be saved and the update buffer diff endpoint can be used to indicate changes to the quantities. All operations will trigger new calculated inventory quantity updates to all active channels for the account.
List buffers
This endpoint allows you to list the buffers in our platform. You can filter buffers by channel, sku and location, or simply get all buffers you have.
GET
https://api.sqquid.com/v1/buffers?channel_id=3
Response
Content-Type: application/json
Status: 200
{
"total": 3,
"limit": 20,
"offset": 0,
"results": [
{
"id": 1,
"channel_id": 3,
"qty": 4,
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z"
},
{
"id": 4,
"channel_id": 3,
"sku": "3376447211",
"qty": 2,
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z"
},
{
"id": 4,
"channel_id": 3,
"location_external_id": 4,
"sku": "1111122331",
"qty": 2,
"created_at": "2020-03-24T19:35:58.000Z",
"updated_at": "2020-03-24T22:07:12.000Z"
}
]
}
GET https://api.sqquid.com/v1/buffers
Querystring Parameters
key | type | description |
---|---|---|
channel_id | integer | (optional) channel id for buffers retrieved |
location_external_id | string | (optional) location id for buffers retrieved |
sku | string | (optional) retrieve only for this sku |
limit | integer | (optional) limits the amount of results. Default 20. Maximum 200 |
offset | integer | (optional) results to skip, for pagination |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Create a buffer
Create a new buffer. The new buffer will apply to the inventory exposed to your different sales channels at the most granular possible level, taking into account channel, location and sku.
POST
https://api.sqquid.com/v1/buffers
Create a buffer with quantity 10 for the channel with id 3 and apply it to all locations in case of inventory by location
Content-Type: application/json
{
"sku": "00933321",
"channel_id": 3,
"qty": 10
}
Response
Content-Type: application/json
Status: 200
{
"id": 1,
"sku": "00933321",
"channel_id": 3,
"qty": 10,
"created_at": "2020-03-26T06:12:26.000Z",
"updated_at": "2020-03-26T16:04:31.000Z"
}
POST https://api.sqquid.com/v1/buffers
Request Body
key | type | description |
---|---|---|
channel_id | integer | (optional) apply buffer to this channel only |
location_external_id | string | (optional) apply buffer to this location only |
sku | string | (optional) apply buffer to a specific sku |
qty | integer | (required) quantity to set the buffer to. |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | Invalid format for request body. Please make sure you provide a valid JSON |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | Invalid channel id. Please use a channel id that is associated with your Sqquid account. |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Update a buffer
Sets the quantity of a buffer.
PATCH
https://api.sqquid.com/v1/buffers/37
Set the buffer quantity to 2 for buffer with id 37
Content-Type: aplication/json
{
"qty": 2
}
Response
Content-Type: application/json
Status: 200
{
"id": 37,
"sku": "00933321",
"channel_id": 3,
"qty": 2,
"updated_at": "2020-03-26T06:16:07.432Z",
"created_at": "2020-03-26T06:16:07.432Z"
}
PATCH https://api.sqquid.com/v1/buffers/{buffer_id}
URL Parameters
key | type | description |
---|---|---|
buffer_id | integer | id of the bufffer to be updated |
Request Body
key | type | description |
---|---|---|
qty | integer | (required) new quantity for the buffer. |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | Invalid format for request body. Please make sure you provide a valid JSON |
400 | BadRequest | Buffer id needs to be an integer |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Buffer not found |
500 | Fatal | <Variable, internal error message> |
Update a buffer quantity (diff)
Applies the difference (addition or subtraction) onto the quantity to a specified buffer.
PATCH
https://api.sqquid.com/v1/buffers/2/add
Request: Add -10 for buffer with id 2 (original quantity of 12)
Content-Type: application/json
{
"qty": -10
}
Response
Content-Type: application/json
Status: 200
{
"id": 2,
"sku": "00933321",
"channel_id": 3,
"qty": 2,
"created_at": "2020-03-26T06:12:26.000Z",
"updated_at": "2020-03-26T16:04:31.000Z"
}
PATCH https://api.sqquid.com/v1/buffers/{buffer_id}/add
URL Parameters
key | type | description |
---|---|---|
buffer_id | integer | id of the bufffer to be updated |
Request Body
key | type | description |
---|---|---|
qty | integer | (required) +/- quantity for the buffer. |
Errors
Status Code | Error code | Message |
---|---|---|
400 | BadRequest | Invalid format for request body. Please make sure you provide a valid JSON |
400 | BadRequest | Buffer id needs to be an integer |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Buffer not found |
500 | Fatal | <Variable, internal error message> |
Delete a buffer
Deletes the buffer record with specified id.
DELETE
https://api.sqquid.com/v1/buffers/2
Delete buffer with id 2
Response
Content-Type: application/json
Status: 200
"OK"
DELETE https://api.sqquid.com/v1/buffers/{buffer_id}
URL Parameters
key | type | description |
---|---|---|
buffer_id | integer | id of the bufffer to be deleted |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Buffer not found |
500 | Fatal | <Variable, internal error message> |
Locations
Overview
A location is a physical or a logical store location. Each location can have a store_id field, identifier which will be used as an external key to match with other systems (for example, a POS or ERP system), along with the store's information such as address and phone number.
Location types
A location in Sqquid has a type that affects how the fulfillment module works. Following is a list of the possible Location types and their meaning.
Type | Meaning |
---|---|
Geo Routing | This location type will make an assesment of the proximity of the shipping address to all locations that can ship the order. There will be a higher priority for keeping the shipment to less boxes but given two or more locations with similar inventories, the order will route to the closest location. |
|
The priority location type will force any order items that exist in these locations to be routed here first. This helps protect store fronts when you have inventory in warehouses or distribution centers. More than one such location can be setup. |
Dropship | The dropship location type should be setup with a virtual store location within your POS. Sqquid will route order items based on SKU/Barcode into this store location and it should simplify handling of dropship items. |
|
This location type is a catch-all. If none of the other locations had the order items in stock at the moment of processing the order for whatever reason, the order items and possibly the entire order will be assigned to this location. |
Get locations
This endpoint allows you to list the locations you registered in Sqqiud. You can filter locations several attributes in order to narrow down your search/list
GET
https://api.sqquid.com/v1/locations
Response
Content-Type: application/json
Status: 200
{
"total": 2,
"limit": 20,
"offset": 0,
"results": [
{
"id": 1,
"type_id": 0,
"enabled": true,
"store_id": "Store 1",
"address": "Evergreen 123",
"city": "Springfield",
"state": "IL",
"zip": "1234",
"phone": "111111122222"
},
{
"id": 2,
"type_id": 3,
"enabled": true,
"store_id": "0",
"address": "Default",
"city": "Los Angeles",
"state": "CA",
"zip": "1234",
"phone": "1111111111"
}
]
}
GET https://api.sqquid.com/v1/locations
Querystring Parameters
key | type | description |
---|---|---|
type_id | integer | location type |
store_id | string | store id for the location |
enabled | boolean | retrieve only enabled/disabled locations |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
500 | Fatal | <Variable, internal error message> |
Create a location
Create a new location. The operation fails if a location with the same store id exists for the account or the type it's a Geo Routing (type 0) and the zip code is invalid.
POST
https://api.sqquid.com/v1/locations
Content-Type: application/json
{
"type_id": 0,
"enabled": true,
"store_id": "Store 1",
"address": "Evergreen 123",
"city": "Springfield",
"state": "IL",
"zip": "1234",
"phone": "111111122222"
}
Response
Content-Type: application/json
Status: 200
{
"id": 1,
"type_id": 0,
"enabled": true,
"store_id": "Store 1",
"address": "Evergreen 123",
"city": "Springfield",
"state": "IL",
"zip": "1234",
"phone": "111111122222"
}
POST https://api.sqquid.com/v1/locations
Request Body
key | type | description |
---|---|---|
type_id | integer | (optional) location type. defaults to 3 |
store_id | string | (required) external identifier for the store |
enabled | boolean | (optional) Is the locaiton enabled. defaults to true |
zip | string | Zip code. Required if type_id is 0 |
address | string | (optional) Address line for the store |
city | string | (optional) City of the store |
state | string | (optional) State of the store |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
400 | BadRequest | Invalid zip code - Duplicate store id - Malformed payload |
500 | Fatal | <Variable, internal error message> |
Update a location
Updates a location.
PATCH
https://api.sqquid.com/v1/locations/2
Content-Type: aplication/json
{
"type_id": 0,
"enabled": true,
"store_id": "Store 1",
"address": "Evergreen 123",
"city": "Springfield",
"state": "IL",
"zip": "1234",
"phone": "111111122222"
}
Response
Content-Type: application/json
Status: 200
{
"id": 2,
"type_id": 0,
"enabled": true,
"store_id": "Store 1",
"address": "Evergreen 123",
"city": "Springfield",
"state": "IL",
"zip": "1234",
"phone": "111111122222"
}
PATCH https://api.sqquid.com/v1/locations/{location_id}
URL Parameters
key | type | description |
---|---|---|
location_id | integer | id of the location to be updated |
Request Body
key | type | description |
---|---|---|
type_id | integer | (optional) location type. defaults to 3 |
store_id | string | (required) external identifier for the store |
enabled | boolean | (optional) Is the locaiton enabled. defaults to true |
zip | string | Zip code. Required if type_id is 0 |
address | string | (optional) Address line for the store |
city | string | (optional) City of the store |
state | string | (optional) State of the store |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
400 | BadRequest | Invalid zip code - Duplicate store id - Malformed payload |
500 | Fatal | <Variable, internal error message> |
Delete a location
Deletes the location record with specified id.
DELETE
https://api.sqquid.com/v1/locations/2
Response
Content-Type: application/json
Status: 200
"OK"
DELETE https://api.sqquid.com/v1/locations/{location_id}
URL Parameters
key | type | description |
---|---|---|
location_id | integer | id of the location to be deleted |
Errors
|
Error code | Message |
---|---|---|
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Can't find the specified location |
500 | Fatal | <Variable, internal error message> |
Shipments
Get Shipments Count
Successful shipments count response:
{
"Shipments": 28
}
This endpoint gets the number of shipments since a specified date (or all if dates are blank). This API call is intended to be queried periodically to check if there are any new shipments. The response is also intended to use alongside the page and output limits associated with /shipments API endpoint.
HTTP Request
GET https://api.sqquid.com/v1/shipments/count
Query Parameters
Parameter | Required | Description |
---|---|---|
order_ids | optional | A comma-separated list of order ids (list max 250) |
created_at_min | optional | Count orders created after date (format: 2017-09-25T16:15:47-04:00) |
catalog_integration_id | optional | Integer for specific integration lookup |
Get Shipments
Successful shipments response:
{
"Shipments": [
{
"id": 2,
"order_id": 50,
"catalog_integration_id": 98,
"seller_fulfillment_id": null,
"distribution_center_id": 123,
"shipment_status": null,
"shipping_carrier": null,
"shipping_class": null,
"tracking_number": "1234abcd",
"tracking_urls": null,
"shipment_date": "2012-05-01T18:22:25.000Z",
"created_at": "2017-10-21T02:20:26.000Z",
"updated_at": "2017-10-21T02:20:26.000Z",
"order_items": [
{
"id": 77,
"qty": 1
}
]
},
{
"id": 3,
"order_id": 50,
"catalog_integration_id": 100,
"seller_fulfillment_id": null,
"distribution_center_id": 123,
"shipment_status": null,
"shipping_carrier": null,
"shipping_class": null,
"tracking_number": "trackthisthing",
"tracking_urls": null,
"shipment_date": "2012-06-01T18:22:25.000Z",
"created_at": "2017-10-21T15:54:48.000Z",
"updated_at": "2017-10-21T15:54:48.000Z",
"order_items": [
{
"id": 76,
"qty": 1
}
]
}
]
}
This endpoint retrieves a list of shipments with all the associated details.
HTTP Request
GET https://api.sqquid.com/v1/shipments
URL Parameters
Parameter | Required | Description |
---|---|---|
order_ids | optional | A comma-separated list of order ids (list max 250) |
created_at_min | optional | Count orders created after date (format: 2017-09-25T16:15:47-04:00) |
catalog_integration_id | optional | Integer for specific integration lookup |
limit | optional | Amount of results (default: 50) (maximum: 250) |
page | optional | Page to show (default: 1) |
Order Specific HTTP Request (depreciated)
GET https://api.sqquid.com/v1/order/#{order_id}/shipments
Query Parameters
Parameter | Required | Description |
---|---|---|
order_id | yes | (URL param) |
Create Shipments For Order
EXAMPLE REQUEST: Fulfill a single line item by explicitly specifying the line items to be fulfilled. (Here we do not give the explicitly QTY. This results in shipping the entire line item QTY )
{
"distribution_center_id": "123",
"shipment_date": "2012-05-01T14:22:25-04:00",
"tracking_number": "trackthisthing",
"order_items": [
{
"id": 76
}
]
}
EXAMPLE REQUEST: Fulfill all line items. Not specifying line item IDs causes all unfulfilled and partially fulfilled line items for the order to be fulfilled.
{
"distribution_center_id": "123",
"shipment_date": "2012-05-01T14:22:25-04:00",
"shipping_carrier": "carrier",
"shipping_class": "class",
"tracking_number": "trackthisthing",
}
EXAMPLE REQUEST: Partially fulfill a single line item by explicitly specifying the line item and quantity to be fulfilled.
{
"tracking_number": "trackthisthing",
"order_items": [
{
"id": 76,
"qty": 1
}
]
}
Successful shipment creation response:
{
"message": "success"
}
Error response (400):
{
"message": "Order items have already been fully shipped: 76"
}
This endpoint creates a shipment for a particular order.
HTTP Request
POST https://api.sqquid.com/v1/order/#{order_id}/shipments
URL Parameters
Parameter | Required | Description |
---|---|---|
order_id | yes | (URL param) |
shipment_status | optional | String (maximum length: 200) |
tracking_number | optional | String (maximum length: 200) |
shipping_carrier | optional | String (maximum length: 200) |
shipping_class | optional | String (maximum length: 200) |
seller_fulfillment_id | optional | Int |
distribution_center_id | optional | Int |
shipment_date | optional | Specify the shipment date (format: 2017-09-25T16:15:47-04:00) |
order_items | optional | Array of order IDs and (optional) qty |
Shipment Items
Get Shipment Items Count
Successful shipment items count response:
{
"shipmentitems": 17
}
Similar to the fulfillment page in our app, ShipmentItems represents the list of order items in the context of shipments. You can search ShipmentItems by scope (ToShip, Shipped, Cancelled, Flagged), by date range, by catalog_integration_id or any combination thereof. By default it will search all ShipmentItems that are marked ToShip for all catalog integrations under this account. This API call is intended to be queried periodically to check if there are any new shipment items. The response is also intended to use alongside the page and output limits associated with /shipmentitems API endpoint.
HTTP Request
GET https://api.sqquid.com/v1/shipmentitems/count
Query Parameters
Parameter | Required | Description |
---|---|---|
scope | optional | 'toship', 'shipped', 'cancelled', 'flagged', (default: 'toship') |
created_at_min | optional | Count orders created after date (format: 2019-09-25T16:15:47-04:00) |
created_at_max | optional | Count orders created before date (format: 2019-11-25T16:15:47-04:00) |
catalog_integration_id | optional | Integer for specific catalog integration lookup (default: null) |
Get Shipment Items
Successful shipment items response:
{
"shipmentitems": [
{
"id": 2,
"external_order_id": 50,
"external_receipt_id": 651987,
"catalog_integration_id": 98,
"distribution_center_id": 123,
"billing_name": "John Smith",
"shipping_name": "John Smith",
"shipping_address1": "123 Sepulveda Ave",
"shipping_address2": "Suite 200",
"shipping_city": "Los Angeles",
"shipping_state": "CA",
"shipping_zip": "90066",
"item_sku": "124589772987",
"item_brand": "Brand",
"item_parent_sku": "ABC-7865",
"item_qty": 1,
"shipping_carrier": null,
"shipping_class": null,
"tracking_number": "1234abcd",
"tracking_urls": null,
"shipment_status": null,
"shipment_date": "2019-10-21T18:22:25.000Z",
"created_at": "2019-10-21T02:20:26.000Z",
},
{
"id": 3,
"external_order_id": 50,
"external_receipt_id": 651123,
"catalog_integration_id": 98,
"distribution_center_id": 123,
"billing_name": "John Smith",
"shipping_name": "John Smith",
"shipping_address1": "123 Sepulveda Ave",
"shipping_address2": "Suite 200",
"shipping_city": "Los Angeles",
"shipping_state": "CA",
"shipping_zip": "90066",
"item_sku": "124589772000",
"item_brand": "Brand",
"item_parent_sku": "ZZZ-7865",
"item_qty": 2,
"shipping_carrier": null,
"shipping_class": null,
"tracking_number": "1234abcd765",
"tracking_urls": null,
"shipment_status": null,
"shipment_date": "2019-10-21T18:22:25.000Z",
"created_at": "2019-10-21T02:20:26.000Z",
},
]
}
This endpoint retrieves a list of shipment items with all the associated details.
HTTP Request
GET https://api.sqquid.com/v1/shipmentitems
URL Parameters
Parameter | Required | Description |
---|---|---|
scope | optional | 'toship', 'shipped', 'cancelled', 'flagged', (default: 'toship') |
created_at_min | optional | Count orders created after date (format: 2019-09-25T16:15:47-04:00) |
created_at_max | optional | Count orders created before date (format: 2019-09-25T16:15:47-04:00) |
catalog_integration_id | optional | Integer for specific catalog integration lookup (default: null) |
limit | optional | Amount of results (default: 50) (maximum: 250) |
page | optional | Page to show (default: 1) |
Cancel a shipment item
Cancels a shipment item. Equivalent to cancelling the shipment item from the frontend fulfillment dashboard.
PATCH
https://api.sqquid.com/v1/shipmentitems/2/cancel
Cancel shipment item with id 2
Response
Content-Type: application/json
Status: 200
"OK"
PATCH https://api.sqquid.com/v1/shipmentitems/{id}/cancel
URL Parameters
key | type | description |
---|---|---|
id | integer | id of the shipment item to be cancelled. The id can be fetched from the GET shipment items above. |
Errors
|
Error code | Message |
---|---|---|
400 | BadRequest | Message may vary |
401 | NotAuthenticated | The auth token was not provided or is invalid |
403 | Forbidden | The user doesn't have permission to perform this operation |
404 | NotFound | Buffer not found |
500 | Fatal | <Variable, internal error message> |
Errors
The Sqquid API uses the following error codes:
Error Code | Meaning |
---|---|
400 | Bad Request -- Your request sucks |
401 | Unauthorized -- Your API key is wrong or login credentials are incorect |
403 | Forbidden -- The requested is hidden for administrators only |
404 | Not Found -- The specified resource could not be found |
405 | Method Not Allowed -- You tried to access a resource with an invalid method |
406 | Not Acceptable -- You requested a format that isn't json |
410 | Gone -- The resource requested has been removed from our servers |
418 | I'm a teapot |
429 | Too Many Requests -- You're requesting too many resource! Slow down! |
500 | Internal Server Error -- We had a problem with our server. Try again later. |
503 | Service Unavailable -- We're temporarially offline for maintanance. Please try again later. |