Aller au contenu principal

Deeplink format

https://www.doordash.com/rx/{merchant_tag}?store_id=...&item=...&signature=...
IMPORTANT NOTE

Merchants should not, under any circumstances, provide DoorDash with any identifying patient data or Protected Health Information related to the prescription order within the deeplink.

Path parameters​

ParameterTypeRequiredDescription
merchant_tagstringYesThe unique pharmacy identifier for the merchant.

Query parameters​

ParameterTypeRequiredRepeatableDescription
store_idstringYesNoThe unique identifier for the merchant's store.
itemstringYesYesEncodes the item details in the format: <item display name>:<copay>:<expiry>.
fulfillment_typestringNoNoWhen set to pdf_417, renders the value of fulfillment_data as a PDF417 barcode on the dasher's device for pharmacy staff to scan, instead of the standard prescription information UI. fulfillment_data is required when this parameter is set. When omitted, the dasher sees the standard prescription information.
fulfillment_datastringNoNoThe data to encode for fulfillment, e.g. the payload to render as a barcode. Must be URL-encoded. Ignored unless fulfillment_type=pdf_417.
signaturestringNoNoUsed to verify authenticity and integrity of the URL; see signature details.
Whether a merchant must sign their deeplinks is configured per merchant.
When present, it must be the last parameter in the URL.

item parameter format​

<item display name>:<copay in cents>:<expiration in Unix time (seconds)>
ComponentDescription
item display nameThe name of the item to be displayed to the consumer. This is typically the first three letters of the prescription name. Any spaces or other reserved characters must be URL-encoded.
copayCost in cents. Example: 500 = $5.00.
expirationUnix timestamp for expiration (in seconds). Example: 1749225600.

signature details​

DoorDash verifies the authenticity and integrity of signed URLs using RSA digital signatures with the SHA-256 hashing algorithm. Signatures must be generated using a standards-compliant RSA signature scheme, specifically PKCS#1 v1.5 as defined in RFC 8017, Section 9.2. This corresponds to the algorithm commonly named SHA256withRSA or RSA-SHA256 in most programming languages and cryptography libraries.

