IAB Tech Lab Reporting API

The Reporting API from IAB Tech Lab — 7 operation(s) for reporting.

Operations 7

GET /reports/{job_id} Get Campaign Report #
GET /meta/campaigns Meta List Campaigns #
GET /meta/report Meta Direct Report #
GET /accounts/{accountId}/orders/{orderId}/lines/stats Get accounts by account id orders by order id lines stats #
GET /accounts/{accountId}/orders/{orderId}/lines/{lineId}/stats Get accounts by account id orders by order id lines by line id stats #
GET /gam/orders Gam List Orders #
GET /gam/report Gam Delivery Report #

Documentation

Specifications

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-deal.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-order.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-product.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-negotiation.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-proposal.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-mediakit.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-agent.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-line.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-account.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-organization.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-creative.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-creativeapproval.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-assignment.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-changerequest.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-consentcontext.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-decisionrecord.json

Other Resources

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/iab-tech-lab-reporting-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

iab-tech-lab-reporting-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Iab Tech Lab Reporting API
  version: '1.0'
  description: 'Operations tagged Reporting across 3 of this provider''s published API definitions: iab-tech-lab-buyer-agent-openapi.json, iab-tech-lab-opendirect-1-5-1-swagger.yaml, iab-tech-lab-seller-agent-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://opendirect.example.com/v1.5.1
