> ## Documentation Index
> Fetch the complete documentation index at: https://docs.everybite.com/llms.txt
> Use this file to discover all available pages before exploring further.

# DoorDash Catalog Upload

> Request a temporary upload URL from EveryBite and upload a DoorDash items.json catalog to private S3 storage

This example shows how to request a temporary upload URL from EveryBite and then upload a DoorDash `items.json` catalog directly to private S3 storage.

<Info>
  DoorDash does not need an AWS account or AWS credentials for this upload. The temporary URL returned by EveryBite carries its own signature.
</Info>

<Steps>
  <Step title="Request an upload URL">
    The EveryBite-issued DoorDash bearer token must be available in the `EVERYBITE_DOORDASH_TOKEN` environment variable.

    ```bash theme={null}
    curl --request POST \
      "https://api.everybite.com/graphql" \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer ${EVERYBITE_DOORDASH_TOKEN}" \
      --data '{
        "query": "mutation { createDoorDashCatalogUpload { method uploadUrl objectKey expiresAt contentType } }"
      }'
    ```

    Example response:

    ```json theme={null}
    {
      "data": {
        "createDoorDashCatalogUpload": {
          "method": "PUT",
          "uploadUrl": "https://everybite-exchange-doordash.s3.us-east-1.amazonaws.com/...?X-Amz-Signature=...",
          "objectKey": "doordash/business_id=73878/date=2026-07-22/items.json",
          "expiresAt": "2026-07-22T15:30:00.000Z",
          "contentType": "application/json"
        }
      }
    }
    ```
  </Step>

  <Step title="Upload items.json">
    Copy the complete `uploadUrl` from the response and use it before `expiresAt`:

    ```bash theme={null}
    curl --request PUT \
      --header "Content-Type: application/json" \
      --upload-file "/path/to/items.json" \
      "<paste-the-complete-uploadUrl-here>"
    ```

    A successful S3 upload normally returns an empty response body. The uploaded object will be stored at the `objectKey` returned by the API, for example:

    ```
    s3://everybite-exchange-doordash/doordash/business_id=73878/date=2026-07-22/items.json
    ```
  </Step>
</Steps>

## Handling the upload URL

<Warning>
  The temporary URL normally expires after approximately **15 minutes**. Keep it quoted because it contains `&` characters, do not modify it, and send exactly `Content-Type: application/json`.
</Warning>