The merchant should follow these steps to generate a valid signature:

  1. Generate an RSA public/private key pair (X.509/PKCS#8) and provide DoorDash with the public key in PEM format.
  2. Build the string to be signed by taking the unsigned URL (i.e. without a signature parameter) and extract the substring beginning with the <merchant_tag> and continuing through the last non-signature parameter (do not include the scheme, host, or leading slash).
  3. Compute the SHA-256 digest of the string exactly as it appears, preserving its exact characters, punctuation, and encoding.
  4. Generate a digital signature with their private key using RSASSA-PKCS1-v1_5 with SHA-256. The signing library will automatically wrap the hash in the required ASN.1 DigestInfo structure and apply PKCS #1 v1.5 padding. The result is a binary signature value.
  5. Encode the binary signature as a Base64 string.
  6. Append the signature query parameter to the end of the unsigned URL, with the Base64-encoded signature as its value. This produces the final signed URL.

For a detailed walkthrough of this process, see How the signature was generated in the first example.

Example #1 - single item with signature​

The following deeplink will be used for this example.

https://www.doordash.com/rx/abc?store_id=123&item=PRO:500:1749225600
&signature=AzDeRHry6phxw3s62Jmf40rzpMDPkNp6tF5r83NEO+dz/JzRk54lLO1w0
x2D+hcRHile4iSxbdF79YGHNA6QPATy5eEFR/VtvPTyfJOqAhU6wH6/QSJMfEufD9Jmj
CRBCiwj8MG8ZVQEAsAE4E0WL7RQ9L5j/tDuL4dmWi5myxsCSWRmmrZZ3ln0Zcg9AAnmM
t6H3cN24EnhxQo0j7R4ECoEmzpQ2X1lEwhJ6EgsqwTfZp3Img3v71K4dkxHvPTzHc/v0
QN/jfDqBAb+TPg7vSODZGThqW3ypeCRWsgPEunshBVkFAC7hAP/NaUpCE7oHaR4/+SoN
UIK63QpKfB+SA==

Note: Line breaks are shown above for readability only. In production, the deeplink must be a single uninterrupted URL.

The deeplink contains the following information:

ParameterValueExplanation
merchant_tagabc
store_id123
itemPRO:500:1749225600This item corresponds to a prescription beginning with PRO, has a $5.00 copay, and expires at Unix timestamp 1749225600 (which is June 6, 2025, 12:00 PM ET)
signatureAzDeRHry6phxw3s62Jmf40rzpMDPkNp6tF5r83NEO+dz/JzRk54lLO1w0x2D+hcR
Hile4iSxbdF79YGHNA6QPATy5eEFR/VtvPTyfJOqAhU6wH6/QSJMfEufD9JmjCRB
Ciwj8MG8ZVQEAsAE4E0WL7RQ9L5j/tDuL4dmWi5myxsCSWRmmrZZ3ln0Zcg9AAnm
Mt6H3cN24EnhxQo0j7R4ECoEmzpQ2X1lEwhJ6EgsqwTfZp3Img3v71K4dkxHvPTz
Hc/v0QN/jfDqBAb+TPg7vSODZGThqW3ypeCRWsgPEunshBVkFAC7hAP/NaUpCE7o
HaR4/+SoNUIK63QpKfB+SA==
See How the signature was generated for an explanation.

How the signature was generated​

For the purposes of this example, we will use the following key pair.

Public Key​

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7DNHCd29Gaikt0vqhDKj
0IdHEMLSdPFRKMoloQan2lNadpv8a3qt01hUTA3Qe2bp3imTdPxbXhPdOQKB10X4
KwCcZgRGlgJnXmVsnpErMXExMVy5gYOHJNO/H51cbX7V01BeoYArGuJaGWEP42eh
BYjXL+GbUXahJlomTtYxFx51gpkabxLwc5hE5iXzkwRjtJvtWCRnjU22fm5QV7Bv
6MvFriUzRTGd3hP/8naG5bULk/ZvyoTtt98rclumYF+2RKBjBFJobxnjX3DZYNNL
isQ0hFbF5eBIDLIBbth2srvKCwLkcRq+l28yZCiVt0BwtrTXTnhrXoepbeAZlI5r
MQIDAQAB
-----END PUBLIC KEY-----

Private Key​

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0B...[REDACTED]...
-----END PRIVATE KEY-----

Process​

  1. The string to be signed is abc?store_id=123&item=PRO:500:1749225600.
    • The SHA-256 hash of this string is a9bcf63278a337644700c11a8262cb6238c9765af55044bb90a2affe0675cdf0 (shown for illustration only, DO NOT manually hash the string; standard signing APIs handle hashing internally).
  2. Sign using your private key with a PKCS#1 v1.5-compliant RSA signature function. Most modern languages provide a standards-compliant implementation of this algorithm through their standard or widely used crypto libraries (for example, Java Signature.getInstance("SHA256withRSA"), Python private_key.sign(..., padding.PKCS1v15(), hashes.SHA256()), or Node.js crypto.createSign('RSA-SHA256')). This produces a binary signature value.
  3. Base64-encode the binary signature value to produce the following string: AzDeRHry6phxw3s62Jmf40rzpMDPkNp6tF5r83NEO+dz/JzRk54lLO1w0x2D+hcRHile4iSxbdF79YGHNA6QPATy5eEFR/VtvPTyfJOqAhU6wH6/QSJMfEufD9JmjCRBCiwj8MG8ZVQEAsAE4E0WL7RQ9L5j/tDuL4dmWi5myxsCSWRmmrZZ3ln0Zcg9AAnmMt6H3cN24EnhxQo0j7R4ECoEmzpQ2X1lEwhJ6EgsqwTfZp3Img3v71K4dkxHvPTzHc/v0QN/jfDqBAb+TPg7vSODZGThqW3ypeCRWsgPEunshBVkFAC7hAP/NaUpCE7oHaR4/+SoNUIK63QpKfB+SA==.
  4. Use this value as the signature query param in the signed URL.
  5. DoorDash will use the public key to verify the signature (using the same algorithm) to guarantee authenticity and integrity of the URL.

Example #2 - multiple items​

The following deeplink will be used for this example.

https://www.doordash.com/rx/abc?store_id=123&item=PRO:500:1749225600
&item=MET:1295:1749398400

The deeplink contains the following information:

ParameterValueExplanation
merchant_tagabc
store_id123
itemPRO:500:1749225600This item corresponds to a prescription beginning with PRO, has a $5.00 copay, and expires at Unix timestamp 1749225600 (which is June 6, 2025, 12:00 PM ET)
itemMET:1295:1749398400This item corresponds to a prescription beginning with MET, has a $12.95 copay, and expires at Unix timestamp 1749398400 (which is June 8, 2025, 12:00 PM ET)

Example #3 - single item with barcode fulfillment​

The following deeplink will be used for this example.

https://www.doordash.com/rx/abc?store_id=123&item=Rx%20Bundle:0:1774886400
&fulfillment_type=pdf_417&fulfillment_data=IMCB-NDIzNmViMDAtODU5Zi00YTA0LWEwOTctOTY3YmMyOTAyYzdh

Note: Line breaks are shown above for readability only. In production, the deeplink must be a single uninterrupted URL.

The deeplink contains the following information:

ParameterValueExplanation
merchant_tagabc
store_id123
itemRx%20Bundle:0:1774886400An item with display name Rx Bundle (URL-encoded as Rx%20Bundle), $0 copay (the consumer already paid on the merchant's site), expires at Unix timestamp 1774886400 (which is March 30, 2026, 12:00 PM ET).
fulfillment_typepdf_417The dasher will see fulfillment_data rendered as a PDF417 barcode for pharmacy staff to scan, instead of the standard prescription information UI.
fulfillment_dataIMCB-NDIzNmViMDAtODU5Zi00YTA0LWEwOTctOTY3YmMyOTAyYzdhThe payload encoded into the barcode.
Was this page helpful?