# DoorDash US

[DoorDash](https://www.doordash.com/) uses independent contractors to pick up an order and deliver it to the customer. It is mostly used for food, groceries, and other small deliveries. DoorDash US is available for domestic shipments within the United States.

This guide provides developers with the details needed to build DoorDash US shipping capabilities into your ShipStation V2 API workflows.

## Requirements

Before you connect a DoorDash US account, make sure you have the following.

| Property | Type | Required? | Description |
|  --- | --- | --- | --- |
| `nickname` | *string* | **required** | A nickname for you to identify the carrier account in ShipStation V2 API. |
| `developer_id` | *string* | **required** | Developer ID, generated in the DoorDash developer portal. |
| `key_id` | *string* | **required** | Key ID, generated in the DoorDash developer portal. |
| `signing_secret` | *string* | **required** | Signing secret, generated in the DoorDash developer portal. |
| `order_fulfillment_method` | *string* | **required** | The fulfillment method agreed with DoorDash. Valid values: `standard`, `catering`, `shop_stage`, `shop_deliver`, `parcel`. |
| `pickup_external_business_id` | *string* | **required** | The business ID DoorDash generated for your account. |
| `pickup_external_store_id` | *string* | **required** | The store assigned to the business ID. It defines the pickup address, so it must be exact. |
| `webhook_secret` | *string* | Optional | Authorization key used for the webhook in your DoorDash account. |
| `incoming_webhook_url` | *string* | Optional | Generated automatically and used to receive tracking events. Read-only. |
| `origin_facility_id` | *string* | Optional | Your warehouse ID. Used when creating the label. |


### Account Requirements

* Your DoorDash account must be enabled for label generation. Contact DoorDash to request it. Accounts without it do not receive labels.
* Shipments must be to US addresses, with a 2-letter state code and a 5-digit zip code.
* Product values must be in USD. Other currencies are rejected.
* Both weight and dimensions are required for all shipments.
* The `ship_from` address must include `company_name`. DoorDash US requires it as the pickup business name.
* You can connect multiple DoorDash US accounts.


Pickup Address
DoorDash does not use the `ship_from` address on your shipment. Pickup always uses the values saved with your DoorDash US account: `pickup_external_business_id`, `pickup_external_store_id`, and `origin_facility_id`. If drivers pick up from a different location than the `ship_from` address, check these values.

The `ship_from.company_name` is still required, because it is sent to DoorDash as the pickup business name.

## Connect Account

You can connect a DoorDash US account using the POST method to the `/v2/connections/carriers/` endpoint.

`carrier_code`: `doordash_us`

**POST /v2/connections/carriers/doordash_us**


```http
POST /v2/connections/carriers/doordash_us HTTP/1.1
Host: api.shipstation.com
API-Key: __YOUR_API_KEY_HERE__
Content-Type: application/json

{
  "nickname": "my doordash account",
  "developer_id": "your_developer_id_here",
  "key_id": "your_key_id_here",
  "signing_secret": "your_signing_secret_here",
  "order_fulfillment_method": "standard",
  "pickup_external_business_id": "your_pickup_external_business_id_here",
  "pickup_external_store_id": "your_pickup_external_store_id_here",
  "webhook_secret": "your_webhook_secret_here",
  "origin_facility_id": "your_origin_facility_id_here"
}
```

A successful connection will return a response with the `carrier_id`, which you'll use for any requests for this account going forward.

## Rates

DoorDash US supports [rate shopping](/rate-shopping) with ShipStation V2 API. A rate request asks DoorDash for a delivery quote. It does not generate a label or register the shipment with DoorDash. The rate includes the estimated pickup time and the estimated delivery time.

Address lines in the drop-off address are truncated to 64 characters in rate requests.

## Service Details

Available DoorDash US services are provided below. Please note that carriers may update their available services at any time. To ensure you are always using valid services, you can use the [list carrier services](/list-carriers#list-carrier-services-sample-request) endpoint at any time.

### Domestic Services

| Service | API Code |
|  --- | --- |
| DashLink | `doordash_us_dashlink` |


DashLink supports tracking, driver tips, and the delivery confirmation options listed below.

### Packages

The following [carrier package types](/carrier-packaging) are available for DoorDash US services:

| Name | API Code | Package Attributes |
|  --- | --- | --- |
| Package | `doordash_us_package` | Domestic |


## Label Support

* Label format: ZPL
* Label size: 4" x 6"
* DoorDash US supports one package per shipment.


DoorDash US does not support:

* Adding [custom label messages](/label-messages).
* [Label branding](/branded-labels).
* [Multi-package shipments](/multi-package).
* [Return labels](/return-labels).
* [Third-party billing](/apis/docs/shipping/bill-to-third-party).
* Shipping to [service points](/service-points).
* Unicode characters on labels.


### Voiding Labels

DoorDash US supports [voiding labels](/void-labels) with ShipStation V2 API. If a label cannot be voided, the error message from DoorDash is returned with the error "Label cannot be voided". Check the delivery status in DoorDash, and retry only if the delivery can still be cancelled.

## Delivery Confirmation

DoorDash US supports these [delivery confirmation](/apis/docs/shipping/delivery-confirmation) options:

* `none`: No confirmation is required.
* `signature`: Signature required on delivery.


## Advanced Options

DoorDash US supports certain [advanced options](/advanced-options), which you can add to the `shipment` object when creating a shipment or label.

| Advanced option | Description |
|  --- | --- |
| `advanced_options.tip.amount` | Adds a tip for the driver. The tip is only sent when the `order_fulfillment_method` is `standard`. |
| `advanced_options.event_notification` | Sends delivery notifications to the drop-off contact. |


You can also ship alcohol with DoorDash US.

To ensure you always have the most up-to-date information about a carrier's advanced options, use the list carrier options call.

## Manifests

DoorDash US does not require [manifesting](/manifests-scanforms) your shipments.

## Tracking

ShipStation V2 API's integration with DoorDash US supports receiving tracking updates for domestic shipments. Review our [Track a Package guides](/tracking) for details on tracking with ShipStation V2 API.

* The tracking number is the DoorDash delivery ID returned when the label is created.
* The tracking URL is returned when the label is created.
* Tracking events are also received through the webhook. The incoming webhook URL is generated automatically when you connect your account, and webhook requests must include your webhook secret in the `Authorization` header.


## Testing

DoorDash does not have a separate test environment. Testing uses the same endpoint as production with sandbox credentials.

## Troubleshooting

| Error | What it means | What to do |
|  --- | --- | --- |
| `401 Unauthorized`: `authentication_error` | The authentication token DoorDash received is missing, empty, or invalid. | Check the `developer_id`, `key_id`, and `signing_secret` on the account. Reconnect the account to generate a new token. |
| `404 Not Found`: `unknown_delivery_id` | DoorDash does not recognize the delivery ID. | Check that the tracking number is the delivery ID from the label. |
| Label cannot be voided | DoorDash did not accept the cancel request. | Read the error message from DoorDash. Check the delivery status in DoorDash, and retry only if the delivery can still be cancelled. |


## Additional Resources

For more information about DoorDash parcel deliveries, see the [DoorDash DashLink Parcels developer documentation](https://developer.doordash.com/en-US/docs/docs/drive/how_to/build_for_parcels/).

## Disconnecting Your DoorDash US Account

**DELETE /v2/connections/carriers/doordash_us/:id**


```http
DELETE /v2/connections/carriers/doordash_us/se-1234 HTTP/1.1
Host: api.shipstation.com
API-Key: __YOUR_API_KEY_HERE__
```

See our [Delete a Carrier page](/apis/shipengine/docs/reference/carriers/delete-carrier) for more details about disconnecting a carrier from ShipStation V2 API.

> **NOTE:**
If you disconnect a carrier account and reconnect it, the account will have a new `carrier_id` in ShipStation V2 API.