This walks through a full cycle. Replace sq_agt_supplier with your issued key.
Test the whole loop with no real order. If we’ve already issued your key and registered your service, skip Step 1. To exercise pull → accept → ship on demand, spawn a sandbox order assigned to you — no payment, no merchant order created:
It returns a fulfillment_order_id (a TEST-SKU-001 line at request_status: submitted). Run Steps 2–4 against that id. Call it again any time for a fresh test order — and when you’re done, DELETE /test_orders purges every sandbox order you created in one call (real orders untouched).
1

Register your fulfillment service

The response includes your location_id (orders routed to you are assigned to this location) and your webhook_secret. supplier_id is the routing key: order lines whose product carries this same value are auto-assigned to you (omit it to receive only manually-moved lines). Store the webhook_secret now — it is returned only on this registration call and is the single key you verify the X-Webhook-Signature HMAC with on both topic webhooks and the lightweight callback.webhook_topics is optional: pass it to subscribe to topic webhooks in the same call — we create the subscription for you (returned as webhook_subscription_id), pointed at your callback_url (override with webhook_url) and signed with the same webhook_secret. Omit it to receive only the lightweight callback and poll for work. See Inventory & webhooks.
2

Pull the orders waiting on you

Each item has the ship-to destination and line_items (with remaining_quantity).
3

Accept the request

The FO moves to in_progress. (To decline instead, see Fulfillment orders.)
4

Ship it with tracking

When all lines are shipped the FO becomes closed and we fire orders/fulfilled.
Omit fulfillment_order_line_items to ship all remaining lines, or send a smaller quantity for a partial shipment — the FO stays in_progress until everything ships.