API Reference
The storq.io API is organized around REST. Our API has predictable resource-oriented URLs, accepts JSON request bodies, returns JSON responses, and uses standard HTTP response codes and authentication.
Authentication
Authenticate your API requests by including your API key in the Authorization header.
curl https://storq.io/api/v1/products \
-H "Authorization: Bearer fsk_live_..."
require "net/http"
require "uri"
uri = URI("https://storq.io/api/v1/products")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
response = http.request(request)
puts response.body
const response = await fetch("https://storq.io/api/v1/products", {
headers: {
"Authorization": "Bearer fsk_live_..."
}
});
const data = await response.json();
console.log(data);
import requests
response = requests.get(
"https://storq.io/api/v1/products",
headers={"Authorization": "Bearer fsk_live_..."}
)
print(response.json())
Keep your API keys secure. Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth.
Products
List All Products
/api/v1/products
Returns a list of all products in your account.
Parameters
| Name | Type | Description |
|---|---|---|
sku |
string | Filter by SKU (exact match) |
search |
string | Search products by name or SKU |
Example Request
curl https://storq.io/api/v1/products \
-H "Authorization: Bearer fsk_live_..."
require "net/http"
require "uri"
uri = URI("https://storq.io/api/v1/products")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
response = http.request(request)
data = JSON.parse(response.body)
const response = await fetch("https://storq.io/api/v1/products", {
headers: {
"Authorization": "Bearer fsk_live_..."
}
});
const data = await response.json();
import requests
response = requests.get(
"https://storq.io/api/v1/products",
headers={"Authorization": "Bearer fsk_live_..."}
)
data = response.json()
Example Response
{
"products": [
{
"id": 1,
"name": "Wireless Mouse",
"sku": "MOUSE-001",
"barcode": "100000000001",
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z"
}
]
}
Retrieve a Product
/api/v1/products/:id
Retrieve details of a specific product.
Example Request
curl https://storq.io/api/v1/products/1 \
-H "Authorization: Bearer fsk_live_..."
require "net/http"
require "uri"
uri = URI("https://storq.io/api/v1/products/1")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
response = http.request(request)
product = JSON.parse(response.body)
const response = await fetch("https://storq.io/api/v1/products/1", {
headers: {
"Authorization": "Bearer fsk_live_..."
}
});
const product = await response.json();
import requests
response = requests.get(
"https://storq.io/api/v1/products/1",
headers={"Authorization": "Bearer fsk_live_..."}
)
product = response.json()
Example Response
{
"id": 1,
"name": "Wireless Mouse",
"sku": "MOUSE-001",
"barcode": "100000000001",
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z"
}
Create a Product
/api/v1/products
Create a new product.
Parameters
| Name | Type | Description |
|---|---|---|
name |
string | Required. Product name |
sku |
string | Required. Unique SKU |
Example Request
curl https://storq.io/api/v1/products \
-H "Authorization: Bearer fsk_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Wireless Keyboard",
"sku": "KEYB-001"
}'
require "net/http"
require "uri"
require "json"
uri = URI("https://storq.io/api/v1/products")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
request["Content-Type"] = "application/json"
request.body = { name: "Wireless Keyboard", sku: "KEYB-001" }.to_json
response = http.request(request)
product = JSON.parse(response.body)
const response = await fetch("https://storq.io/api/v1/products", {
method: "POST",
headers: {
"Authorization": "Bearer fsk_live_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
name: "Wireless Keyboard",
sku: "KEYB-001"
})
});
const product = await response.json();
import requests
response = requests.post(
"https://storq.io/api/v1/products",
headers={"Authorization": "Bearer fsk_live_..."},
json={"name": "Wireless Keyboard", "sku": "KEYB-001"}
)
product = response.json()
Update a Product
/api/v1/products/:id
Update an existing product.
Example Request
curl -X PUT https://storq.io/api/v1/products/1 \
-H "Authorization: Bearer fsk_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Product Name"
}'
require "net/http"
require "uri"
require "json"
uri = URI("https://storq.io/api/v1/products/1")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Put.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
request["Content-Type"] = "application/json"
request.body = { name: "Updated Product Name" }.to_json
response = http.request(request)
product = JSON.parse(response.body)
const response = await fetch("https://storq.io/api/v1/products/1", {
method: "PUT",
headers: {
"Authorization": "Bearer fsk_live_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
name: "Updated Product Name"
})
});
const product = await response.json();
import requests
response = requests.put(
"https://storq.io/api/v1/products/1",
headers={"Authorization": "Bearer fsk_live_..."},
json={"name": "Updated Product Name"}
)
product = response.json()
Stock
Check Stock Levels
/api/v1/stock
Get current stock levels for all products.
Parameters
| Name | Type | Description |
|---|---|---|
sku |
string | Filter by product SKU |
Example Response
{
"stock": [
{
"product_id": 1,
"sku": "MOUSE-001",
"warehouse_id": 1,
"location_id": 5,
"quantity": 100
}
]
}
Receive Stock
/api/v1/stock/receive
Add stock to a location.
Parameters
| Name | Type | Description |
|---|---|---|
sku |
string | Required. Product SKU |
quantity |
integer | Required. Quantity to receive |
location_id |
integer | Required. Destination location |
Example Request
curl https://storq.io/api/v1/stock/receive \
-H "Authorization: Bearer fsk_live_..." \
-H "Content-Type: application/json" \
-d '{
"sku": "MOUSE-001",
"quantity": 50,
"location_id": 5
}'
require "net/http"
require "uri"
require "json"
uri = URI("https://storq.io/api/v1/stock/receive")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
request["Content-Type"] = "application/json"
request.body = { sku: "MOUSE-001", quantity: 50, location_id: 5 }.to_json
response = http.request(request)
const response = await fetch("https://storq.io/api/v1/stock/receive", {
method: "POST",
headers: {
"Authorization": "Bearer fsk_live_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
sku: "MOUSE-001",
quantity: 50,
location_id: 5
})
});
const data = await response.json();
import requests
response = requests.post(
"https://storq.io/api/v1/stock/receive",
headers={"Authorization": "Bearer fsk_live_..."},
json={"sku": "MOUSE-001", "quantity": 50, "location_id": 5}
)
data = response.json()
Adjust Stock
/api/v1/stock/adjust
Adjust stock quantity (e.g., for corrections or damage).
Parameters
| Name | Type | Description |
|---|---|---|
sku |
string | Required. Product SKU |
quantity |
integer | Required. Adjustment amount (negative to decrease) |
location_id |
integer | Required. Location to adjust |
reason |
string | Reason for adjustment |
Orders
Create an Order
/api/v1/orders
Create a new order for fulfillment.
Parameters
| Name | Type | Description |
|---|---|---|
customer_email |
string | Required. Customer email address |
line_items |
array | Required. Array of line items |
Example Request
curl https://storq.io/api/v1/orders \
-H "Authorization: Bearer fsk_live_..." \
-H "Content-Type: application/json" \
-d '{
"customer_email": "[email protected]",
"line_items": [
{
"sku": "MOUSE-001",
"quantity": 2
}
]
}'
require "net/http"
require "uri"
require "json"
uri = URI("https://storq.io/api/v1/orders")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
request["Content-Type"] = "application/json"
request.body = {
customer_email: "[email protected]",
line_items: [{ sku: "MOUSE-001", quantity: 2 }]
}.to_json
response = http.request(request)
order = JSON.parse(response.body)
const response = await fetch("https://storq.io/api/v1/orders", {
method: "POST",
headers: {
"Authorization": "Bearer fsk_live_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
customer_email: "[email protected]",
line_items: [
{ sku: "MOUSE-001", quantity: 2 }
]
})
});
const order = await response.json();
import requests
response = requests.post(
"https://storq.io/api/v1/orders",
headers={"Authorization": "Bearer fsk_live_..."},
json={
"customer_email": "[email protected]",
"line_items": [
{"sku": "MOUSE-001", "quantity": 2}
]
}
)
order = response.json()
Retrieve an Order
/api/v1/orders/:id
Get order details.
Check Order Status
/api/v1/orders/:id/status
Get current fulfillment status of an order.
Example Response
{
"id": 1,
"status": "shipped",
"fulfillment_status": "complete",
"tracking_number": "1Z999AA10123456784",
"shipped_at": "2026-01-16T14:20:00Z"
}
Customers
List All Customers
/api/v1/customers
Returns a paginated list of all customers in your account.
Example Response
{
"customers": [
{
"id": 1,
"name": "Acme Corp",
"email": "[email protected]",
"phone": "+44 20 7946 0958",
"company_name": "Acme Corporation",
"billing_vat_number": "GB123456789",
"payment_method": "pay_later",
"notes": null,
"addresses": [
{
"id": 1,
"label": "Head Office",
"line1": "123 Main St",
"line2": null,
"city": "London",
"postcode": "EC1A 1BB",
"country": "GB",
"default_billing": true,
"default_shipping": true
}
],
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z"
}
]
}
Retrieve a Customer
/api/v1/customers/:id
Retrieve details of a specific customer, including their recent orders.
Create a Customer
/api/v1/customers
Create a new customer.
Parameters
| Name | Type | Description |
|---|---|---|
name |
string | Required. Customer name |
email |
string | Email address (unique per account) |
phone |
string | Phone number |
company_name |
string | Company name |
billing_vat_number |
string | VAT number for billing |
payment_method |
string | pay_later or pay_now |
notes |
string | Internal notes |
addresses_attributes |
array | Array of address objects with label, line1, line2, city, postcode, country, default_billing, default_shipping |
Example Request
curl https://storq.io/api/v1/customers \
-H "Authorization: Bearer fsk_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corp",
"email": "[email protected]",
"company_name": "Acme Corporation",
"payment_method": "pay_later"
}'
require "net/http"
require "uri"
require "json"
uri = URI("https://storq.io/api/v1/customers")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
request["Content-Type"] = "application/json"
request.body = {
name: "Acme Corp",
email: "[email protected]",
company_name: "Acme Corporation",
payment_method: "pay_later"
}.to_json
response = http.request(request)
customer = JSON.parse(response.body)
const response = await fetch("https://storq.io/api/v1/customers", {
method: "POST",
headers: {
"Authorization": "Bearer fsk_live_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
name: "Acme Corp",
email: "[email protected]",
company_name: "Acme Corporation",
payment_method: "pay_later"
})
});
const customer = await response.json();
import requests
response = requests.post(
"https://storq.io/api/v1/customers",
headers={"Authorization": "Bearer fsk_live_..."},
json={
"name": "Acme Corp",
"email": "[email protected]",
"company_name": "Acme Corporation",
"payment_method": "pay_later"
}
)
customer = response.json()
Update a Customer
/api/v1/customers/:id
Update an existing customer.
Example Request
curl -X PUT https://storq.io/api/v1/customers/1 \
-H "Authorization: Bearer fsk_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corporation"
}'
require "net/http"
require "uri"
require "json"
uri = URI("https://storq.io/api/v1/customers/1")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Put.new(uri)
request["Authorization"] = "Bearer fsk_live_..."
request["Content-Type"] = "application/json"
request.body = { name: "Acme Corporation" }.to_json
response = http.request(request)
customer = JSON.parse(response.body)
const response = await fetch("https://storq.io/api/v1/customers/1", {
method: "PUT",
headers: {
"Authorization": "Bearer fsk_live_...",
"Content-Type": "application/json"
},
body: JSON.stringify({
name: "Acme Corporation"
})
});
const customer = await response.json();
import requests
response = requests.put(
"https://storq.io/api/v1/customers/1",
headers={"Authorization": "Bearer fsk_live_..."},
json={"name": "Acme Corporation"}
)
customer = response.json()
Errors
storq.io uses conventional HTTP response codes to indicate the success or failure of an API request.
| Code | Description |
|---|---|
200 |
OK - Request succeeded |
201 |
Created - Resource created successfully |
400 |
Bad Request - Invalid request parameters |
401 |
Unauthorized - Invalid or missing API key |
404 |
Not Found - Resource doesn't exist |
422 |
Unprocessable - Validation failed |
500 |
Server Error - Something went wrong |
Error Response Format
{
"error": "Product not found",
"status": 404
}