DSP Connection Statuses
Each location you bind to a DSP gets its own DSP connection, with its own status. That status is separate from the integration status of the merchant's DSP account. An active integration can have connections that are not live yet.
You can read a connection's status in two places:
locations[].statusin the bind response.dsps[].statusin View Organization Locations.
Status reference
| Status | Meaning | Orders flow? | What to do |
|---|---|---|---|
pending | Bound, waiting for the DSP or Stream's team to activate it. | No | Track activation. On manually activated DSPs, contact Stream support. |
APPROVED | Active. Menu updates publish to the DSP. | Yes | Nothing. |
needs_reconnection | The DSP abandoned or restarted onboarding for this store. | No | Contact Stream support. |
waiting_for_deprovision | Disconnecting. | No | Wait for deprovisioned. |
deprovisioned | Disconnected. | No | Nothing. |
A successful bind response does not mean the location is live. Bind returns success for every location it connects, including ones that are only pending. Always read status for each location in the response rather than relying on the HTTP status code.
In the bind response
POST /onboarding/locations/bind
// Response
{
"locations": [
{
"_id": "DSP_CONNECTION_ID",
"dsp_provider_id": "DSP_LOCATION_ID",
"dsp_store_name": "Store Name in DSP",
"status": "pending" // "APPROVED" on immediate DSPs
}
]
}
Keep the _id. It is the DSP connection ID that appears as dsps[]._id when you read the organization, and the ID Stream support asks for.
In View Organization Locations
GET /onboarding/org/{ORG_ID}/locations?location_id=LOCATION_ID
// Response
{
"locations": [
{
"_id": "LOCATION_ID",
"name": "Location Name",
"status": "active",
"dsps": [
{
"_id": "DSP_CONNECTION_ID",
"name": "DSP Name",
"source": "dsp_name",
"status": "pending",
"change_time": 1729555200000 // when the status last changed, in epoch milliseconds
}
]
}
]
}
change_time tells you how long a connection has been in its current status, which is what to look at when deciding whether a pending connection is stuck.