Merchant Onboarding Requirements for API-Integrated Retail Stores
Merchant Onboarding Flow
The image below presents the merchant onboarding flow.

Overview
Building a merchant onboarding process that meets these requirements will deliver a fast and smooth onboarding experience for your merchants.
Onboarding Service Level Agreement: Partner will onboard the Merchant to data delivery within 2 business days of gaining access to the Merchant’s data. For Merchants new to Partner’s platform, it is understood that it will take time to gain access to the Merchants’ data. Onboarding SLAs for net new Merchants will be provided by Partner to DoorDash during Onboarding Process Build.
Flow
Initiation
-
Merchant starts from external Partner environment.
-
Merchant initiates the process (e.g. “Add the DoorDash integration”).
-
Merchant is asked "Are you new to DoorDash Marketplace?"
- If "yes", proceed to New Merchant Signup
- If "no", proceed to Onboarding
New Merchant Signup
-
Partner presents merchant with a DoorDash-provided sales sign-up form.
- Important Note: This form should be business-scoped - if a merchant has more than 1 location, they should only need to fill the form out once.
- Surface a list of the merchant’s locations and instruct them to indicate the locations to include (be sure to default to “All Locations”)
- Important Note: This form should be business-scoped - if a merchant has more than 1 location, they should only need to fill the form out once.
-
DoorDash sales staff will contact the merchant and present a contract.
-
After the merchant completes the sign-up form, partner informs them to return to this DoorDash integration sign-up form within the partner's portal after they've signed their contract with DoorDash.
Onboarding
-
Partner surfaces a form to the Merchant to collect information to send through to the DoorDash Store Onboarding Webhook. This form should be pre-populated with all information the Provider knows about the Merchant (e.g. store address). The form should give the Merchant the ability to override any value that will be subsequently sent to the Store Onboarding Webhook.
- Important: Include the "DoorDash Store ID" field. It should be an optional field, but will be used as a last resort tool to rescue an onboarding blocked because the Store Onboarding Webhook doesn't match to an existing DoorDash store. The Merchant can guarantee a successful match by entering their DoorDash Store ID, which will then be sent through the Store Onboarding Webhook.
-
Partner enables Catalog Pull, Inventory Pull, and Store Hours Pull for the store(s) so that DoorDash can launch the store(s)
-
Partner sends Store Onboarding Webhook
- If 200 response, store onboarding has been successfully initiated. Proceed to step 3
- If not a 200 response, review the errors in the response, fix them, and then resend. If errors are unresolvable, reach out to support in the Developer Portal OR direct merchants to contact DoorDash support
- The most common cause of failure will be a merchant not having yet signed a contract with DoorDash. In that case, proceed to New Merchant Signup
- Otherwise, typically there is a slight mismatch in the addresses on both sides. In that case, direct merchants to contact DoorDash support
-
Partner listens for store onboarding status webhooks
- Once status reaches
INTEGRATION_ACTIVATED, the store has been successfully onboarded to the integration. Enroll the store in regular inventory, catalog, and store hours updates, and in the orders integration (if applicable) - If the status is
ABANDONED,MENU_BLOCK, orACTIVATION_BLOCK, surface those details to the merchant in the partner portal. See "Possible Onboarding Status Values" and "Possible Exclusion Code Values" in the section below for merchant-friendly descriptions of each status and blocker.- While some of these blocked statuses can be resolved by the partner, typically, the most appropriate action is to direct merchants to contact DoorDash support
- Once status reaches
-
Meanwhile, DoorDash will do the following to onboard the store:
- Configure the business and store(s).
- Pull the merchant's catalog using Catalog Pull
- Build the merchant's catalog
- Finish configuring the store(s)
- Onboard the store(s) to the partner's integration
- Ingest inventory and pricing via Inventory Pull to generate menu(s)
- Update store hours using Store Hours Pull
- Review menu quality
- If QA passes (i.e. hours are present, menu is not empty, etc.), DoorDash enables the integration.
- If QA does not pass, DoorDash will email the merchant and partner with exclusion details (e.g. non-compliant alcoholic items, missing hours, etc.).
-
DoorDash will work with the merchant to activate the store
Contact DoorDash Support
Partner instructs merchants: "Please reach out to DoorDash Support at https://help.doordash.com/merchants/s/merchant-support?language=en_US."
API List
Store Onboarding Webhook
- Note: This endpoint does not support sending multiple stores in a single call. Partners must send one webhook per location; if this is not possible then Partners must use the Developer Portal CSV upload route for bulk onboarding requests. Please note that the CSV upload functionality is only available upon a granted exception. Please work with your Technical Account Manager for details.
POST: https://openapi.doordash.com/webhooks/stores/onboarding
{
"partner_store_id": “abc123_456def”,
"partner_business_id": “ghi789_101jkl”,
"doordash_store_id": 123456, [optional]
"doordash_business_id: 78910, [optional]
"partner_store_name" : "Empanada Empire",
"partner_location_name" : "Candler", [optional]
"provider_type": "api_provider",
"address_line_1": "101 DoorDash St.",
"address_line_2": "Suite #5", [optional]
"address_city": "Atlanta",
"address_state": "GA",
"address_zip": "30312",
"requestor_first_name": "James",
"requestor_last_name": "Walnut",
"requestor_email": "james.walnut@api_provider.com",
"requestor_phone": "+14124818894", [optional]
"expected_go_live_date": "2022-07-22", [optional]
"merchant_decision_maker_email": "[email protected]"
}
Request Fields Details
| Name | Type | Required? | Details |
|---|---|---|---|
| partner_store_id | string | true | Unique identifier of the store in the provider’s system - will be location_id in API calls |
| partner_business_id | string | true | Unique identifier of the parent business of the store in the provider’s system |
| doordash_store_id | integer | false | Unique identifier of the store in DoorDash’s system |
| doordash_business_id | integer | false | Unique identifier of the parent business of the store in DoorDash’s system |
| partner_store_name | string | true | Customer-facing name of the store (e.g., “Burger Shack”) |
| partner_location_name | string | false | Location-specific context for the store (e.g., “Burger Shack - Las Vegas”) |
| provider_type | string | true | Used to indicate the partner with which the store is associated (see Provider Type explanation) |
| address_line_1 | string | true | - |
| address_line_2 | string | false | - |
| address_city | string | true | - |
| address_state | string | true | - |
| address_zip | string | true | - |
| requestor_first_name | string | true | First name of the user on the provider’s side initiating the request |
| requestor_last_name | string | true | Last name of user on the provider’s side initiating the request |
| requestor_email | string | true | Email contact for user on the provider’s side initiating the request as well as for receiving status updates on the onboarding request |
| requestor_phone | string | false | Phone number for user on the provider’s side initiating the request |
| expected_go_live_date | String | false | Partners to indicate an expected date to go live. If this value is not provided, the store will be onboarded as the DoorDash Activations specialist processes the request. If provided, the DoorDash activations team will attempt to honor the date, however, timelines can be delayed owing to issues on the Partner / Merchant’s end. |
| merchant_decision_maker_email | string | true | Email address of the merchant being onboarded. This email address will receive the merchant consent email for them to authenticate the onboarding request. This user must be a Business Admin user in DoorDash Merchant Portal to authenticate the request. |
Response
Response Code 200
{
"message": "OK"
}
Response Code 400: Validation error or malformed request, caused because of missing information
{
"message": "INVALID_ARGUMENT: X is required"
}
Store Onboarding Status
After successfully submitting the store onboarding request, an onboarding entry will be persisted in the DoorDash store onboarding platform. Onboarding status should be shown to the Merchant in the partner environment as part of the onboarding experience. There are two ways to check the current progress of the onboarding status, but you are required to subscribe to the webhook events; using the GET endpoint is an optional enhancement:
- [REQUIRED] Subscribe to Webhook Events
Partners must have an endpoint configured to listen to DoorDash store onboarding status webhooks. To enable this, the partner will register a subscription endpoint for the Event Type "Onboarding status" for DoorDash to send webhooks to via DoorDash Developer Portal. Once a status changes on the onboarding store, a webhook event will be sent to the provided subscription endpoint. If a webhook fails, it will be retried 3 times. The payload format for this webhook will be the following:
{
"onboarding_id": "9154103a-be82-48fc-978d-792171f7ee32",
"location_id": "xdDJSnx", [unique store/location id on the partner side],
"doordash_store_uuid": "f1c7f43b-64ca-4586-b990-171aaafbca2d",
"status": "ABANDONED",
"exclusion_code": "DUPLICATE_LOCATION_ID",
[if applicable - reason pre-onboarding validation failure]
"details": "", [additional details]
"menus": [
{
"menu_uuid": "949e6d70-371a-4250-8fe7-2d13b141e07g",
"menu_preview_link": "https://doordash.com/menu/1234"
"menu_error": "reason why menu failed to be pulled"
}
]
}
- [Optional] Call DoorDash GET API endpoint
Partners can make a GET http method to a DoorDash API endpoint to get the same information returned from the webhook noted above. Subscribing to the Fetch Onboarding Status webhook (4a, above) is mandatory as part of implementation to avoid missing any updates in the onboarding status progress. Using this GET API endpoint is not a suitable replacement for subscribing to the webhook notifications.
Request Endpoint:
"request": {
"method": "GET",
"header": [
{
"key": "Authorization",
"value": "Bearer <Partner JWT>",
"type": "text"
},
{
"key": "auth-version",
"value": "v2",
"type": "text"
},
{
"key": "User-Agent",
"value": "<Partner User Agent value>",
"type": "text"
}
],
"url": "https://openapi.doordash.com/marketplace/api/v2/store_onboarding/<onboarding_id>",
"protocol": "https"
}
Query Parameter:
No query parameter is needed.
Response (Response Code 200):
{
"onboarding_id": "9154103a-be82-48fc-978d-792171f7ee32",
"location_id": "xdDJSnx", [unique store/location id on the partner side],
"doordash_store_uuid": "f1c7f43b-64ca-4586-b990-171aaafbca2d",
"status": "ABANDONED",
"exclusion_code": "DUPLICATE_LOCATION_ID",
[if applicable - reason pre-onboarding validation failure]
"details": "", [additional details]
"menus": [
{
"menu_uuid": "949e6d70-371a-4250-8fe7-2d13b141e07g",
"menu_preview_link": "https://doordash.com/menu/1234"
"menu_error": "reason why menu is failed to be pulled"
}
]
}
Possible Onboarding Status Values:
| Onboarding Status | Details |
|---|---|
| ⌛ INTEGRATION_REQUESTED | DoorDash business / store configuration and catalog build are in process. |