Skip to content

NewPreview any theme on your own products before you install it. Browse themes

SellOrchard
Developers

API keys and webhooks

Pro and Advanced plans (and the free trial in test mode: keys start with so_test_, 30 requests a minute instead of 120). Needs the Developers or Settings staff area (owners and admins always). Full…

Updated

Pro and Advanced plans (and the free trial in test mode: keys start with so_test_, 30 requests a minute instead of 120). Needs the Developers or Settings staff area (owners and admins always). Full reference: sellorchard.com/docs/api (also GET https://api.sellorchard.com/v1/openapi.json).

  1. Settings → Developers → API keys → Create key: name it, tick the scopes it needs (read / write per resource: products, inventory, orders, customers, discounts, gift cards, bookings; read reports and store; write includes read) and optionally an expiry date. The secret (so_live_…) is shown once — copy it into your integration. Send it as Authorization: Bearer so_live_… to https://api.sellorchard.com/v1/. The list shows each key's prefix…last 4 characters, scopes, last used and who created it. Roll makes a new secret (the old one stops working at once); Revoke switches the key off for good. Edit a key's name or scopes any time.
  2. What the API covers: store details, products (with variants, options, images imported from URLs), categories and brands, locations and stock per location (adjust / set), orders (list, create — priced by the catalogue or given prices, paid or pending, optional receipt email — fulfil with tracking, cancel, refund, notes, tags), customers, discount codes, gift cards (issue — the code is shown once — and disable), bookings (list, cancel), purchase orders and the sales report. Lists use cursor pagination (limit up to 250, cursor from next_cursor) and updated_since / created_since. Changes made through the API appear in Settings → Activity as "… via API key {name}" and send the same emails as changes in the admin.
  3. Limits and errors: 120 requests a minute per key (headers X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset; over the limit you get 429 with Retry-After). Errors look like {"error": {"type": "invalid_request", "message": "…", "param": "…"}}. Send an Idempotency-Key header on POST requests so retries never create things twice (kept 24 hours).
  4. Webhooks → Add endpoint: an https:// URL (private / local addresses aren't allowed), a description, the topics (order created / updated / paid / fulfilled / cancelled / refunded, product created / updated / deleted, inventory updated, customer created / updated, booking created / updated / cancelled, refund created, return created / updated, discount created, gift card issued) and active on/off. The signing secret (whsec_…) is shown once; Roll secret makes a new one. Each request is a JSON POST with X-SellOrchard-Topic, X-SellOrchard-Webhook-Id (the event id, use it to ignore duplicates) and X-SellOrchard-Signature: t=…,v1=… — the HMAC-SHA256 of "{t}.{raw body}" with the whole secret as the key. Answer with any 2xx within 10 seconds.
  5. Failed deliveries are retried after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours, 12 hours and 24 hours (8 tries). An endpoint that keeps failing for 3 days is switched off and the store owner gets an email; fix the URL and switch it back on. Each endpoint shows healthy / failing / disabled and its Deliveries (status, topic, response code, attempts, duration; open one to see the request and response, Resend it). Send test sends a sample event for a topic and shows the answer. Deliveries are kept 30 days; the API logs tab (filter by key and status) keeps 14 days.

Was this article helpful?

Still need help?

Chat with our support team from your store admin — log in and we’ll open the chat for you.

Contact support