DoorDash API

DoorDash checkouts as a REST API you fully control — accounts & OTP utilities coming next. Flat subscription, unlimited checkouts.

Base URL https://dashified.xyz

Overview

The API is plain HTTPS + JSON, so it works from any language — curl, Python, Node, Go, anything that speaks HTTP. Access is a Mythic perk: generate your key with /api_key in Discord, then send it on every request.

You source DoorDash accounts three ways: pool (auto-pulled from the shared stock, billed from your balance), BYO (pass your own account — email + password, or a JWT), or autogen (the engine mints a brand-new account on the fly using your own hotmail007 + SMS provider keys, so the email/SMS cost is billed to you, not your balance). Autogen can also run on inboxes you upload instead of buying (autogen_source: "supplied"). Either way, checkouts themselves are unlimited.

Authentication

Send your key as a Bearer token in the Authorization header on every request. Keys look like dk_live_…, are shown once, and re-running /api_key revokes the previous one.

curl https://dashified.xyz/v1/me \
  -H "Authorization: Bearer dk_live_your_key_here"

Quickstart

  1. Buy Mythic in Discord, then run /api_key and copy your key.
  2. Confirm it works: GET /v1/me returns your subscription + balance.
  3. POST /v1/checkout/preview with a cart link (pool or BYO) — returns a session_id.
  4. Poll GET /v1/jobs/{id} until ready, then POST /v1/checkout/confirm to place it.
  5. Poll again until completed — the result carries the tracking link.

Error Codes

Standard HTTP statuses; bodies are {"detail": "…"}.

StatusMeaning
400Missing required field (e.g. cart_url, or address for a delivery)
401Missing, invalid, or revoked API key
403Key valid but no API access — requires an active Mythic tier
404Session/job not found, or not yours
409Order control called before the order was placed (no order_uuid yet)
503API database not ready — retry shortly

Account Snapshot live

Verify your key and read your subscription, balance, and capabilities. Free.

GET/v1/me

Response

{
  "user_id": 123456789,
  "key_prefix": "dk_live_abc123",
  "subscription": {
    "tier": "Mythic",
    "lifetime": false,
    "active": true,
    "api_access": true,
    "unlimited_checkouts": true,
    "expires_at": "2026-07-09T00:00:00"
  },
  "balance": 42.50,
  "account_modes": ["pool", "byo", "autogen"],
  "autogen_sources": ["mint", "supplied"],
  "blocked": false
}

Checkout live

Run a DoorDash checkout from a cart link (group-cart or bookmark link), with a pool account (auto-pulled) or your own account (BYO). Everything is async: each call returns 202 with a session_id; you poll GET /v1/jobs/{id} until the status reaches the state you want.

Lifecycle

preview → (optional edit / slots) → confirm. Statuses move queued → previewing → ready, then on confirm placing → completed (or failed).

POST/v1/checkout/preview
POST/v1/checkout/preview/{id}/edit
POST/v1/checkout/{id}/slots
POST/v1/checkout/confirm
POST/v1/checkout/{id}/cancel
GET/v1/jobs/{id}
POST/v1/autogen/release
POST/v1/autogen/inboxes
GET/v1/autogen/inboxes

Preview request body