tags:
- name: Reporting
paths:
  /reports/{job_id}:
    get:
      tags:
      - Reporting
      summary: Get Campaign Report
      description: 'Get delivery reports for a completed booking job.


        Fetches data from:

        - Meta Ads API (for social channel bookings — campaign insights)

        - Seller agent deal performance API (for orchestrator-booked lines,

        keyed by the seller-issued ``deal_id``)


        Requires META_ACCESS_TOKEN + META_AD_ACCOUNT_ID + META_PAGE_ID in .env

        for Meta reporting.'
      operationId: get_campaign_report_reports__job_id__get
      parameters:
      - name: job_id
        in: path
        required: true
        schema:
          type: string
          title: Job Id
      - name: date_range
        in: query
        required: false
        schema:
          type: string
          default: last_30d
          title: Date Range
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Get Campaign Report Reports  Job Id  Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /meta/campaigns:
    get:
      tags:
      - Reporting
      summary: Meta List Campaigns
      description: 'List Meta Ads campaigns directly from the ad account (no booking job required).


        Returns campaigns with id, name, status, and objective.

        Requires META_ACCESS_TOKEN and META_AD_ACCOUNT_ID in .env.'
      operationId: meta_list_campaigns_meta_campaigns_get
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 10
          title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Meta List Campaigns Meta Campaigns Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /meta/report:
    get:
      tags:
      - Reporting
      summary: Meta Direct Report
      description: 'Pull insights directly from Meta Ads by campaign ID(s).


        Args:

        campaign_ids: Comma-separated Meta campaign IDs

        date_preset: last_7d | last_14d | last_30d | last_90d | this_month


        Returns spend, impressions, reach, clicks, CTR, CPM per campaign.

        Requires META_ACCESS_TOKEN and META_AD_ACCOUNT_ID in .env.'
      operationId: meta_direct_report_meta_report_get
      parameters:
      - name: campaign_ids
        in: query
        required: true
        schema:
          type: string
          title: Campaign Ids
      - name: date_preset
        in: query
        required: false
        schema:
          type: string
          default: last_30d
          title: Date Preset
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Meta Direct Report Meta Report Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /accounts/{accountId}/orders/{orderId}/lines/stats:
    get:
      tags:
      - Reporting
      description: Aggregates the impressions and clicks for all lines in the order.
      parameters:
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/orderId'
      responses:
        200:
          $ref: '#/components/responses/ReportingResponse'
        401:
          $ref: '#/components/responses/Standard401ErrorResponse'
        404:
          $ref: '#/components/responses/Standard404ErrorResponse'
        500:
          $ref: '#/components/responses/Standard500ErrorResponse'
      security:
      - OauthSecurity:
        - https://opendirect.example.com/scope/example
      summary: Get accounts by account id orders by order id lines stats
      x-summary-source: derived
      operationId: getAccountsByAccountIdOrdersByOrderIdLinesStats
      x-operation-id-source: derived
    servers:
    - url: https://opendirect.example.com/v1.5.1
  /accounts/{accountId}/orders/{orderId}/lines/{lineId}/stats:
    get:
      tags:
      - Reporting
      description: Aggregates the impressions and clicks for all lines in the order.
      parameters:
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/orderId'
      - $ref: '#/components/parameters/lineId'
      responses:
        200:
          $ref: '#/components/responses/ReportingResponse'
        401:
          $ref: '#/components/responses/Standard401ErrorResponse'
        404:
          $ref: '#/components/responses/Standard404ErrorResponse'
        500:
          $ref: '#/components/responses/Standard500ErrorResponse'
      security:
      - OauthSecurity:
        - https://opendirect.example.com/scope/example
      summary: Get accounts by account id orders by order id lines by line id stats
      x-summary-source: derived
      operationId: getAccountsByAccountIdOrdersByOrderIdLinesByLineIdStats
      x-operation-id-source: derived
    servers:
    - url: https://opendirect.example.com/v1.5.1
  /gam/orders:
    get:
      tags:
      - Reporting
      summary: Gam List Orders
      description: 'List recent GAM orders directly from the ad server.


        Args:

        limit: Maximum number of orders to return (default 50)

        agent_created_only: If true, return only orders created by the agent

        (deals whose stored record carries a gam_order_id link)


        Requires GAM_ENABLED=true, GAM_NETWORK_CODE, GAM_JSON_KEY_PATH in .env.'
      operationId: gam_list_orders_gam_orders_get
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 50
          title: Limit
      - name: agent_created_only
        in: query
        required: false
        schema:
          type: boolean
          default: false
          title: Agent Created Only
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Api-Key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Gam List Orders Gam Orders Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /gam/report:
    get:
      tags:
      - Reporting
      summary: Gam Delivery Report
      description: 'Pull a delivery report from GAM by order ID(s).


        Args:

        order_ids: Comma-separated numeric GAM order IDs

        days: Look-back window in days (default 30)


        Returns order metadata, line items, and delivery data (impressions,

        clicks, revenue). Requires GAM_ENABLED=true, GAM_NETWORK_CODE,

        GAM_JSON_KEY_PATH in .env.'
      operationId: gam_delivery_report_gam_report_get
      parameters:
      - name: order_ids
        in: query
        required: true
        schema:
          type: string
          title: Order Ids
      - name: days
        in: query
        required: false
        schema:
          type: integer
          default: 30
          title: Days
      - name: authorization
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Authorization
      - name: X-Api-Key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Api-Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Gam Delivery Report Gam Report Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Reporting:
      required:
      - Clicks
      - ImpressionsServed
      - ReportDate
      properties:
        Clicks:
          description: The number of clicks to date. The value must be zero if no clicks have occurred.
          type: integer
        CTR:
          description: The click through rate to date. The formula to calculate CTR is (clicks / impressions) * 100.
          type: number
        ImpressionsServed:
          description: The number of impressions served to date. The value must be zero if no impressions have been served.
          type: integer
        ReportDate:
          description: The data and time of the report. The date and time is reported in the order’s time zone.
          type: string
          format: date-time
        Spend:
          description: The amount spent to date.
          type: number
    Errors:
      type: array
      items:
        $ref: '#/components/schemas/Error'
    Error:
      type: object
      required:
      - ErrorCode
      - ErrorMessage
      properties:
        ErrorCode:
          type: string
        ErrorMessage:
          type: string
        Context:
          type: object
        Link:
          type: string
  responses:
    Standard500ErrorResponse:
      description: Unexpected error occurred
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
          example: "{\n  \"ErrorCode\": \"internalError\",\n  \"ErrorMessage\": \"Unexpected error occurred\"\n}\n"
    ReportingResponse:
      description: Reporting resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Reporting'
          example: "{\n  \"Clicks\": 32573,\n  \"CTR\": 7.54,\n  \"ImpressionsServed\": 432009,\n  \"ReportDate\": \"2014-12-05T06:00:00.000Z\",\n  \"Spend\": 371523.41\n}\n"
    Standard404ErrorResponse:
      description: Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
          example: "{\n  \"ErrorCode\": \"notFound\",\n  \"ErrorMessage\": \"Requested resource is not found\"\n}\n"
    Standard401ErrorResponse:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
          example: "{\n  \"ErrorCode\": \"unauthorized\",\n  \"ErrorMessage\": \"You are not authorized to use this service\"\n}\n"
  parameters:
    accountId:
      name: accountId
      in: path
      required: true
      x-example: '23873345'
      schema:
        type: string
        maxLength: 36
    orderId:
      name: orderId
      in: path
      required: true
      x-example: '1235872'
      schema:
        type: string
        maxLength: 36
    lineId:
      name: lineId
      in: path
      required: true
      x-example: '345233'
      schema:
        type: string
        maxLength: 36
  securitySchemes:
    OauthSecurity:
      type: oauth2
      flows:
        implicit:
          scopes:
            https://opendirect.example.com/scope/example: Example scope
          authorizationUrl: https://opendirect.example.com/connect/authorize
      description: Example of one of OAuth 2.0 authorization flow that can be used according to specification.
x-refined-from:
- iab-tech-lab-buyer-agent-openapi.json
- iab-tech-lab-opendirect-1-5-1-swagger.yaml
- iab-tech-lab-seller-agent-openapi.json