openapi: 3.2.0
info:
version: 1.0.29
title: DoorDash Ads Report API
description: DoorDash Ads API for Sponsored Products for campaign management and reporting operations.
servers:
- url: https://openapi.doordash.com
security:
- Ads API Key Authentication: []
tags:
- name: Report
paths:
/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'
components:
schemas:
Name:
description: Resource name.
type: string
CatalogReportFilter:
type: object
properties:
field:
description: Product filter types for catalog reporting.
type: string
enum:
- L1_BRAND
- STATUS
- SEARCH_TERM
terms:
type: array
items:
type: string
FileType:
description: Report file type.
type: string
enum:
- CSV
ListReportsResponse:
properties:
totalCount:
type: integer
reports:
type: array
items:
$ref: '#/components/schemas/ReportResponse'
CategoryProvider:
description: Data provider for product category definitions. Only applicable for Category Share reports. Note that Circana is only available to US advertisers.
type: string
enum:
- NIELSEN
- CIRCANA
example: CIRCANA
Date:
description: A date string in format of yyyy-MM-dd HH:mm:ss
type: string
example: '2025-11-01 00:00:00'
ReportCampaignType:
type: string
enum:
- SPONSORED_PRODUCTS
- SPONSORED_BRAND
ReportStatus:
type: string
enum:
- SCHEDULED
- PROCESSING
- COMPLETED
- ERROR
example: COMPLETED
CreateReportRequest:
required:
- reportName
- startDate
- endDate
properties:
reportName:
description: Name of the report
type: string
fileType:
$ref: '#/components/schemas/FileType'
startDate:
$ref: '#/components/schemas/Date'
endDate:
$ref: '#/components/schemas/Date'
segment:
$ref: '#/components/schemas/Segment'
groupBys:
description: '- "CATEGORY" only available for Nielsen Category Share reports for Alcohol and non-US advertisers, and Circana Category Share reports for US advertisers.
- "RETAILER" only available to Product Sales and Category Share reports for Diamond and Gold tier advertisers.
- "RETAILER" and "VERTICAL" cannot be both requested in the same report.
- "DISH" only available for Interest Insights reports.
'
type: array
items:
$ref: '#/components/schemas/GroupBy'
timeGranularity:
$ref: '#/components/schemas/TimeGranularity'
filters:
type: array
items:
$ref: '#/components/schemas/CatalogReportFilter'
campaignTypes:
$ref: '#/components/schemas/ReportCampaignTypes'
categoryProvider:
$ref: '#/components/schemas/CategoryProvider'
DownloadReportResponse:
required:
- reportId
- url
- name
- requestedAt
- reportExpiresAt
- status
properties:
reportId:
$ref: '#/components/schemas/ReportId'
url:
type: string
description: URL to download the report. This URL expires approximately 30 minutes after it is generated, so download the report within that window. Once the URL has expired, accessing it returns an `ExpiredToken` error ("The provided token has expired"). To obtain a fresh URL, call the download report endpoint again.
example: https://doordash-marketing-save-report-prod.s3.us-west-2.amazonaws.com/...
name:
$ref: '#/components/schemas/Name'
requestedAt:
$ref: '#/components/schemas/Date'
reportExpiresAt:
$ref: '#/components/schemas/Date'
status:
$ref: '#/components/schemas/ReportStatus'
recordType:
$ref: '#/components/schemas/RecordType'
groupBys:
type: array
items:
$ref: '#/components/schemas/GroupBy'
timeGranularity:
$ref: '#/components/schemas/TimeGranularity'
campaignTypes:
$ref: '#/components/schemas/ReportCampaignTypes'
categoryProvider:
$ref: '#/components/schemas/CategoryProvider'
Error:
properties:
code:
description: An enumerated error for machine use.
type: string
readOnly: true
details:
description: A human-readable description of the error.
type: string
readOnly: true
Segment:
description: A secondary dimension used to further segment certain types of reports.
type: string
enum:
- PLACEMENT
- NONE
RecordType:
type: string
enum:
- CAMPAIGN
- ADGROUP
- PRODUCT
- KEYWORD
- PRODUCT_SALES
- CATEGORY_SHARE
- CATALOG
- INTEREST_INSIGHTS
TimeGranularity:
description: '- HOUR (for dayparted reports) is currently in **Beta**.
- Category Share supports Week or Month grain
- Product Sales supports Day, Week, or Month grain
'
type: string
enum:
- HOUR
- DAY
- WEEK
- MONTH
- NONE
CreateReportResponse:
required:
- reportId
properties:
reportId:
$ref: '#/components/schemas/ReportId'
ReportCampaignTypes:
description: '- Type of campaigns to include in the report.
- Only relevant for Marketing reports (when recordType is one of {CAMPAIGN, ADGROUP, PRODUCT, KEYWORD}).
- Only one campaign type may be specified per report request.
'
type: array
maxItems: 1
items:
$ref: '#/components/schemas/ReportCampaignType'
ReportId:
description: Unique report identifier.
type: string
ReportResponse:
required:
- reportId
- name
- status
- startDate
- endDate
- dateGenerated
properties:
reportId:
$ref: '#/components/schemas/ReportId'
name:
$ref: '#/components/schemas/Name'
status:
$ref: '#/components/schemas/ReportStatus'
recordType:
$ref: '#/components/schemas/RecordType'
segment:
$ref: '#/components/schemas/Segment'
groupBys:
type: array
items:
$ref: '#/components/schemas/GroupBy'
startDate:
$ref: '#/components/schemas/Date'
endDate:
$ref: '#/components/schemas/Date'
dateGenerated:
$ref: '#/components/schemas/Date'
categoryProvider:
$ref: '#/components/schemas/CategoryProvider'
GroupBy:
type: string
enum:
- BRAND
- VERTICAL
- CATEGORY
- ITEM
- RETAILER
- DISH
responses:
InternalServerError:
description: One or more query parameters contained an invalid value.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Unauthorized.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
startIndex:
name: startIndex
in: query
description: 0-indexed record offset for the result set. Defaults to 0.
schema:
type: number
default: 0
recordType:
name: recordType
in: query
description: 'one of: CAMPAIGN, ADGROUP, PRODUCT, KEYWORD, CATEGORY_SHARE, PRODUCT_SALES, CATALOG, INTEREST_INSIGHTS'
required: true
schema:
- $ref: '#/components/schemas/RecordType'
count:
name: count
in: query
description: Number of records to include in the paged response.
required: false
schema:
type: number
securitySchemes:
Ads_API_Key_Authentication:
type: apiKey
scheme: bearer
in: header
name: Authorization
description: We will be using stateful token based API keys to authenticate clients, passed in the 'Authorization' header as 'Bearer {API_KEY}'.