Skai (Kenshoo) Asynchronous Reports API

The Asynchronous Reports API from Skai (Kenshoo) — 5 operation(s) for asynchronous reports.

Operations 5

POST /api/v1/reports/async/existing_report/{report_id} Configure and run any existing report by ID #
GET /api/v1/reports/async/{execution_id}/status Poll report execution status #
POST /api/v1/reports/async Configure and run a Fusion/Structure report (deprecated) #
POST /api/v1/reports/async/analysis Configure and run an analysis grid report (recommended) #
GET /api/v1/reports/async/{execution_id} Download completed report file #

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/skai-kenshoo-asynchronous-reports-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 email required.

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

OpenAPI Specification

skai-kenshoo-asynchronous-reports-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Skai Asynchronous Reports API
  description: "# Overview\nSkai APIs provide programmatic access to advertising data and campaign management across Search, Social, and Retail Media publishers.\n\n## Choosing the Right API\n\n| What you want to do | API to use | Scale | Notes |\n|---|---|---|---|\n| Pull performance data, metrics, or any reportable field | [Reporting](#tag/Synchronous-Reports) or [Async Reporting](#tag/Asynchronous-Reports) | Unlimited | Primary data access API — the main Skai value-prop |\n| Discover what columns and metrics are available | [Available Columns](#operation/getAvailableColumns) | — | Full list of reportable fields per entity type |\n| Create or update campaigns, keywords, bids, budgets, targeting, and more — at scale | [Bulk Update (One File)](#tag/Bulk-Update) | Millions of rows | Supports Skai's main entity types and hundreds of attributes; all publishers except Meta |\n| Create/update a small number of campaigns or ad groups (common attributes only) | [Campaigns](#tag/Campaigns) / [Ad Groups](#tag/Ad-Groups) / [Ads](#tag/Ads) | Thousands | Limited attribute set — use Bulk Update for full control |\n| Manage Meta (Facebook/Instagram) entities | [Meta Campaigns](#tag/Meta-Campaigns) / [Meta Ad Groups](#tag/Meta-Ad-Groups) / [Meta Ads](#tag/Meta-Ads) | Thousands | Meta-specific tag and attribution management |\n| Use Skai from an AI coding assistant (Claude, Cursor, ChatGPT, Windsurf) | [MCP Integration](#tag/MCP) | — | Full reporting access via natural language |\n\nSkai APIs are RESTful and language agnostic. Authentication uses Bearer tokens over HTTPS.\n\n## What Data Can I Access?\n\nSkai aggregates advertising data across three publisher categories:\n\n| Publisher category | Examples |\n|---|---|\n| **Search** | Google Ads, Microsoft Ads, Yahoo Japan, Baidu, and others |\n| **Social (excl. Meta)** | Pinterest, Snapchat, TikTok, LinkedIn, Reddit, and others |\n| **Social (Meta)** | Facebook, Instagram |\n| **Retail Media** | Amazon Ads, Walmart, Instacart, Kroger, Target, and 100+ others |\n\n**Reportable entity types:**\n\n| Entity | Description | Publishers |\n|---|---|---|\n| `CAMPAIGN` | Campaign-level data | All |\n| `ADGROUP` | Ad group / ad set level | All |\n| `KEYWORD` | Keyword-level performance and settings | Search, Retail Media |\n| `AD` | Individual ad creatives | All |\n| `PRODUCT_ASSET` | Product-level data for shopping and retail media (called \"Products\" in the Skai UI) | Retail Media, Search Shopping |\n| `PRODUCT_TARGETING` | Product targeting entities — ASINs, categories, and product attributes | Retail Media |\n| `PORTFOLIO` | Portfolio-level budget aggregations and pacing | All |\n\n**Available metric categories per entity:**\n\n- **Performance** — Impressions, Clicks, Cost, Conversions, Revenue, ROAS, CTR, CPC, and more\n- **Attributes** — Names, statuses, budgets, bids, targeting settings, and publisher-specific fields\n- **Account-configured** — Dimensions (custom tagging labels), Conversion events (publisher, pixel, and 3rd-party), Custom Metrics (formula-based calculations your team defines)\n\nUse [Available Columns](#operation/getAvailableColumns) to see the complete column list for any entity — including full descriptions and types. A static reference is embedded in that endpoint's documentation.\n\n\n## Authentication\nThe Skai API uses the Bearer authentication scheme.\nThe first step is to generate a *refresh token* (once), which you can then exchange for a temporary *access token*, programmatically, before making an API call.\n\n> Note: The user you use to generate your *refresh token* will determine the token's permissions. API access is allowed for users with Standard role or higher.\nIt is recommended that you create and use a specialized user for your API requests.\n\n\n#### Step 1: Get a Refresh Token\nYou only need to do this once, for each API user you plan to use. \n\nLog into [this page](https://login.kenshoo.com/api/dev/refresh-token) in order to get your *refresh token* and *client ID*. The user you log in with will be the user accessing the API. \nPlease store your refresh token in a secure place. While it is not possible to recover a refresh token, you can generate a new one. The refresh token does not expire.\n\n\n#### Step 2: Generating an Access Token\nBefore making API calls, your code uses the permanent *refresh token* to generate a temporary *access token*.\n\nMake a call to /api/v1/token (as shown below) with your *refresh token* and *client ID* to generate an *access token*:\n\n    curl -X POST -d \"refresh_token=<YourToken>&client_id=<Your Client Id>\" \\\n    https://services.kenshoo.com/api/v1/token\n\nNote: the client_id and refresh token should be sent in the POST request body, as the refresh token is confidential and should not be sent as url param.\nthe API will reject refresh tokens sent in url params.\n\nGet token for specific agency context:\nIn case your API user is assigned to multi accounts (agencies), you should explicitly specify in the get access-token request which agency context you would like to receive the token for.\nJust add to the request mentioned above another form param called *agency_id*, and pass the relevant agency ID like this:\n    \n    curl -X POST -d \"refresh_token=<YourToken>&client_id=<Your Client Id>&agency_id=<Your Agency Id>\" \\\n    https://services.kenshoo.com/api/v1/token\n\nToken expiration:\nPlease check for token expiration before sending another API request , you have 2 options:\n\n1. Call the API and get 401 status code indicating authentication failed.\n2. Consider the *expires_in* field of the token to issue a new access token.\n\nThe response will return a JSON containing the token and time for expiration in seconds.\nIt is recommended to use the token expiration time and reuse tokens while they are still valid, to prevent rate limit issues with generating new tokens too often.\n\n    {\"email\":\"my.user@skai.io\",\"expires_in\":21600,\"access_token\":\"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzaGxvbWkuY29oZW5Ac2thaS5pbyIsImV4cCI6MTcxNDU2NjgxMSwiaXNzIjoiaHR0cDovL2tlbnNob28uY29tL2xvZ2luLXNlcnZlciIsInVzZXJpZCI6MzU5NDMsImFnZW5jeUlkIjoxNSwibmFtZSI6IlNobG9taSBDb2hlbiIsInJvbGVzIjpbIktlbnNob28gQWRtaW4iLCJTa2FpIERldmVsb3BlciJdLCJhZ2VuY3lfcm9sZXMiOlt7ImFnZW5jeUlkIjoxNSwicm9sZSI6IktlbnNob28gQWRtaW4ifV0sImJpbGxpbmdJZCI6OTIwMzEsImFwaWMiOiI5MjAzMSIsIm9yaSI6ImFwaSIsImFsbG93ZWRfYXBwcyI6W119.R3tHoaecUrMGzijnF5suo9SVsffXWbWxdMv5fdB3Jx8\"}\n\n\n\n\n\n#### Step 3: Making an API call\nWith any API call to all Skai APIs, you must send a valid *access token* in the Authorization header when making requests. For example:\n\n    curl -H \"Authorization: Bearer <token>\" -X POST \\\n    https://services.kenshoo.com/api/v1/campaigns\n\n\n## Rate Limits\nAPI calls are limited per user, to the following:\n  - 60 requests per minute\n  - 2,000 requests per hour\n\nWhen you meet the limit, you receive the following 429 HTTP error: “API rate limit exceeded”.\nWhen calling any API endpoint the response headers will show the limits relevant to this user, and the number of remaining calls you can make within the current minute/hour.\n\n\n## Reporting Best Practices\n\n- **Filter for non-zero data:** For performance reports, filter to rows where a key metric (e.g., impressions > 0) to reduce report size and speed up generation.\n- **Scope structure reports:** Apply a filter like \"Last updated > X days ago\" to retrieve only recently changed entities.\n- **Use Async for large datasets:** If your report may return more than a few thousand rows, use [Async Analysis Reports](#tag/Asynchronous-Reports) and poll for results rather than the synchronous endpoint.\n\n\n## Group by and Segmentation\n### Understanding Group by and Segmentation\nWhen querying the /api/v1/reports/async/analysis and /reports endpoints, the breakdown_type parameter\ndetermines how data is structured.\n- FLAT: Returns unsegmented data without any grouping.\n- GROUP: Allows data segmentation based on specified columns (e.g., by date).\n- SEGMENT: Enables segmentation by date and an additional column, such as CampaignId.\n\n### How Group by works\nWhen using \"breakdown_type\": \"GROUP\", the group_bys parameter defines how the data is grouped. For instance:\n\"group_bys\": [ { \"name\": \"Day\", \"group\": \"TimeSegment\" } ]\n               This groups data only by date, meaning campaign details won’t be included, similar to what is displayed in the grid export.\n\n| Conv. | Cost | Day        |\n|-------|------|------------|\n|   2   |  100 | 09/29/2024 |\n|   3   |  200 | 09/28/2024 |\n\n### Using SEGMENT for Additional Grouping\nTo segment data by both date and another column (e.g., CampaignId), use \"breakdown_type\": \"SEGMENT\", specifying only the date column under group_bys while including the additional column in fields. Example:\n\"breakdown_type\": \"SEGMENT\",\n\"group_bys\": [ { \"name\": \"Day\", \"group\": \"TimeSegment\" } ],\n\"fields\": [ { \"name\": \"CampaignId\", \"group\": \"ATTRIBUTES\" } ]\n\nThis ensures data is segmented by day while preserving campaign details.\n\n| Campaign ID | Conv. | Cost | Day        |\n|-------------|-------|------|------------|\n| 25000       |   1   |  50  | 09/29/2024 |\n| 25001       |   1   |  50  | 09/29/2024 |\n| 25000       |   2   |  150 | 09/28/2024 |\n| 25001       |   1   |  50  | 09/28/2024 |\n"
  version: 1.0.0
  x-logo:
    url: https://grid.kenshoo.com/resources-frontend/latest/kenshoo_logo/skai-logo-devportal.svg
    backgroundColor: '#FFFFFF'
    altText: Skai
