- Lets every Fulfillment row created by your app carry a
service_idpointing back to you (audit + attribution). - Enables 3PL-style callbacks: the platform POSTs to your
callbackUrlwhen an order is paid so you can pull labels automatically. - Surfaces your app’s name on the order detail page next to the tracking number, instead of a generic carrier label.
Register at install time
The canonical place to register is your OAuth handoff (install-handoff). After exchanging the authorization code for an access token, list existing services and create one only if your app isn’t already registered (idempotent):Create Fulfillment Service
POST /api/v1/fulfillment_services.json
Body Parameters
Display name (e.g.
"Shiprocket", "ShipGlobal"). Used on the order
detail page next to tracking numbers.HTTPS URL the platform calls when fulfillment events occur on this
store. Must be a valid URL.
Whether your app can provide tracking numbers.
Whether your app authoritatively manages inventory levels for this
store (3PL-style).
Whether your app needs the merchant to pre-select a shipping method
before fulfilling.
Required scope
write_orders
List Fulfillment Services
GET /api/v1/fulfillment_services.json
name before
creating a new row.
Required scope
read_orders
After registration
Once registered, every Fulfillment row your app creates via Create Fulfillment should includeservice_id set to the value returned at registration. The
platform uses that pointer for the FULFILLMENTS_CREATE webhook
attribution and the order detail page UI.