DoorDash Ads API

Plan, launch and measure sponsored-listing and brand advertising on the DoorDash marketplace. Campaigns, ad groups, product ads, keywords, creatives, targeting, budget recommendations, catalog validation and downloadable performance reports.

Operations 27

POST /ads/api/v1/{campaignType}/campaigns Create campaign #
PUT /ads/api/v1/{campaignType}/campaigns Update campaign #
GET /ads/api/v1/{campaignType}/campaigns Get campaigns #
GET /ads/api/v1/{campaignType}/campaigns/{campaignId} Get campaign by ID #
GET /ads/api/v1/campaigns/{campaignId}/recommendations Get budget capout recommendations #
POST /ads/api/v1/{campaignType}/adGroups Create ad group #
PUT /ads/api/v1/{campaignType}/adGroups Update ad group #
GET /ads/api/v1/{campaignType}/adGroups Get ad groups #
GET /ads/api/v1/{campaignType}/adGroups/{adGroupId} Get ad group by ID #
POST /ads/api/v1/{campaignType}/productAds Create product ad #
GET /ads/api/v1/{campaignType}/productAds Get product ads #
DELETE /ads/api/v1/{campaignType}/productAds Delete product ad #
POST /ads/api/v1/sp/reports/{recordType}/create Create report #
GET /ads/api/v1/sp/reports/download/{reportId} Download report #
GET /ads/api/v1/sp/reports/list Get reports #
POST /ads/api/v1/sp/catalogs/validate Validate products #
POST /ads/api/v1/sp/keywords Get recommended keywords #
POST /ads/api/v1/sp/adGroups/{adGroupId}/keywords Get recommended keywords with status in ad group #
POST /ads/api/v1/resources/search Search resources #
POST /ads/api/v1/assets Create a new asset
GET /ads/api/v1/assets/{assetId} Get asset by ID
POST /ads/api/v1/assets/{assetId}/register Register an asset
POST /ads/api/v1/sb/creatives Create creatives
GET /ads/api/v1/sb/creatives Get creatives
GET /ads/api/v1/merchants Get merchants
GET /ads/api/v1/menu/labels Get dish labels
POST /ads/api/v1/targeting/audience/estimate Get audience size estimation

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/doordash-ads-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