FieldTypeNotes
cart_urlstringRequired. Group-cart / bookmark link
addressstringRequired for delivery. Delivery address (line 1 + zip). Omit only when is_pickup is true
unitstringApt / unit (optional)
tip_centsintTip in cents (optional)
dasher_instructionsstringDelivery note applied to the dropoff (optional)
is_pickupboolPickup instead of delivery. Default false. Pickup needs no address/dropoff
dropoff_optionstringDelivery dropoff: "leave_at_door" (default), "hand_to_me", or "meet_outside"
dashpassboolDashPass on/off. Omit = apply as usual. false = skip + cancel any active sub
account_namestringName to put on the order (optional)
account_modestring"pool" (default), "byo", or "autogen"
use_ultraboolCheck out via Ultra BP (auto-falls back to regular). Optional
email / password / jwt_tokenstringBYO only — your account's creds
hotmail007_api_keystringAutogen only — your hotmail007 key (buys the inbox; not needed with autogen_source: "supplied")
autogen_sourcestringAutogen — "mint" (default; the engine buys the inbox with your hotmail007 key) or "supplied" (the engine draws from your uploaded pool — see POST /v1/autogen/inboxes)
public_sms_api_key / getatext_api_keystringAutogen only — your SMS provider key(s); at least one required
sms_provider_prioritystringAutogen — "list_sms_first" (default) or "getatext_first"
sms_exclusiveboolAutogen — only use the chosen provider (no fallback). Optional
reuse_keystringAutogen — a stable per-order key: reuses this key's already-minted account on a resubmit (and returns an unused one to a global pool via /v1/autogen/release) instead of minting again. Optional
In autogen mode you don't pass an account — the engine mints a fresh one with your hotmail007 + SMS keys and verifies the phone automatically. There's no pool/BYO checkout fee; you pay only your own email + SMS provider costs. With autogen_source: "supplied" the engine skips the inbox purchase entirely and uses an inbox from your uploaded pool instead.
# 1. Preview — returns {"session_id": "...", "status": "queued"}
curl -X POST https://dashified.xyz/v1/checkout/preview \
  -H "Authorization: Bearer dk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"cart_url":"https://drd.sh/abc","address":"562 Broad St 07072","tip_cents":300}'

# 2. Poll until status == "ready"
curl https://dashified.xyz/v1/jobs/SESSION_ID \
  -H "Authorization: Bearer dk_live_your_key_here"

# 3. Confirm to place the order
curl -X POST https://dashified.xyz/v1/checkout/confirm \
  -H "Authorization: Bearer dk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"order_session_id":"SESSION_ID"}'

Confirm request body

FieldTypeNotes
order_session_idstringRequired. The session_id from preview
cardobjectCard to add before placing (optional; else uses one already on the account). See fields below.
scheduled_windowobjectA slot from /slots to schedule delivery (optional)
dashpassboolLast-chance DashPass on/off before placing (optional)

The card object

All values are strings. Provide this to place on a caller-supplied card; omit it to use a card already on the account.

FieldTypeNotes
numberstringRequired. Full card number, digits only (e.g. "5443171187277580")
mmstringRequired. Expiry month, 2 digits (e.g. "07")
yystringRequired. Expiry year — 2 or 4 digits both accepted (e.g. "31" or "2031")
cvvstringRequired. Card security code (e.g. "127")
zipstringRequired. Billing ZIP / postal code (e.g. "07072")
# Confirm with a caller-supplied card (values are examples — not real)
curl -X POST https://dashified.xyz/v1/checkout/confirm \
  -H "Authorization: Bearer dk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "order_session_id": "SESSION_ID",
    "card": {
      "number": "4111111111111111",
      "mm": "07",
      "yy": "31",
      "cvv": "123",
      "zip": "07072"
    }
  }'
status: "completed" is the success signal; on failure it's "failed" with a message in error and result: null. result.card_charged_cents is the exact amount the card paid (fee-inclusive total + tip). Only call confirm after you've collected payment from your buyer — it places the real order.

Edit request body

Any subset of these fields re-prices the open preview (statuses go editing → ready). Re-replication only happens when cart_url changes.

FieldTypeNotes
cart_urlstringSwap to a different cart (re-replicates)
addressstringNew delivery address
tip_centsintNew tip
account_namestringNew name on the order
dasher_instructionsstringNew delivery note
is_pickupboolSwitch between delivery and pickup
dropoff_optionstring"leave_at_door" (default), "hand_to_me", or "meet_outside"
dashpassboolTurn DashPass on/off for this order

Release an autogen account

POST/v1/autogen/release

When you're done with an autogen order (it was abandoned or you don't need the account), release the reuse_key you minted under. An account that never placed an order is returned to the global reuse pool (drained before the next mint); one that already ordered is left spent.

