API reference
Customers
List customers
/customersRequired scopes:read_customers
Query parameters
| Name | Type | Description |
|---|---|---|
limit | integer | Page size, 1–250 (default 50). default 50 · min 1 · max 250 |
cursor | string | next_cursor from the previous page. |
updated_since | string<date-time> | Only objects changed at or after this ISO-8601 time. |
created_since | string<date-time> | Only objects created at or after this ISO-8601 time. |
email | string | Exact email. |
accepts_marketing | boolean | Marketing consent. |
Example request
curl "https://api.sellorchard.com/v1/customers?limit=50" \
-H "Authorization: Bearer $SELLORCHARD_API_KEY"Response200Customers, newest first.
ShowHide response schema
dataarray of CustomerrequiredShowHide item attributes
objectstringrequiredidintegerrequiredId.
emailstring<email>requiredEmail (unique in the store).
first_namestring | nullrequiredFirst name.
last_namestring | nullrequiredLast name.
phonestring | nullrequiredPhone.
companystring | nullrequiredCompany.
accepts_marketingbooleanrequiredEmail marketing consent.
notestring | nullrequiredStaff note.
has_accountbooleanrequiredHas a storefront account.
is_blockedbooleanrequiredBlocked from ordering.
orders_countintegerrequiredOrders (not cancelled or test).
total_spentstringrequiredPaid, less refunds.
pattern ^-?\d+\.\d{2}$
currencystringrequiredStore currency.
addressesarray of CustomerAddressrequiredSaved addresses.
ShowHide item attributes
idintegerrequiredAddress id.
is_defaultbooleanrequiredDefault address.
first_namestring | nullFirst name.
last_namestring | nullLast name.
companystring | nullCompany.
line1string | nullLine1.
line2string | nullLine2.
citystring | nullCity.
regionstring | nullRegion.
postcodestring | nullPostcode.
countrystring | nullISO 3166-1 alpha-2 country code.
phonestring | nullPhone.
last_order_atstring<date-time> | nullrequiredLast order.
created_atstring<date-time>requiredCreated.
updated_atstring<date-time>requiredLast changed.
has_morebooleanrequiredMore pages after this one.
next_cursorstring | nullrequiredPass as
cursorfor the next page; null on the last page.
{
"data": [
{
"object": "customer",
"id": 880,
"email": "ann@example.com",
"first_name": "Ann",
"last_name": "Lee",
"phone": "+15125550199",
"company": null,
"accepts_marketing": true,
"note": null,
"has_account": true,
"is_blocked": false,
"orders_count": 3,
"total_spent": "154.11",
"currency": "USD",
"addresses": [
{
"id": 61,
"first_name": "Ann",
"last_name": "Lee",
"company": null,
"line1": "1 Main St",
"line2": "Apt 2",
"city": "Austin",
"region": "TX",
"postcode": "73301",
"country": "US",
"phone": "+15125550199",
"is_default": true
}
],
"last_order_at": "2026-11-02T15:00:00Z",
"created_at": "2026-11-02T15:00:00Z",
"updated_at": "2026-11-03T09:30:00Z"
}
],
"has_more": false,
"next_cursor": null
}Error responses
- 400
invalid_requestMalformed request (e.g. a bad cursor). - 401
authenticationMissing, invalid, expired or revoked API key. - 403
permissionThe key lacks the scope, or the store's plan doesn't include the API. - 422
invalid_requestInvalid parameters;errorslists each field. - 429
rate_limitedToo many requests. - 500
serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.
Create a customer
/customersFires customer.created.
Required scopes:write_customers
Headers
| Name | Type | Description |
|---|---|---|
Idempotency-Key | string | Any unique string (e.g. a UUID, up to 255 characters). A retry with the same key and body within 24 hours gets the first response again (Idempotent-Replayed: true); the same key with a different body is a 409 conflict. |
Request body
emailstring<email>Email (required on create; unique).
first_namestring | nullFirst name.
last_namestring | nullLast name.
phonestring | nullPhone.
companystring | nullCompany.
notestring | nullStaff note.
accepts_marketingbooleanEmail marketing consent.
addressesarray of objectReplaces the saved addresses when sent.
ShowHide item attributes
is_defaultbooleanDefault address (else the first).
first_namestring | nullFirst name.
last_namestring | nullLast name.
companystring | nullCompany.
line1stringrequiredLine1.
line2string | nullLine2.
citystringrequiredCity.
regionstring | nullRegion.
postcodestring | nullPostcode.
countrystringrequiredISO 3166-1 alpha-2 country code.
min length 2 · max length 2
phonestring | nullPhone.
Example request
curl -X POST "https://api.sellorchard.com/v1/customers" \
-H "Authorization: Bearer $SELLORCHARD_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"email": "ann@example.com",
"first_name": "Ann",
"last_name": "Lee",
"accepts_marketing": true,
"addresses": [
{
"first_name": "Ann",
"last_name": "Lee",
"company": null,
"line1": "1 Main St",
"line2": "Apt 2",
"city": "Austin",
"region": "TX",
"postcode": "73301",
"country": "US",
"phone": "+15125550199"
}
]
}'Response201A customer.
ShowHide response schema
dataCustomerrequiredShowHide child attributes
objectstringrequiredidintegerrequiredId.
emailstring<email>requiredEmail (unique in the store).
first_namestring | nullrequiredFirst name.
last_namestring | nullrequiredLast name.
phonestring | nullrequiredPhone.
companystring | nullrequiredCompany.
accepts_marketingbooleanrequiredEmail marketing consent.
notestring | nullrequiredStaff note.
has_accountbooleanrequiredHas a storefront account.
is_blockedbooleanrequiredBlocked from ordering.
orders_countintegerrequiredOrders (not cancelled or test).
total_spentstringrequiredPaid, less refunds.
pattern ^-?\d+\.\d{2}$
currencystringrequiredStore currency.
addressesarray of CustomerAddressrequiredSaved addresses.
ShowHide item attributes
idintegerrequiredAddress id.
is_defaultbooleanrequiredDefault address.
first_namestring | nullFirst name.
last_namestring | nullLast name.
companystring | nullCompany.
line1string | nullLine1.
line2string | nullLine2.
citystring | nullCity.
regionstring | nullRegion.
postcodestring | nullPostcode.
countrystring | nullISO 3166-1 alpha-2 country code.
phonestring | nullPhone.
last_order_atstring<date-time> | nullrequiredLast order.
created_atstring<date-time>requiredCreated.
updated_atstring<date-time>requiredLast changed.
{
"data": {
"object": "customer",
"id": 880,
"email": "ann@example.com",
"first_name": "Ann",
"last_name": "Lee",
"phone": "+15125550199",
"company": null,
"accepts_marketing": true,
"note": null,
"has_account": true,
"is_blocked": false,
"orders_count": 3,
"total_spent": "154.11",
"currency": "USD",
"addresses": [
{
"id": 61,
"first_name": "Ann",
"last_name": "Lee",
"company": null,
"line1": "1 Main St",
"line2": "Apt 2",
"city": "Austin",
"region": "TX",
"postcode": "73301",
"country": "US",
"phone": "+15125550199",
"is_default": true
}
],
"last_order_at": "2026-11-02T15:00:00Z",
"created_at": "2026-11-02T15:00:00Z",
"updated_at": "2026-11-03T09:30:00Z"
}
}Error responses
- 401
authenticationMissing, invalid, expired or revoked API key. - 403
permissionThe key lacks the scope, or the store's plan doesn't include the API. - 409
conflictThe Idempotency-Key was used with a different request, or that request is still running. - 422
invalid_requestInvalid parameters;errorslists each field. - 429
rate_limitedToo many requests. - 500
serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.
Get a customer
/customers/{id}Required scopes:read_customers
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | The object id. |
Example request
curl "https://api.sellorchard.com/v1/customers/120" \
-H "Authorization: Bearer $SELLORCHARD_API_KEY"Response200A customer.
ShowHide response schema
dataCustomerrequiredShowHide child attributes
objectstringrequiredidintegerrequiredId.
emailstring<email>requiredEmail (unique in the store).
first_namestring | nullrequiredFirst name.
last_namestring | nullrequiredLast name.
phonestring | nullrequiredPhone.
companystring | nullrequiredCompany.
accepts_marketingbooleanrequiredEmail marketing consent.
notestring | nullrequiredStaff note.
has_accountbooleanrequiredHas a storefront account.
is_blockedbooleanrequiredBlocked from ordering.
orders_countintegerrequiredOrders (not cancelled or test).
total_spentstringrequiredPaid, less refunds.
pattern ^-?\d+\.\d{2}$
currencystringrequiredStore currency.
addressesarray of CustomerAddressrequiredSaved addresses.
ShowHide item attributes
idintegerrequiredAddress id.
is_defaultbooleanrequiredDefault address.
first_namestring | nullFirst name.
last_namestring | nullLast name.
companystring | nullCompany.
line1string | nullLine1.
line2string | nullLine2.
citystring | nullCity.
regionstring | nullRegion.
postcodestring | nullPostcode.
countrystring | nullISO 3166-1 alpha-2 country code.
phonestring | nullPhone.
last_order_atstring<date-time> | nullrequiredLast order.
created_atstring<date-time>requiredCreated.
updated_atstring<date-time>requiredLast changed.
{
"data": {
"object": "customer",
"id": 880,
"email": "ann@example.com",
"first_name": "Ann",
"last_name": "Lee",
"phone": "+15125550199",
"company": null,
"accepts_marketing": true,
"note": null,
"has_account": true,
"is_blocked": false,
"orders_count": 3,
"total_spent": "154.11",
"currency": "USD",
"addresses": [
{
"id": 61,
"first_name": "Ann",
"last_name": "Lee",
"company": null,
"line1": "1 Main St",
"line2": "Apt 2",
"city": "Austin",
"region": "TX",
"postcode": "73301",
"country": "US",
"phone": "+15125550199",
"is_default": true
}
],
"last_order_at": "2026-11-02T15:00:00Z",
"created_at": "2026-11-02T15:00:00Z",
"updated_at": "2026-11-03T09:30:00Z"
}
}Error responses
- 401
authenticationMissing, invalid, expired or revoked API key. - 403
permissionThe key lacks the scope, or the store's plan doesn't include the API. - 404
not_foundNo such object in this store. - 429
rate_limitedToo many requests. - 500
serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.
Update a customer
/customers/{id}Only the fields sent change; addresses replaces the saved addresses. Fires customer.updated.
Required scopes:write_customers
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | The object id. |
Request body
emailstring<email>Email (required on create; unique).
first_namestring | nullFirst name.
last_namestring | nullLast name.
phonestring | nullPhone.
companystring | nullCompany.
notestring | nullStaff note.
accepts_marketingbooleanEmail marketing consent.
addressesarray of objectReplaces the saved addresses when sent.
ShowHide item attributes
is_defaultbooleanDefault address (else the first).
first_namestring | nullFirst name.
last_namestring | nullLast name.
companystring | nullCompany.
line1stringrequiredLine1.
line2string | nullLine2.
citystringrequiredCity.
regionstring | nullRegion.
postcodestring | nullPostcode.
countrystringrequiredISO 3166-1 alpha-2 country code.
min length 2 · max length 2
phonestring | nullPhone.
Example request
curl -X PATCH "https://api.sellorchard.com/v1/customers/120" \
-H "Authorization: Bearer $SELLORCHARD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "ann@example.com",
"first_name": "Ann",
"last_name": "Lee",
"accepts_marketing": true,
"addresses": [
{
"first_name": "Ann",
"last_name": "Lee",
"company": null,
"line1": "1 Main St",
"line2": "Apt 2",
"city": "Austin",
"region": "TX",
"postcode": "73301",
"country": "US",
"phone": "+15125550199"
}
]
}'Response200A customer.
ShowHide response schema
dataCustomerrequiredShowHide child attributes
objectstringrequiredidintegerrequiredId.
emailstring<email>requiredEmail (unique in the store).
first_namestring | nullrequiredFirst name.
last_namestring | nullrequiredLast name.
phonestring | nullrequiredPhone.
companystring | nullrequiredCompany.
accepts_marketingbooleanrequiredEmail marketing consent.
notestring | nullrequiredStaff note.
has_accountbooleanrequiredHas a storefront account.
is_blockedbooleanrequiredBlocked from ordering.
orders_countintegerrequiredOrders (not cancelled or test).
total_spentstringrequiredPaid, less refunds.
pattern ^-?\d+\.\d{2}$
currencystringrequiredStore currency.
addressesarray of CustomerAddressrequiredSaved addresses.
ShowHide item attributes
idintegerrequiredAddress id.
is_defaultbooleanrequiredDefault address.
first_namestring | nullFirst name.
last_namestring | nullLast name.
companystring | nullCompany.
line1string | nullLine1.
line2string | nullLine2.
citystring | nullCity.
regionstring | nullRegion.
postcodestring | nullPostcode.
countrystring | nullISO 3166-1 alpha-2 country code.
phonestring | nullPhone.
last_order_atstring<date-time> | nullrequiredLast order.
created_atstring<date-time>requiredCreated.
updated_atstring<date-time>requiredLast changed.
{
"data": {
"object": "customer",
"id": 880,
"email": "ann@example.com",
"first_name": "Ann",
"last_name": "Lee",
"phone": "+15125550199",
"company": null,
"accepts_marketing": true,
"note": null,
"has_account": true,
"is_blocked": false,
"orders_count": 3,
"total_spent": "154.11",
"currency": "USD",
"addresses": [
{
"id": 61,
"first_name": "Ann",
"last_name": "Lee",
"company": null,
"line1": "1 Main St",
"line2": "Apt 2",
"city": "Austin",
"region": "TX",
"postcode": "73301",
"country": "US",
"phone": "+15125550199",
"is_default": true
}
],
"last_order_at": "2026-11-02T15:00:00Z",
"created_at": "2026-11-02T15:00:00Z",
"updated_at": "2026-11-03T09:30:00Z"
}
}Error responses
- 401
authenticationMissing, invalid, expired or revoked API key. - 403
permissionThe key lacks the scope, or the store's plan doesn't include the API. - 404
not_foundNo such object in this store. - 422
invalid_requestInvalid parameters;errorslists each field. - 429
rate_limitedToo many requests. - 500
serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.
List a customer's orders
/customers/{id}/ordersRequired scopes:read_customersread_orders
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | The object id. |
Query parameters
| Name | Type | Description |
|---|---|---|
limit | integer | Page size, 1–250 (default 50). default 50 · min 1 · max 250 |
cursor | string | next_cursor from the previous page. |
updated_since | string<date-time> | Only objects changed at or after this ISO-8601 time. |
created_since | string<date-time> | Only objects created at or after this ISO-8601 time. |
Example request
curl "https://api.sellorchard.com/v1/customers/120/orders?limit=50" \
-H "Authorization: Bearer $SELLORCHARD_API_KEY"Response200Orders, newest first.
ShowHide response schema
dataarray of OrderrequiredShowHide item attributes
objectstringrequiredidintegerrequiredOrder id.
numberintegerrequiredOrder number.
namestringrequiredNumber with the store prefix.
statusstringrequiredOrder status.
One of:
pendingprocessingon_holdshippedready_for_pickupdeliveredcancelledrefundedpayment_statusstringrequiredPayment status.
One of:
unpaidauthorizedpaidpartially_refundedrefundedfailedfulfillment_statusstringrequiredunfulfilled, partial (some lines shipped) or fulfilled.
One of:
unfulfilledpartialfulfilledsourcestringrequiredWhere it was placed.
One of:
storefrontpossubscriptionapitestbooleanrequiredA test order (free-trial store).
emailstring<email> | nullrequiredCustomer email.
phonestring | nullrequiredPhone.
customer_idinteger | nullrequiredCustomer.
customer_namestring | nullrequiredName.
currencystringrequiredISO 4217 currency of every amount on the order.
subtotalstringrequiredLines before discounts.
pattern ^-?\d+\.\d{2}$
discount_totalstringrequiredDiscounts.
pattern ^-?\d+\.\d{2}$
shipping_totalstringrequiredShipping.
pattern ^-?\d+\.\d{2}$
tax_totalstringrequiredTaxes.
pattern ^-?\d+\.\d{2}$
totalstringrequiredTotal charged.
pattern ^-?\d+\.\d{2}$
refunded_totalstringrequiredRefunded so far.
pattern ^-?\d+\.\d{2}$
discount_codestring | nullrequiredDiscount code used.
payment_methodstringrequiredPayment method code.
payment_method_labelstringrequiredPayment method as shown.
line_itemsarray of LineItemrequiredLines.
ShowHide item attributes
idintegerrequiredLine item id.
product_idinteger | nullrequiredProduct (null if deleted).
variant_idinteger | nullrequiredVariant (null if deleted).
namestringrequiredProduct name when ordered.
variant_titlestring | nullrequiredVariant title.
skustring | nullrequiredSKU.
kindstringrequiredLine kind.
One of:
physicaldigitalgift_cardbookingquantityintegerrequiredQuantity.
unit_pricestringrequiredUnit price.
pattern ^-?\d+\.\d{2}$
discountstringrequiredDiscount on the line.
pattern ^-?\d+\.\d{2}$
taxstringrequiredTax on the line.
pattern ^-?\d+\.\d{2}$
line_totalstringrequiredunit_price × quantity (before discount).
pattern ^-?\d+\.\d{2}$
fulfilled_atstring<date-time> | nullrequiredWhen the line shipped.
fulfillmentstringrequiredDelivery method.
One of:
shippickupdigitalposshipping_lineobject | nullrequiredShowHide child attributes
titlestringrequiredShipping method.
pricestringrequiredIts price.
pattern ^-?\d+\.\d{2}$
shipping_addressAddress | any | nullrequiredShowHide child attributes
One of the following:
Address
first_namestring | nullFirst name.
last_namestring | nullLast name.
companystring | nullCompany.
line1string | nullLine1.
line2string | nullLine2.
citystring | nullCity.
regionstring | nullRegion.
postcodestring | nullPostcode.
countrystring | nullISO 3166-1 alpha-2 country code.
phonestring | nullPhone.
any | null
billing_addressAddress | any | nullrequiredShowHide child attributes
One of the following:
Address
first_namestring | nullFirst name.
last_namestring | nullLast name.
companystring | nullCompany.
line1string | nullLine1.
line2string | nullLine2.
citystring | nullCity.
regionstring | nullRegion.
postcodestring | nullPostcode.
countrystring | nullISO 3166-1 alpha-2 country code.
phonestring | nullPhone.
any | null
trackingobject | nullrequiredShowHide child attributes
companystring | nullCarrier.
numberstring | nullTracking number.
urlstring | nullTracking URL.
tagsarray of stringrequiredYour tags (PATCH /orders/{id}).
notestring | nullrequiredStaff note (PATCH /orders/{id}); not shown to the customer.
customer_notestring | nullrequiredNote from the customer.
location_idinteger | nullrequiredFulfilling location.
placed_atstring<date-time> | nullrequiredPlaced.
paid_atstring<date-time> | nullrequiredPaid.
fulfilled_atstring<date-time> | nullrequiredShipped.
delivered_atstring<date-time> | nullrequiredDelivered.
cancelled_atstring<date-time> | nullrequiredCancelled.
created_atstring<date-time>requiredCreated.
updated_atstring<date-time>requiredLast changed.
has_morebooleanrequiredMore pages after this one.
next_cursorstring | nullrequiredPass as
cursorfor the next page; null on the last page.
{
"data": [
{
"object": "order",
"id": 5521,
"number": 1042,
"name": "#1042",
"status": "processing",
"payment_status": "paid",
"fulfillment_status": "unfulfilled",
"source": "storefront",
"test": false,
"email": "ann@example.com",
"phone": "+15125550199",
"customer_id": 880,
"customer_name": "Ann Lee",
"currency": "USD",
"subtotal": "48.00",
"discount_total": "4.80",
"shipping_total": "5.00",
"tax_total": "3.17",
"total": "51.37",
"refunded_total": "0.00",
"discount_code": "WELCOME10",
"payment_method": "stripe",
"payment_method_label": "Card",
"line_items": [
{
"id": 9001,
"product_id": 120,
"variant_id": 311,
"name": "Organic cotton tee",
"variant_title": "Blue / Large",
"sku": "TEE-BL-L",
"kind": "physical",
"quantity": 2,
"unit_price": "24.00",
"discount": "4.80",
"tax": "3.17",
"line_total": "48.00",
"fulfilled_at": null
}
],
"fulfillment": "ship",
"shipping_line": {
"title": "Standard",
"price": "5.00"
},
"shipping_address": {
"first_name": "Ann",
"last_name": "Lee",
"company": null,
"line1": "1 Main St",
"line2": "Apt 2",
"city": "Austin",
"region": "TX",
"postcode": "73301",
"country": "US",
"phone": "+15125550199"
},
"billing_address": {
"first_name": "Ann",
"last_name": "Lee",
"company": null,
"line1": "1 Main St",
"line2": "Apt 2",
"city": "Austin",
"region": "TX",
"postcode": "73301",
"country": "US",
"phone": "+15125550199"
},
"tracking": null,
"tags": [
"wholesale"
],
"note": "Gift wrap",
"customer_note": "Please leave at the door.",
"location_id": 1,
"placed_at": "2026-11-02T15:00:00Z",
"paid_at": "2026-11-02T15:00:00Z",
"fulfilled_at": null,
"delivered_at": null,
"cancelled_at": null,
"created_at": "2026-11-02T15:00:00Z",
"updated_at": "2026-11-03T09:30:00Z"
}
],
"has_more": false,
"next_cursor": null
}Error responses
- 400
invalid_requestMalformed request (e.g. a bad cursor). - 401
authenticationMissing, invalid, expired or revoked API key. - 403
permissionThe key lacks the scope, or the store's plan doesn't include the API. - 404
not_foundNo such object in this store. - 422
invalid_requestInvalid parameters;errorslists each field. - 429
rate_limitedToo many requests. - 500
serverSomething went wrong on our side; safe to retry with the same Idempotency-Key.