Skip to main content

Headless Onboarding at a Glance

Headless onboarding takes a merchant from nothing to a live DSP connection in eight steps, all through the Partner API. Steps 1 to 6 are calls you make. Step 7 is waiting: for most DSPs, binding a location starts an activation that finishes later, outside your request.

Headless onboarding flow: authenticate, create org, connect the POS, import locations, connect the DSP, bind locations, track activation until APPROVED, then live.

Every call, in order​

#StepCallGuide
1AuthenticatePOST /oauth/token with scope onboardingAuthentication
2Create the merchant's orgPOST /onboarding/orgOrganization Creation
3Connect the POSPOST /onboarding/integrations with type: "pos", then PUT /onboarding/integrations/{id} with the OAuth or manual codePOS Integration Flow
4Import locations and menusGET /onboarding/locations, then POST /onboarding/locations/ingestLocation Management
5Connect the DSPPOST /onboarding/integrations with type: "dsp", then PUT /onboarding/integrations/{id}DSP Integration
6Bind POS locations to DSP storesPOST /onboarding/locations/bindBind DSP Locations
7Track activationGET /onboarding/org/{id}/locations?location_id= until dsps[].status is APPROVEDTracking Activation
8Optional: limit which menus a DSP getsPUT /onboarding/menus/assignmentsAssign Menus
9Optional: publish menus now instead of waiting for the next catalog updatePOST /onboarding/menus/publishPublish Menus

Use GET /onboarding/integrations/dsp-options to list the DSPs you can offer. Each option's source is the value to pass as source in step 5.

Two statuses, not one​

The flow has two separate statuses, and confusing them is the most common headless mistake:

StatusBelongs toValuesLive when
Integration statusThe merchant's POS or DSP account connection (the onboarding object from steps 3 and 5)pending, waiting_for_oauth, active, deprovisionedactive
DSP connection statusOne bound location on one DSP (from step 6 onwards)pending, APPROVED, needs_reconnection, waiting_for_deprovision, deprovisionedAPPROVED
caution

An active DSP integration does not mean its locations are live. The integration becomes active when the merchant connects their DSP account in step 5. Each location bound to it in step 6 has its own status, and on most DSPs that starts as pending. See DSP Connection Statuses.

What you can't do through the API yet​

The Partner API does not yet offer these operations. If you need one, contact Stream support:

  • Unbind, retry, or rebind a single location.
  • Read whether a publish reached the DSP. You can trigger a publish, but its response only confirms the publish was queued.
  • Receive a notification when a connection's status changes. Poll instead, as described in Tracking Activation.