FieldTypeNotes
reuse_keystringRequired. The key you passed to preview

Supply your own inboxes (autogen v2)

POST/v1/autogen/inboxes

Upload hotmail007 inboxes into your own supplied-inbox pool (never shared across keys). Previews with autogen_source: "supplied" draw from this pool instead of buying an inbox. Lines are email:password:refresh_token:client_id (email + password required); pass them as a list of strings or one newline-separated string. Re-uploading an email refreshes its creds without counting as added.

FieldTypeNotes
inboxesarray | stringRequired. Lines of email:password:refresh_token:client_id
curl -X POST https://dashified.xyz/v1/autogen/inboxes \
  -H "Authorization: Bearer dk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"inboxes": ["box1@hotmail.com:pass1:refresh_tok:client_id", "box2@hotmail.com:pass2"]}'
GET/v1/autogen/inboxes

Check your supplied-inbox pool: {"available": …, "in_use": …, "spent": …}. available inboxes are claimable by your next supplied-mode preview; spent ones already backed an account.

Order Controls live

Act on an already-placed order (after confirm succeeded and the job result carries an order_uuid). All four are async — they return 202; poll GET /v1/jobs/{id} for the outcome field. Calling any of these before the order is placed returns 409.

POST/v1/orders/{id}/cancel
POST/v1/orders/{id}/refund
POST/v1/orders/{id}/refund/preview
POST/v1/orders/{id}/dashpass

Cancel a placed order

POST /v1/orders/{id}/cancel — cancels the placed order. Poll for cancel_result; on success job status becomes order_cancelled.

FieldTypeNotes
reasonstringCancellation reason (optional; default "consumer_requested")

Request a refund

POST /v1/orders/{id}/refund — requests a refund on the placed order. Poll for refund_result.

FieldTypeNotes
reasonstringRefund reason (optional; default "consumer_requested")
itemsarraySpecific line items to refund (optional; omit for a whole-order refund)

Preview a refund

POST /v1/orders/{id}/refund/preview — returns the would-be refund amount / eligibility without committing. Poll for refund_preview.

FieldTypeNotes
itemsarrayLine items to price the preview against (optional)

Toggle DashPass

POST /v1/orders/{id}/dashpass — turn DashPass on or off on the order's account. Poll for dashpass_result. (You can also set dashpass on preview / edit / confirm.)

FieldTypeNotes
enableboolRequired. true = apply DashPass, false = cancel it
Refund and refund-preview request shapes are modelled on DoorDash's existing order endpoints and may be adjusted as they're confirmed against live traffic.

Accounts coming soon

GET/v1/stock
GET/v1/accounts

Utilities coming soon

GET/v1/otp?email=
GET/v1/orders/check?email=
POST/v1/dashpass/cancel
POST/v1/dashpass/masscancel

Billing

Checkouts are unlimited under your subscription — you only pay for accounts.

Account sourceRateWhen charged
In-house (pool)$1.50 once a checkout is attempted; refunded + returned to stock if you cancel
External (BYO)$0.25 only on a successful checkout
Autogen$0.00 no balance charge — you pay your own hotmail007 inbox + SMS provider costs
Top up your balance in Discord via !fetchPurchase Balance — the wallet is shared between the bot and the API.

Async Jobs

Checkout endpoints return 202 with a session_id. Poll GET /v1/jobs/{id}, which returns status plus store_name, items, pricing, slots, result, error, and — once priced — account_email / account_password (the account the engine used for this order, so you can record it).

pricing is {subtotal, promo, delivery, service_fee, tax, tip, total, is_dashpass} in cents. Note total is the cart total before tip — the tip is added at placement, so the buyer's amount due is total + tip.

Statuses: queuedpreviewingready (priced, awaiting confirm) → placingcompleted, or failed at any point. Once completed, result carries order_uuid and tracking_url.

Order-control actions write their outcome to their own poll field: cancel_result, refund_result, refund_preview, and dashpass_result (each present only after the matching action runs).