servers:
- url: https://services.kenshoo.com
security:
- BearerAuth: []
tags:
- name: Asynchronous Reports
paths:
  /api/v1/reports/async/existing_report/{report_id}:
    post:
      tags:
      - Asynchronous Reports
      summary: Configure and run any existing report by ID
      description: Trigger a run of an existing report, previously created in the Skai interface, by report ID. This is available for all report types in Skai
      operationId: runAsyncReportById
      parameters:
      - $ref: '#/components/parameters/ks'
      - $ref: '#/components/parameters/useOriginalDeliveryMethod'
      requestBody:
        $ref: '#/components/requestBodies/asyncReportByIdRequest'
      responses:
        201:
          description: Report execution triggered successfully
          headers:
            Location:
              description: 'The `execution_id` of the report will show in this header. Use this ID to poll for the report status or to download the report. The value will be in this format: `https://api.kenshoo.com/v2/reports/runs/rpx-fec94574-152c-4e47-ba57-e5a4029d652e?ks=1234`. In this example, `rpx-fec94574-152c-4e47-ba57-e5a4029d652e` is the `execution_id`.'
              style: simple
              explode: false
              schema:
                type: string
          content:
            application/json:
              schema:
                type: string
                example: The response body will be empty. See the Location header to get the Execution ID
        400:
          description: Invalid report request
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
                    description: Reason for failure
        500:
          description: Server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
  /api/v1/reports/async/{execution_id}/status:
    get:
      tags:
      - Asynchronous Reports
      summary: Poll report execution status
      description: 'After calling the API to trigger a report, the Skai query will begin processing. The runtime may vary between a few seconds and an hour, depending on the scope of the report and the amount of data returned.


        This API call is designed to be run at recurring polling intervals so that you can inquire from the Skai API when the report is ready. A best practice would be to run the report manually a few times to figure out the average run time before deciding on the polling interval you will use.


        For reports that take an average of a few seconds, we recommend using a series of intervals such as 10s, 30s, or 60s. For reports that take an average of a number of minutes or more, we recommend using a series of intervals such as 10m, 20m, or 30m.'
      operationId: getAsyncReportStatus
      parameters:
      - $ref: '#/components/parameters/ks'
      - name: execution_id
        in: path
        description: The execution id received in response to the 'Run a Report' API call.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        200:
          description: Report execution triggered successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    description: "Status description:\n * `COMPLETED` - Your report is ready to download.\n * `COMPLETED_WITH_ERRORS` - The report run was completed but there were some errors during report generation. If this issue persists, please contact Skai support.\n * `PARTIALLY_COMPLETED` - Some data may be missing from the report. If this issue persists, please contact Skai support.\n * `FAILED` - Skai could not run this report. If this issue persists, please contact Skai support.\n * `ABORTED` - Skai had to abort this report run. If this issue persists, please contact Skai support.\n * `FAILED_DATA_NOT_READY` - The data for the requested dates is not yet ready in Skai (this data is pulled into Skai from the publishers and from external vendors). Abort the flow and try again in an hour.\n"
                    enum:
                    - COMPLETED
                    - COMPLETED_WITH_ERRORS
                    - PARTIALLY_COMPLETED
                    - FAILED
                    - ABORTED
                    - FAILED_DATA_NOT_READY
                example:
                  status: COMPLETED
        400:
          description: Invalid request
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
                  errorCode:
                    type: string
                example:
                  errorCode: SCHREP-04
                  errorMessage: No execution found with execution id rxp-12345
        500:
          description: Server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
  /api/v1/reports/async:
    post:
      tags:
      - Asynchronous Reports
      summary: Configure and run a Fusion/Structure report (deprecated)
      description: 'Trigger a Fusion/Structure/Tracking template report run asynchronously.


        **For new integrations, use [POST /api/v1/reports/async/analysis](#operation/asyncAnalysisReport) instead.** This endpoint runs legacy template-based reports, which expose a fixed subset of columns and entity types. It remains fully supported for existing clients — but if you start here, you may find that columns you need later are not available through these templates. The analysis endpoint gives access to the full column set available in the Skai platform.'
      operationId: runAsyncReport
      parameters:
      - $ref: '#/components/parameters/ks'
      requestBody:
        $ref: '#/components/requestBodies/asyncReportRequest'
      responses:
        200:
          description: Report execution triggered successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  run_id:
                    type: string
                    description: Triggered report execution ID
        400:
          description: Invalid report request
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
                    description: Reason for failure
        500:
          description: Server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
  /api/v1/reports/async/analysis:
    post:
      tags:
      - Asynchronous Reports
      summary: Configure and run an analysis grid report (recommended)
      description: "Run a report asynchronously and download the results as a file. Use this instead of [Synchronous Reports](#operation/fetchReport) when your dataset exceeds 1,000 rows, or when you want to avoid blocking on a long-running query.\n\nThe request body uses the same `entity`, `fields`, `date_range`, `filters`, and `sort` structure as the synchronous report endpoint — refer to [Available Columns](#operation/getAvailableColumns) for field names and groups.\n\n#### Workflow\n\n**1. Submit** — this endpoint returns immediately. The `execution_id` is in the `Location` response header:\n```\nLocation: https://api.kenshoo.com/v2/reports/runs/rpx-fec94574-152c-4e47-ba57-e5a4029d652e?ks=1234\n```\nExtract the path segment after `/runs/` — that is your `execution_id`.\n\n**2. Poll for completion** — [GET /api/v1/reports/async/{execution_id}/status](#operation/getAsyncReportStatus)\nPoll until status is `COMPLETED`. Runtime varies from a few seconds to an hour depending on data volume.\n\n**3. Download** — [GET /api/v1/reports/async/{execution_id}](#operation/downloadAsyncReport)\nReturns a compressed file (ZIP or GZIP, set via `compress_method`) containing a CSV with all result rows — no row limit.\n\n#### Key parameters\n\n| Parameter | Required | Description |\n|---|---|---|\n| `entity` | Yes | Entity type to report on (e.g. `CAMPAIGN`, `KEYWORD`) |\n| `fields` | Yes | Columns to include — use names from [Available Columns](#operation/getAvailableColumns) |\n| `date_range` | Yes | `start_date` and `end_date` in `YYYY-MM-DD` format |\n| `profile_id` | Conditional | Required for single-profile columns; use `0` for cross-profile columns only |\n| `info_level` | No | `SUMMARY`, `BREAKDOWN`, or `BOTH` (default: `BOTH`) |\n| `breakdown_type` | No | `FLAT` (default), `GROUP` (segment by date), or `SEGMENT` (date + another column) |\n| `skip_zero_performance_rows` | No | Exclude rows with no performance data (default: `false`) |\n\n#### cURL example\n\n```bash\n# Step 1 — submit the report\ncurl -i -X POST \\\n  'https://services.kenshoo.com/api/v1/reports/async/analysis?ks=<YOUR_KS_ID>' \\\n  -H 'Authorization: Bearer <YOUR_TOKEN>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"entity\": \"CAMPAIGN\",\n    \"profile_id\": 118,\n    \"date_range\": {\"start_date\": \"2026-01-01\", \"end_date\": \"2026-01-14\"},\n    \"fields\": [\n      {\"name\": \"CampaignName\", \"group\": \"ATTRIBUTES\"},\n      {\"name\": \"Clicks\", \"group\": \"PERFORMANCE\"},\n      {\"name\": \"Day\", \"group\": \"TimeSegment\"}\n    ]\n  }'\n# Check the Location response header for your execution_id\n\n# Step 2 — poll until COMPLETED\ncurl 'https://services.kenshoo.com/api/v1/reports/async/<EXECUTION_ID>/status?ks=<YOUR_KS_ID>' \\\n  -H 'Authorization: Bearer <YOUR_TOKEN>'\n# {\"status\": \"COMPLETED\"}\n\n# Step 3 — download the file\ncurl -o report.zip \\\n  'https://services.kenshoo.com/api/v1/reports/async/<EXECUTION_ID>?ks=<YOUR_KS_ID>' \\\n  -H 'Authorization: Bearer <YOUR_TOKEN>'\n```"
      operationId: asyncAnalysisReport
      parameters:
      - $ref: '#/components/parameters/ks'
      requestBody:
        $ref: '#/components/requestBodies/AsyncAnalysis'
      responses:
        200:
          description: Report execution triggered successfully
          headers:
            Location:
              description: 'The `run_id` of the report will show in this header. Use this ID to poll for the report status or to download the report. The value will be in this format: `https://api.kenshoo.com/v2/reports/runs/rpx-fec94574-152c-4e47-ba57-e5a4029d652e?ks=1234`. In this example, `rpx-fec94574-152c-4e47-ba57-e5a4029d652e` is the `execution_id`.'
              style: simple
              explode: false
              schema:
                type: string
          content:
            application/json:
              schema:
                type: string
                example: The response body will be empty. See the Location header to get the Run ID
        400:
          description: Invalid report request
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
                    description: Reason for failure
        500:
          description: Server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
  /api/v1/reports/async/{execution_id}:
    get:
      tags:
      - Asynchronous Reports
      summary: Download completed report file
      description: Once the report status polling produces a COMPLETED status, use this API to download the compressed report file.
      operationId: downloadAsyncReport
      parameters:
      - $ref: '#/components/parameters/ks'
      - name: execution_id
        in: path
        description: The execution id received in response to the 'Run a Report' API call.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/x-zip-compressed:
              schema:
                type: string
                description: The compressed report file.
                format: binary
        404:
          description: Report not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
                example:
                  errorMessage: 'Couldn''t find report by execution token: rpx-8fcf61ce-d3a5-4858-9609-d2e7f1f6110e'
        500:
          description: Server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
components:
  requestBodies:
    asyncReportByIdRequest:
      description: Configuration for the existing report run
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/asyncReportByIdRequest'
      required: true
    AsyncAnalysis:
      description: Create async analysis report
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AsyncAnalysis'
      required: true
    asyncReportRequest:
      description: The report request to create
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/asyncReportRequest'
      required: true
  parameters:
    useOriginalDeliveryMethod:
      name: useOriginalDeliveryMethod
      in: query
      description: Set this parameter to true for the report to be delivered to its original destination (the one that is set in the report configuration in Skai, e.g. an email address or an FTP location)
      required: false
      style: form
      explode: true
      schema:
        type: boolean
      example: 'true'
    ks:
      name: ks
      in: query
      description: The KS to refer the request to. You can find this ID in the Skai platform under _Administration_ -> _About Skai_ -> _Server ID_
      required: true
      style: form
      explode: true
      schema:
        type: string
      example: '1234'
  schemas:
    FusionReportTemplateName:
      type: string
      description: One of the available Fusion Reports.
      enum:
      - 'Fusion: Profiles'
      - 'Fusion: Channels'
      - 'Fusion: Campaigns'
      - 'Fusion: Campaigns by Device'
      - 'Fusion: Adgroups'
      - 'Fusion: Ads'
      - 'Fusion: Keywords'
      - 'Fusion: Keywords by Device'
      - 'Fusion: Keywords with Content and PLA'
      - 'Fusion: Dynamic Ad Targets'
      - 'Fusion: Product Groups'
      - 'Fusion: Sitelinks'
      - 'Fusion: Audiences'
      - 'Fusion: Audiences by Device'
    ReportEntity:
      type: string
      description: The base entity for the report, indicated in the analysis grid name. Important - When using the API for product grids, refer to the entity as "PRODUCT_ASSET".
      enum:
      - CAMPAIGN
      - ADGROUP
      - KEYWORD
      - AD
      - PORTFOLIO
      - PRODUCT_ASSET
      - LOCATIONS
      - NEGATIVE_KEYWORDS
      - SITELINK
      - CREATIVE_ASSET
      - PRODUCT_TARGETING
      - ASSET_GROUP
    asyncReportTrackingField:
      type: string
      description: "\n<style>\n  table th:first-of-type {width: 25%;}\n  table th:nth-of-type(2) {width: 35%;}\n  table th:nth-of-type(3) {width: 5%;}\n  table th:nth-of-type(4) {width: 35%;}\n</style>\n\n| Field name              | Reports the field is available in                                                                                         | Data type    | Description                                                                                                                                                                                      |\n|-------------------------|---------------------------------------------------------------------------------------------------------------------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `Event_Time`            | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Flat P2C                                                   | DATETIME     | Time of the tracked event, in the time zone of the profile<br>Format: `yyyy-MM-dd HH:mm:ss`<br>Example: `2026-01-01 00:00:00`                                                                      |\n| `Date`                  | Tracking Raw Data - Keywords Daily Performance                                                                            | DATE         | Date of the event that created performance data<br>Format: `yyyy-MM-dd`<br>Example: `2026-01-01`                                                                                                   |\n| `User_ID`               | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Flat P2C                                                   | TEXT(100)    | A unique ID given to the user who clicked the ad<br>Example: `47e36981-ec4f-44c7-9304-4ed30dbedbd7`                                                                                              |\n| `Profile`               | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance<br>Tracking Raw Data - Flat P2C | TEXT(50)     | Profile name in Skai<br>Example: `ACME Brand`                                                                                                                                                 |\n| `Profile_ID`            | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance<br>Tracking Raw Data - Flat P2C | INT          | Profile ID in Skai<br>Example: `102`                                                                                                                                                          |\n| `Channel`               | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance<br>Tracking Raw Data - Flat P2C | TEXT(50)     | Name of the publisher<br>Example: `Google`                                                                                                                                                       |\n| `Campaign`              | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance<br>Tracking Raw Data - Flat P2C | TEXT(255)    | Campaign name in Skai<br>Example: `ACME Brand Clothing`                                                                                                                                       |\n| `Campaign_ID`           | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance                                 | BIGINT       | Campaign ID in Skai<br>Example: `1123`                                                                                                                                                        |\n| `Campaign ID KS Unique` | Tracking Raw Data - Flat P2C                                                                                              | BIGINT       | Campaign ID in Skai<br>Example: `1123`                                                                                                                                                        |\n| `Campaign_ID_In_Target` | Tracking Raw Data - Flat P2C                                                                                              | BIGINT       | Campaign ID in the publisher<br>Example: `121270991`                                                                                                                                             |\n| `Ad_Group`              | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance<br>Tracking Raw Data - Flat P2C | TEXT(256)    | Name of the ad group<br>Example: `Northwest Region Trucks`                                                                                                                                       |\n| `Adgroup_ID`            | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance                                 | BIGINT       | Ad group ID in Skai<br>Example: `2124`                                                                                                                                                        |\n| `Ad Group ID KS Unique` | Tracking Raw Data - Flat P2C                                                                                              | BIGINT       | Ad group ID in Skai<br>Example: `2124`                                                                                                                                                        |\n| `Ad_Group_ID_In_Target` | Tracking Raw Data - Flat P2C                                                                                              | BIGINT       | Ad group ID in the publisher<br>Example: `15782818485`                                                                                                                                           |\n| `Keyword`               | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance<br>Tracking Raw Data - Flat P2C | TEXT(4096)   | Keyword text<br>Example: `Small Hybrid Cars`                                                                                                                                                     |\n| `Keyword_ID`            | Tracking Raw Data - Click Tracking Data<br>Tracking Raw Data - Keywords Daily Performance                                 | BIGINT       | Tracking ID of the keyword in Skai<br>Example: `1123`                                                                                                                                         |\n| `Keyword ID KS Unique`  | Tracking Raw Data - Flat P2C                                                                                              | BIGINT       | Keyword ID in Skai<br>Example: `1234`                                                                                                                                                         |\n| `KW_Tracking_ID`        | Tracking Raw Data - Flat P2C                                                                                              | BIGINT

# --- truncated at 32 KB (222 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/skai-kenshoo/refs/heads/main/openapi/skai-kenshoo-asynchronous-reports-api-openapi.yml