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. '