- 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
Body Parameters
string
required
Display name (e.g.
"Shiprocket", "ShipGlobal"). Used on the order
detail page next to tracking numbers.string
required
HTTPS URL the platform calls when fulfillment events occur on this
store. Must be a valid URL.
boolean
default:"true"
Whether your app can provide tracking numbers.
boolean
default:"false"
Whether your app authoritatively manages inventory levels for this
store (3PL-style).
boolean
default:"false"
Whether your app needs the merchant to pre-select a shipping method
before fulfilling.
Required scope
write_orders
List Fulfillment Services
Returns every fulfillment service registered for the calling store. Use this to make registration idempotent — match onname 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.