doordash-ads-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 1.0.29
  title: DoorDash Ads API
  description: >

    DoorDash Ads API for Sponsored Products for campaign management and
    reporting operations.


    Please see [DoorDash CPG Advertiser Guide &
    FAQ](https://img.cdn4dd.com/s/managed/advertiser/ads-portal/DoorDash_CPG_Advertiser_Guide_&_FAQ.pdf)
    for more details about Ads functionalities.


    ####


    ### Release Notes


    #### v1.0.29 (July 9, 2026)
      - **[Beta]** Stacked Targeting for Sponsored Products and Sponsored Brand
        - Ad group create and update now support combining multiple targeting features in the same ad group when each targeting feature is enabled for the advertiser and country. Sponsored Products supports dayparting, merchant targeting, behavioral targeting, interest targeting, and keyword targeting. Sponsored Brand supports dayparting, merchant targeting, behavioral targeting, and interest targeting. Existing campaign type, bid configuration, advertiser, and country validation still applies.
      - New Retailer breakdown in CATEGORY_SHARE offline reports
        - When `RETAILER` is included in the list of `groupBys`, the report will include a new column: `Retailer (Store Name)`
        - Grouping by both `RETAILER` and `VERTICAL` is not supported.
        - Retailer breakdown is only available for Diamond & Gold tier advertisers.
      - Added `reportNameContains`, `sortCol`, and `sortDir` optional query params to Get reports (`listReports`)
servers:
  - url: https://openapi.doordash.com
tags:
  - name: Campaigns
  - name: Ad Groups
  - name: Product Ads
  - name: Assets
  - name: Creatives (SB)
    description: For Sponsored Brand campaigns only.
  - name: Merchants (Retailers)
    description: To retrieve business IDs available for merchant targeting.
  - name: Keywords (SP)
    description: For Sponsored Products campaigns only.
  - name: Resources
    description: To retrieve brands and categories available for behavioral targeting.
  - name: Catalog
  - name: Report
  - name: Menu
  - name: Targeting
security:
  - Ads API Key Authentication: []
paths:
  /ads/api/v1/{campaignType}/campaigns:
    post:
      tags:
        - Campaigns
      operationId: createCampaign
      summary: Create campaign
      description: Create a single campaign.
      parameters:
        - $ref: '#/components/parameters/campaignType'
      requestBody:
        description: A campaign to create.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCampaignRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
        - Campaigns
      operationId: updateCampaign
      summary: Update campaign
      description: Update a single campaign.
      parameters:
        - $ref: '#/components/parameters/campaignType'
      requestBody:
        description: A partial campaign object used to update an existing campaign.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCampaignRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    get:
      tags:
        - Campaigns
      operationId: getCampaigns
      summary: Get campaigns
      description: Get a list of campaigns.
      parameters:
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
        - $ref: '#/components/parameters/campaignType'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                  - campaigns
                properties:
                  campaigns:
                    description: List of campaigns.
                    type: array
                    items:
                      $ref: '#/components/schemas/CampaignResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/{campaignType}/campaigns/{campaignId}:
    get:
      tags:
        - Campaigns
      operationId: getCampaignById
      summary: Get campaign by ID
      description: Get a single campaign by the provided identifier.
      parameters:
        - $ref: '#/components/parameters/campaignType'
        - name: campaignId
          in: path
          description: Unique identifier for a campaign
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/campaigns/{campaignId}/recommendations:
    get:
      tags:
        - Campaigns
      operationId: getBudgetCapoutRecommendations
      summary: Get budget capout recommendations
      description: >-
        Get budget capout report and recommendations for the provided campaign
        ID.
      parameters:
        - $ref: '#/components/parameters/campaignId'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BudgetCapoutRecommendationsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/{campaignType}/adGroups:
    post:
      tags:
        - Ad Groups
      operationId: createAdGroup
      summary: Create ad group
      description: Create a single ad group.
      parameters:
        - $ref: '#/components/parameters/campaignType'
      requestBody:
        description: An ad group to create.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAdGroupRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdGroupResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
        - Ad Groups
      operationId: updateAdGroup
      summary: Update ad group
      description: Update a single ad group.
      parameters:
        - $ref: '#/components/parameters/campaignType'
      requestBody:
        description: A partial ad group object used to update an existing ad group.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAdGroupRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdGroupResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    get:
      tags:
        - Ad Groups
      operationId: getAdGroups
      summary: Get ad groups
      description: >-
        Get a list of ad groups, optionally filtered by campaign IDs and/or ad
        group IDs.
      parameters:
        - $ref: '#/components/parameters/campaignType'
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
        - name: campaignIdFilter
          in: query
          description: >-
            A comma-delimited list of campaign identifiers. At least one of
            campaignIdFilter and adGroupIdFilter is required.
          required: false
          schema:
            type: string
        - name: adGroupIdFilter
          in: query
          description: >-
            A comma-delimited list of ad group identifiers. At least one of
            campaignIdFilter and adGroupIdFilter is required.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                  - adGroups
                properties:
                  adGroups:
                    description: List of ad groups.
                    type: array
                    items:
                      $ref: '#/components/schemas/AdGroupResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/{campaignType}/adGroups/{adGroupId}:
    get:
      tags:
        - Ad Groups
      operationId: getAdGroupById
      summary: Get ad group by ID
      description: Get a single ad group by the provided identifier.
      parameters:
        - $ref: '#/components/parameters/campaignType'
        - name: adGroupId
          in: path
          description: The identifier of an existing ad group.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdGroupResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/{campaignType}/productAds:
    post:
      tags:
        - Product Ads
      operationId: createProductAd
      summary: Create product ad
      description: Create a single product ad the provided campaign and ad group IDs.
      parameters:
        - $ref: '#/components/parameters/campaignType'
      requestBody:
        description: A product ad to create.
        content:
          application/json:
            schema:
              type: object
              $ref: '#/components/schemas/CreateProductAdRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                description: The created product ad.
                $ref: '#/components/schemas/ProductAdResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    get:
      tags:
        - Product Ads
      operationId: getProductAds
      summary: Get product ads
      description: >-
        Get a list of product ads, optionally filtered by campaign IDs and/or
        adGroup IDs.
      parameters:
        - $ref: '#/components/parameters/campaignType'
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
        - name: campaignIdFilter
          in: query
          description: >-
            A comma-delimited list of campaign identifiers. At least one of
            campaignIdFilter and adGroupIdFilter is required.
          required: false
          schema:
            type: string
        - name: adGroupIdFilter
          in: query
          description: >-
            A comma-delimited list of ad group identifiers. At least one of
            campaignIdFilter and adGroupIdFilter is required.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                  - productAds
                properties:
                  productAds:
                    description: List of product ads
                    type: array
                    items:
                      $ref: '#/components/schemas/ProductAdResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
        - Product Ads
      operationId: deleteProductAd
      summary: Delete product ad
      description: Delete a single product ad by the provided identifier.
      parameters:
        - $ref: '#/components/parameters/campaignType'
      requestBody:
        description: The identifier of an existing product ad.
        content:
          application/json:
            schema:
              type: object
              required:
                - campaignId
                - adGroupId
                - idType
                - productId
              properties:
                campaignId:
                  $ref: '#/components/schemas/CampaignId'
                adGroupId:
                  $ref: '#/components/schemas/AdGroupId'
                idType:
                  $ref: '#/components/schemas/ProductIdType'
                productId:
                  $ref: '#/components/schemas/ProductId'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteProductAdResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/sp/reports/{recordType}/create:
    post:
      tags:
        - Report
      operationId: createReport
      summary: Create report
      description: >-
        Create a single report. See request samples for example report requests.
        Note that there is a 3 year rolling window for reports (`startDate`
        cannot be more than three years ago).
      parameters:
        - name: recordType
          in: path
          required: true
          schema:
            $ref: '#/components/parameters/recordType'
          examples:
            Campaign:
              value: CAMPAIGN
              summary: Campaign Report (SB, SP)
            CampaignPerformanceAndPlacement:
              value: ADGROUP
              summary: Campaign Performance Report (SB, SP), Placement Report (SP)
            Product:
              value: PRODUCT
              summary: Product Report (SB, SP)
            Keyword:
              value: KEYWORD
              summary: Keyword Report (SP)
            CategoryShare:
              value: CATEGORY_SHARE
              summary: Category Share Report
            ProductSales:
              value: PRODUCT_SALES
              summary: Product Sales Report
            Catalog:
              value: CATALOG
              summary: Catalog Report
            InterestInsight:
              value: INTEREST_INSIGHTS
              summary: Interest Insight Report
      requestBody:
        description: Report request parameters.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateReportRequest'
            examples:
              CampaignSB:
                summary: Sponsored Brand Campaign Report
                value:
                  reportName: Sponsored Brand Campaign Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_BRAND
              CampaignPerformanceSB:
                summary: Sponsored Brand Campaign Performance Report
                value:
                  reportName: Sponsored Brand Campaign Performance Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_BRAND
              CampaignPerformanceSBDayparted:
                summary: Sponsored Brand Dayparted Campaign Performance Report
                value:
                  reportName: Sponsored Brand Dayparted Campaign Performance Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_BRAND
                  timeGranularity: HOUR
              ProductSB:
                summary: Sponsored Brand Product Report
                value:
                  reportName: Sponsored Brand Product Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_BRAND
              ProductSBDayparted:
                summary: Sponsored Brand Dayparted Product Report
                value:
                  reportName: Sponsored Brand Dayparted Product Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_BRAND
                  timeGranularity: HOUR
              CampaignSP:
                summary: Sponsored Products Campaign Report
                value:
                  reportName: Sponsored Products Campaign Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_PRODUCTS
              CampaignPerformanceSP:
                summary: Sponsored Products Campaign Performance Report
                value:
                  reportName: Sponsored Products Campaign Performance Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_PRODUCTS
              CampaignPerformanceSPDayparted:
                summary: Sponsored Products Dayparted Campaign Performance Report
                value:
                  reportName: Sponsored Products Dayparted Campaign Performance Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_PRODUCTS
                  timeGranularity: HOUR
              ProductSP:
                summary: Sponsored Products Product Report
                value:
                  reportName: Sponsored Products Product Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_PRODUCTS
              ProductSPDayparted:
                summary: Sponsored Products Dayparted Product Report
                value:
                  reportName: Sponsored Products Dayparted Product Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_PRODUCTS
                  timeGranularity: HOUR
              Placement:
                summary: Sponsored Products Placement Report
                value:
                  reportName: Sponsored Products Placement Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  segment: SEGMENT
                  campaignTypes:
                    - SPONSORED_PRODUCTS
              PlacementDayparted:
                summary: Sponsored Products Dayparted Placement Report
                value:
                  reportName: Sponsored Products Dayparted Placement Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  segment: SEGMENT
                  campaignTypes:
                    - SPONSORED_PRODUCTS
                  timeGranularity: HOUR
              Keyword:
                summary: Sponsored Products Keyword Report
                value:
                  reportName: Sponsored Products Keyword Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  campaignTypes:
                    - SPONSORED_PRODUCTS
              CategoryShareWeekly:
                summary: Category Share Weekly Nielsen Report
                value:
                  reportName: Category Share Weekly Nielsen Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  groupBys: '[BRAND, VERTICAL]'
                  timeGranularity: '[WEEK]'
                  categoryProvider: NIELSEN
              CategoryShareMonthly:
                summary: Category Share Monthly Circana Report
                value:
                  reportName: Category Share Monthly Circana Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  groupBys: '[BRAND, VERTICAL, CATEGORY]'
                  timeGranularity: '[MONTH]'
                  categoryProvider: CIRCANA
              ProductSalesDaily:
                summary: Product Sales Daily Report
                value:
                  reportName: Product Sales Daily Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  groupBys: '[BRAND, VERTICAL, ITEM]'
                  timeGranularity: '[DAY]'
              ProductSalesWeekly:
                summary: Product Sales Weekly Report
                value:
                  reportName: Product Sales Weekly Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  groupBys: '[BRAND, VERTICAL, ITEM]'
                  timeGranularity: '[WEEK]'
              ProductSalesMonthly:
                summary: Product Sales Monthly Report
                value:
                  reportName: Product Sales Monthly Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  groupBys: '[BRAND, VERTICAL, ITEM]'
                  timeGranularity: '[MONTH]'
              ProductSalesRetailer:
                summary: Product Sales Retailer Report
                value:
                  reportName: Product Sales Retailer Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  groupBys: '[RETAILER]'
                  timeGranularity: '[MONTH]'
              Catalog:
                summary: Catalog Report
                value:
                  reportName: Catalog Report
                  startDate: '2025-11-01 00:00:00'
                  endDate: '2025-11-01 00:00:00'
                  filters:
                    - field: L1_BRAND
                      terms:
                        - 1
                        - 2
                    - field: STATUS
                      terms:
                        - ACTIVE
                        - INACTIVE
                    - field: SEARCH_TERM
                      terms:
                        - bottle
              InterestInsightsDish:
                summary: Interest Insights Dish Report
                value:
                  reportName: Interest Insights Dish Report
                  startDate: '2025-01-01 00:00:00'
                  endDate: '2025-04-01 00:00:00'
                  groupBys: '[DISH]'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateReportResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/sp/reports/download/{reportId}:
    get:
      tags:
        - Report
      operationId: downloadReportRequest
      summary: Download report
      description: Download a single report by the provided identifier.
      parameters:
        - name: reportId
          in: path
          description: The identifier for a report.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadReportResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/sp/reports/list:
    get:
      tags:
        - Report
      operationId: listReports
      summary: Get reports
      description: Get a list of reports, optionally filtered by status or report type.
      parameters:
        - name: startDate
          in: query
          description: Get all reports requested after this date.
          required: true
          schema:
            type: string
          example: '2025-11-01 00:00:00'
        - name: endDate
          in: query
          description: Get all reports requested before this date.
          schema:
            type: string
          example: '2025-11-01 00:00:00'
        - $ref: '#/components/parameters/startIndex'
        - $ref: '#/components/parameters/count'
        - name: status
          in: query
          description: Filter report by status.
          schema:
            $ref: '#/components/schemas/ReportStatus'
        - name: reportNameContains
          in: query
          description: >-
            Get all report names requested containing this substring,
            case-insensitive and trimmed.
          schema:
            type: string
        - name: sortCol
          in: query
          description: Sort reports by this column.
          schema:
            type: string
            enum:
              - name
              - type
              - startDate
              - dateGenerated
              - status
            default: dateGenerated
        - name: sortDir
          in: query
          description: Sort reports by this direction.
          schema:
            type: string
            enum:
              - ASC
              - DESC
            default: DESC
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListReportsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/sp/catalogs/validate:
    post:
      tags:
        - Catalog
      operationId: validateCatalogProducts
      summary: Validate products
      description: >-
        Validate eligibility of a list of catalog products. Products in result
        will be returned in the same order as provided in the request.
      requestBody:
        description: List of product IDs
        content:
          application/json:
            schema:
              type: array
              minItems: 1
              maxItems: 100
              items:
                properties:
                  idType:
                    $ref: '#/components/schemas/ProductIdType'
                  productId:
                    $ref: '#/components/schemas/ProductId'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CatalogValidationResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
          properties:
            campaigns:
              description: List of campaigns.
              type: array
              items:
                $ref: '#/components/schemas/CampaignResponse'
  /ads/api/v1/sp/keywords:
    post:
      tags:
        - Keywords (SP)
      operationId: getRecommendedKeywordsForProducts
      summary: Get recommended keywords
      description: >-
        Get a list of recommended keywords for the provided products and
        placement type.
      requestBody:
        description: List of placement types and list of product IDs.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetRecommendedKeywordsRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecommendedKeywordsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/sp/adGroups/{adGroupId}/keywords:
    post:
      tags:
        - Keywords (SP)
      operationId: getRecommendedKeywordsAdGroupStatus
      summary: Get recommended keywords with status in ad group
      description: >-
        Get a list of recommended keywords and their status within the given ad
        group (e.g. new) for the provided products and placement type.
      parameters:
        - name: adGroupId
          in: path
          description: Unique identifier for an ad group
          required: true
          schema:
            type: string
      requestBody:
        description: List of placement types and list of product IDs.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetRecommendedKeywordsRequest'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecommendedKeywordsStatusResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /ads/api/v1/resources/search:
    post:
      tags:
        - Resources
      operationId: searchResources
      summary: Search resources
      description: >-
        Get a list of resources (categories or advertiser's brands) based on
        classification type and resource type.
      requestBody:
        content:
      

# --- truncated at 32 KB (89 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/doordash/refs/heads/main/openapi/_original/doordash-ads-openapi.yml