Brave Ads API

API for managing and reporting on Brave Ads campaigns. Enables advertisers to retrieve campaign details and performance data for privacy-preserving native browser ads and search ads. Supports customizable reporting dimensions and metrics including impressions, clicks, spend, and conversion tracking. Authentication uses API keys generated from the Brave Ads dashboard.

OpenAPI Specification

brave-ads-api.yml Raw ↑
openapi: 3.0.3
info:
  title: Brave Ads API
  description: >
    API for managing and reporting on Brave Ads campaigns. Enables advertisers
    to retrieve campaign details and performance data for privacy-preserving
    native browser ads and search ads. Supports customizable reporting dimensions
    and metrics including impressions, clicks, spend, and conversion tracking.
    Authentication uses API keys generated from the Brave Ads dashboard.
  version: 3.0.0
  contact:
    name: Brave Ads
    url: https://brave.com/brave-ads/
    email: [email protected]
  termsOfService: https://brave.com/terms-of-use/
externalDocs:
  description: Brave Ads API Documentation
  url: https://ads-help.brave.com/campaign-performance/API/
servers:
  - url: https://ads-serve.brave.com
    description: Brave Ads API

security:
  - ApiKeyAuth: []

tags:
  - name: campaigns
    description: Campaign management and hierarchy endpoints
  - name: reporting
    description: Campaign performance reporting endpoints

paths:
  /v1/api/campaigns:
    get:
      operationId: listCampaigns
      summary: List Campaigns
      description: >
        Retrieve campaign hierarchies with associated ad sets and ads for the
        authenticated advertiser account. Returns a structured view of campaigns,
        their ad sets, and individual ads with configuration details.
      tags:
        - campaigns
      responses:
        '200':
          description: Successful campaigns list response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignsResponse'
              example:
                campaigns:
                  - id: "camp_abc123"
                    name: "Q4 Brand Awareness"
                    status: active
                    budget:
                      daily: 50.00
                      total: 1500.00
                      currency: USD
                    start_date: "2026-10-01"
                    end_date: "2026-12-31"
                    ad_sets:
                      - id: "adset_xyz789"
                        name: "Desktop Users"
                        status: active
                        targeting:
                          countries: ["US", "CA", "GB"]
                          platforms: ["desktop"]
                        ads:
                          - id: "ad_def456"
                            name: "Hero Banner Ad"
                            status: active
                            creative_url: "https://example.com/ad-creative.png"
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'

  /v3/report/campaign/csv/{campaignId}:
    get:
      operationId: getCampaignReport
      summary: Get Campaign Performance Report
      description: >
        Retrieve customizable performance report data for a specific campaign
        in CSV format. Supports filtering by date range, granularity, and
        selection of dimensions and metrics including impressions, clicks,
        spend, and conversions.
      tags:
        - reporting
      parameters:
        - name: campaignId
          in: path
          required: true
          description: The unique identifier of the campaign to report on.
          schema:
            type: string
            example: camp_abc123
        - name: startDate
          in: query
          required: false
          description: Report start date in YYYY-MM-DD format.
          schema:
            type: string
            format: date
            example: "2026-01-01"
        - name: endDate
          in: query
          required: false
          description: Report end date in YYYY-MM-DD format.
          schema:
            type: string
            format: date
            example: "2026-01-31"
        - name: granularity
          in: query
          required: false
          description: Time granularity for report rows.
          schema:
            type: string
            enum: [daily, weekly, monthly, total]
            default: daily
        - name: dimensions
          in: query
          required: false
          description: >
            Comma-separated list of dimensions to include in the report.
            Options include campaign, ad_set, ad, country, platform, channel.
          schema:
            type: string
            example: campaign,country
        - name: metrics
          in: query
          required: false
          description: >
            Comma-separated list of metrics to include. Options include
            impressions, clicks, spend, ctr, cpc, conversions, conversion_value.
          schema:
            type: string
            example: impressions,clicks,spend,ctr
      responses:
        '200':
          description: Successful campaign report response in CSV format
          content:
            text/csv:
              schema:
                type: string
                description: CSV-formatted campaign performance data.
              example: |
                date,campaign_id,campaign_name,impressions,clicks,spend,ctr
                2026-01-01,camp_abc123,Q4 Brand Awareness,10523,312,15.60,2.96%
                2026-01-02,camp_abc123,Q4 Brand Awareness,11045,298,14.90,2.70%
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'

components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: >
        API key generated from the Brave Ads dashboard at https://ads.brave.com.

  schemas:
    CampaignsResponse:
      type: object
      description: Response containing the list of campaigns with their hierarchies.
      properties:
        campaigns:
          type: array
          items:
            $ref: '#/components/schemas/Campaign'

    Campaign:
      type: object
      description: A Brave Ads campaign with associated ad sets and ads.
      properties:
        id:
          type: string
          description: Unique identifier for the campaign.
        name:
          type: string
          description: Display name of the campaign.
        status:
          type: string
          description: Current status of the campaign.
          enum: [active, paused, completed, draft]
        budget:
          $ref: '#/components/schemas/Budget'
        start_date:
          type: string
          format: date
          description: Campaign start date.
        end_date:
          type: string
          format: date
          description: Campaign end date.
        ad_sets:
          type: array
          items:
            $ref: '#/components/schemas/AdSet'

    Budget:
      type: object
      description: Campaign budget configuration.
      properties:
        daily:
          type: number
          format: float
          description: Daily budget amount.
        total:
          type: number
          format: float
          description: Total campaign budget.
        currency:
          type: string
          description: ISO 4217 currency code.
          example: USD

    AdSet:
      type: object
      description: An ad set within a campaign containing targeting configuration.
      properties:
        id:
          type: string
          description: Unique identifier for the ad set.
        name:
          type: string
          description: Display name of the ad set.
        status:
          type: string
          enum: [active, paused, draft]
          description: Current status of the ad set.
        targeting:
          $ref: '#/components/schemas/Targeting'
        ads:
          type: array
          items:
            $ref: '#/components/schemas/Ad'

    Targeting:
      type: object
      description: Targeting configuration for an ad set.
      properties:
        countries:
          type: array
          items:
            type: string
          description: List of 2-character country codes to target.
        platforms:
          type: array
          items:
            type: string
            enum: [desktop, mobile, tablet]
          description: Device platform targets.
        channels:
          type: array
          items:
            type: string
            enum: [search, native]
          description: Ad channel types.

    Ad:
      type: object
      description: An individual ad creative within an ad set.
      properties:
        id:
          type: string
          description: Unique identifier for the ad.
        name:
          type: string
          description: Display name of the ad.
        status:
          type: string
          enum: [active, paused, draft, rejected]
          description: Current status of the ad.
        creative_url:
          type: string
          format: uri
          description: URL to the ad creative asset.
        headline:
          type: string
          description: Ad headline text.
        body:
          type: string
          description: Ad body copy.
        destination_url:
          type: string
          format: uri
          description: Destination URL for ad clicks.

    ErrorResponse:
      type: object
      description: API error response.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Error code.
            message:
              type: string
              description: Human-readable error message.

  responses:
    BadRequest:
      description: Bad request — missing or invalid parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Unauthorized — missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Forbidden — API key does not have access to this resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Not Found — the requested campaign does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    TooManyRequests:
      description: Too Many Requests — rate limit exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'