← Sellriot

Build with Sellriot.

API v1 · Products, inventory, shops, shipping and shows.

https://api.sellriot.com/v1

Quick start

Create an API key below, then send it in the Authorization header. Every endpoint requires a key and accesses only that key owner’s store. Keys grant full management access to your store. Keep them on your server.

curl https://api.sellriot.com/v1/store \
  -H "Authorization: Bearer $SELLRIOT_API_KEY"

Send JSON with Content-Type: application/json for writes, except product creation, which uses multipart uploads. Prices use USD integer cents unless a field is explicitly called price. Dates from database records are UTC.

Your API keys

New keys are displayed once. Only a SHA-256 hash is stored. Revocation takes effect on the next request.

Sign in to create and revoke your seller API keys.

GET /keys lists key metadata. DELETE /keys/{id} revokes one of your keys. Create new keys here using your signed-in session.

Products & inventory

Products have an 8-character hexadecimal public_id, generated using CRC32 with collision checks and a unique database constraint. Use it in product API paths and public item URLs. Legacy numeric IDs remain supported for existing integrations. Internal inventory and order references retain their relational IDs.

MethodEndpointBehavior
GET/productsPaginated products, including images and variations.
POST/productsCreate a product with 1–15 photos, each JPG, PNG or WebP, at most 8 MB and 30 megapixels.
GET/products/{id}Read one of your products.
PATCH/products/{id}Update title, description, price_cents, category, condition_label, quantity, status or taxability_code.
DELETE/products/{id}Archive a product, preserving order history.
PUT/products/{id}/shippingApply a shipping_profile reference.
GET/products/{id}/variationsRead variations.
PATCH/products/{id}/variationsSend variation id and any of quantity, price_cents, status. Parent inventory and price are recalculated.
GET/categoriesCategory catalog. Use an exact category name for products and shows.

Create a product

Required: title (3–160 characters), price (decimal dollars $1–$10,000), category, shipping_profile and photos[]. Optional: description (up to 3,000 characters), quantity (1–99,999; default 1), taxability_code (general or 4–8 digits).

curl https://api.sellriot.com/v1/products \
  -H "Authorization: Bearer $SELLRIOT_API_KEY" \
  -F 'title=Vintage ceramic vase' \
  -F 'price=28.00' \
  -F 'category=REPLACE_WITH_CATEGORY_NAME' \
  -F 'quantity=3' \
  -F 'shipping_profile=REPLACE_WITH_PROFILE_ID' \
  -F 'photos[][email protected]'

For products with variations, send variations_enabled=1 and variations as a JSON string containing 1–3 objects with name, price (decimal dollars), quantity and shipping_profile. Each variation requires its own shipping profile. The parent price is the lowest variation price. Upload photos in the same request.

Update a product

curl -X PATCH https://api.sellriot.com/v1/products/123 \
  -H "Authorization: Bearer $SELLRIOT_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"price_cents":3200,"quantity":5}'

Product statuses: available, sold, archived. Available inventory must be positive. Use the variation endpoint for prices and quantities on products with variations. Set a zero quantity with status sold. Product deletion archives rather than deleting images or purchase records. Inventory writes lock the product to serialize with checkout. Image replacement and variation creation after the initial upload are not supported in v1.

Store settings

GET /store returns your id, name, handle, bio and location. PATCH /store accepts name (2–80 characters), bio (up to 1,200) and location (up to 100). Optional theme_cover, theme_accent and theme_background accept six-digit hex colors, such as #22283f. These colors style your public shop page. Shop policies use policy_shipping, policy_cancellations, policy_returns, policy_refunds and policy_exchanges (plain text, up to 1,000 characters each). Public pages show saved policies. The handle is read-only.

curl -X PATCH https://api.sellriot.com/v1/store \
  -H "Authorization: Bearer $SELLRIOT_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"My vintage shop","bio":"Collected with care.","location":"Brooklyn, NY"}'

Shipping

MethodEndpointFields / behavior
GET/shipping-profilesSuggested and custom profiles with references for product creation.
POST/shipping-profilesname (2–80), weight (decimal string, up to 3 decimal places), unit (oz or lb); maximum 150 lb.
PATCH/shipping-profiles/{id}Update a custom profile; send name, weight and unit. Use numeric id from custom:123.
DELETE/shipping-profiles/{id}Archive a custom profile.
GET/store/shipping-originRead private ship-from address and default parcel.
PUT/store/shipping-originSave ship-from address and parcel using the fields below.

Profile changes do not retroactively modify the shipping snapshot on products. Apply an updated profile with PUT /products/{id}/shipping, body {"shipping_profile":"custom:123"}.

{"name":"My shop","line1":"123 Main St","line2":"","city":"Brooklyn",
 "state":"NY","postal_code":"11201","country":"US",
 "length":10,"width":8,"height":4}

Address country must be US or CA. Package dimensions are inches, greater than 0 and at most 150.

Shows

GET /shows lists your shows with pagination. GET /shows/{id} reads one. PATCH /shows/{id} updates title, category or starts_at (future UTC YYYY-MM-DDTHH:MM). POST /shows creates a show using title (3–160), category, start_mode (now or scheduled), starts_at (future UTC timestamp such as 2027-01-10T18:00 for scheduled), and optional listing_ids (up to 200 of your product IDs). Optional request_id (UUID) makes show creation idempotent.

GET /shows/{id}/inventory returns products and the pinned item. PUT /shows/{id}/inventory replaces the inventory with {"listing_ids":[123,124]}. PUT /shows/{id}/pin accepts {"listing_id":123}; use 0 to unpin. Broadcast lifecycle and show deletion are not exposed by v1.

Orders

GET /orders lists checkout orders for products owned by your store, with pagination. GET /orders/{id} reads one seller-owned order. Includes quantities, prices, shipping, tax, status and timestamps. These are the application’s existing test checkout orders. Each order includes an 8-character order_id usable in order API paths and receipt URLs. The endpoint is read-only; payment, refunds and fulfillment writes are not provided.

Responses & limits

{"data":{"id":123,"name":"My shop"},"request_id":"..."}

{"data":{"items":[],"next_cursor":null},"request_id":"..."}

{"error":{"code":422,"message":"Invalid category or status.","fields":{}},"request_id":"..."}

Lists support ?limit=50&before=123. limit is 1–100, default 50. Pass next_cursor as before to fetch the next page. A null cursor means the end. GET /products, /shows and /orders use this format; catalogs and key lists return their own arrays.

120 requests per minute per key. A 429 response includes Retry-After seconds. JSON bodies are limited to 1 MB. API responses are not cached. No browser cross-origin access is enabled: use a server integration.

StatusMeaning
200 / 201Success / created.
400Malformed JSON or body.
401Missing, invalid or revoked Bearer key.
404Unknown endpoint, unsupported method, or resource outside your store.
409Conflicting operation.
413 / 415Body too large / unsupported content type.
422Validation error; field errors may be included.
429Rate limit exceeded.
500Internal error. Reference X-Request-Id when reporting.

Product POSTs are not idempotent: check whether a product was created before retrying an interrupted request. PATCH inventory sets an absolute value. Keys do not expire automatically; revoke unused keys.