SKAdNetwork (SKAN) APIs

Apple SKAdNetwork endpoints: the SKAN aggregated performance report API, the SKAN aggregated postbacks-by-arrival-date API, the conversion-value (CV) schema APIs for advertisers and for ad networks, and the SKAN Conversion Studio configuration API used to read and write conversion-value mapping schemas.

Documentation

Specifications

Other Resources

OpenAPI Specification

appsflyer-skan-aggregated-performance-report-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: SKAN aggregated performance report API
  version: 1.0.0
servers:
- url: https://hq1.appsflyer.com/api/skadnetworks/v3
  description: SKAN v4.0
- url: https://hq1.appsflyer.com/api/skadnetworks/v2
  description: SKAN v3.0
security:
- bearerAuth: []
paths:
  /data/app/{app_id}:
    get:
      tags:
      - SKAN performance report
      summary: Get performance report
      description: "> ⚠️ Important\n>\n> All API V2 tokens generated before March 10, 2026, 19:00 UTC have been revoked. If\
        \ your token was generated before this date, please regenerate it. [Learn how](https://support.appsflyer.com/hc/en-us/articles/360004562377-Managing-AppsFlyer-tokens).\n\
        \n> ℹ️ For the base URL (on the right), select either /v2/ for SKAN V3 or /v3/ for SKAN V4.\n> If you select SKAN\
        \ V4, but results are for SKAN V3 postbacks, the SKAN V4 fields return `null`. \n"
      operationId: skan-agg-performance-report-api-get
      parameters:
      - name: app_id
        in: path
        description: The ID of the app
        required: true
        schema:
          type: string
      - in: query
        name: date_type
        description: "The date type used in the date range bounded by `start_date` and `end_date`\nOptions: \n- [Default]\
          \ `install`: The install date derived by AppsFlyer using the postback arrival time and after considering the measurement\
          \ period.\n- `arrival`: The postback arrival time. Note: Organic install metrics have the value N/A. \nGoogle Ads\
          \ data: The install and arrival dates are the same due to the Google Ads reporting methodology.\n"
        schema:
          type: string
          enum:
          - ''
          - install
          - arrival
      - in: query
        name: start_date
        description: "The install date range is bounded by `start_date` and `end_date`. \nNote! The install date differs from\
          \ the postback arrival date.\n- Earliest install date having format YYYY-MM-DD \n- Earliest date permitted: 2020-11-01\n"
        examples:
          DateOnly:
            summary: Date only
            value: '2020-11-12'
        required: true
        schema:
          type: string
          format: date
      - in: query
        name: end_date
        description: "- Most recent install date having format YYYY-MM-DD \n- Maximum number of days per report call: 90 days\n"
        examples:
          DateOnly:
            summary: Date only
            value: '2020-12-12'
        required: true
        schema:
          type: string
          format: date
      - in: query
        name: view_type
        description: "Filter the installs by type as follows: \n\n- `acquisition`: Installs \n- `retargeting`: Redownloads\n\
          - `unified`: Acquisition and redownloads combined.\n- [Default] `unified`\n- Cost, click, and impression metrics\
          \ return when `view_type=unified`\n"
        schema:
          type: string
          enum:
          - ''
          - acquisition
          - retargeting
          - unified
      - in: query
        name: modeled_conversion_values
        schema:
          type: boolean
        description: '- Only supported from V2

          - If `true`, the postback includes the modeled data when populating the decoded metric columns.  [See available
          field](https://support.appsflyer.com/hc/en-us/articles/360014104157-SKAN-aggregated-performance-report-API#report-structure-and-example)

          - If `false`, the postback presents decoded data as received by raw SKAN postbacks, without modeled data.

          - Default value is `false`.

          '
      responses:
        '200':
          description: "Valid data returned. Contents of CSV file described [here](https://support.appsflyer.com/hc/en-us/articles/360014104157-SKAN-aggregated-performance-report-API#report-structure-and-example)\n\
            *Empty report* - no data found for the specified date range (CSV, only column names are returned).\n  - In the\
            \ SKAdNetwork dashboard, verify that data is available for the specified date range.\n  - Verify that `start_date`\
            \ is a date earlier than yesterday. The earliest recommended date is the current date UTC time, less 3 days. For\
            \ example: If the current date UTC timezone is March 31, the earliest date you should use is March 28. \n"
          content:
            text/plain:
              schema:
                type: string
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                BadRequest:
                  summary: Bad request
                  value: Bad request
                TooManyRequests:
                  summary: Exceeded rate limitation
                  value: Too many requests
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                NotFound:
                  summary: Authorization token is missing or invalid
                  value: Unauthorized
        '403':
          description: "You don't have permission to access this report. If you are an analytics partner ask the advertiser\
            \ to give you permission. \n"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                NoPermission:
                  summary: No permission
                  value: No permission
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                NotFound:
                  summary: Not Found
                  value: Not found
components:
  schemas:
    Error:
      type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: '**Important: API V2 Token Revocation**

        All API V2 tokens generated before March 10, 2026, 19:00 UTC have been revoked. If your token was generated before
        this date, please regenerate it. [Learn how](https://support.appsflyer.com/hc/en-us/articles/360004562377-Managing-AppsFlyer-tokens).


        Token required for authorization. Please refer to [this link](https://support.appsflyer.com/hc/en-us/articles/360004562377)
        for instructions on how to obtain the token.

        '