shx_ API key. The API resellers themselves use to buy wholesale stock is a
different surface — see the Reseller API.
Tier authoring, product enrollment, and per-product price overrides are dashboard-only. They are
configuration for the price cascade, not automation, and a second write path for them would be
a second source of truth.
GET /dev/v1/reseller-tiers is read-only for exactly that reason.Scopes
A key with only
resellers.read gets 403 FORBIDDEN on any of the write routes. Reseller
scopes are not implied by customers.*, even though the dashboard puts Resellers under
Customers.
Endpoints
GET /dev/v1/resellers
Page-based list, newest first.GET /dev/v1/resellers/
Returns{ "data": { "reseller": { … } } } with the same object. 404 RESELLER_NOT_FOUND when
the ID belongs to another shop or does not exist.
POST /dev/v1/resellers/invite
Sends the wholesale invitation email and creates the relationship inINVITED state.
tier_id is optional — omit it to use the program’s default tier. If neither is set the call
fails with 422 and the message asks you to pick a tier. Requires an enabled program.
Inviting an email that is already INVITED, APPLIED, ACTIVE, or SUSPENDED returns
409 CONFLICT. A previously REJECTED email can be re-invited.
POST /dev/v1/resellers//suspend
Blocks wholesale pricing and revokes Reseller API access for that account. Only anACTIVE
reseller can be suspended; anything else returns 422. The row is never deleted, so the status
history stays intact.
POST /dev/v1/resellers//reinstate
Returns aSUSPENDED reseller to ACTIVE. Only a SUSPENDED reseller can be reinstated.
Reinstating emits no webhook. There is no
reseller:reinstated event — only
reseller:suspended on the way out.GET /dev/v1/reseller-program
MANUAL mode rather than a 404.
PATCH /dev/v1/reseller-program
Partial update. Every field is optional.enrollment_mode: "OPEN" without a default_tier_id returns 422 — open enrollment turns
customers into resellers without review, so the tier they land in has to be decided up front.
An unknown default_tier_id returns 404 RESELLER_TIER_NOT_FOUND.
GET /dev/v1/reseller-tiers
Read-only, ordered bysort_order.
auto_advance_revenue and auto_advance_orders are the thresholds that promote a reseller into
this tier automatically after an order completes. Either being null means it is not part of the
condition. auto_advance_requires_both: false means hitting either threshold is enough.
Idempotency
All three write routes accept the standardIdempotency-Key header described in
Errors. It is optional here, unlike on the reseller-facing order
endpoint where it is mandatory.
Next Steps
Merchant guide
Set the program up in the dashboard.
Reseller API
What your resellers can automate.