---
title: "List install records"
method: GET
path: "/installs"
tags: ["Installs"]
---

# List install records

`GET /installs`

## Request

- Base URL: `https://api.warplink.app/v1`
- URL: `https://api.warplink.app/v1/installs`
- Auth: HTTP bearer

Lists the organization's install records, newest first, with stable ids and match details, so you can reconcile them against your own reports or keep a copy. Only matched installs have a record: an attempt that matched nothing is listed by GET /attribution/attempts instead. click_id is null when the match did not carry a click identifier (for example an Android referrer match or an older deferred payload). The device id, the hashed device match key and the stored routing payload are never returned; has_device_id, has_device_fingerprint and has_matched_payload say only whether each one is stored. Requires an API key with the analytics:read or links:read scope. SDK keys are refused with 403 SDK_KEY_ROUTE_FORBIDDEN. Records are filtered by installed_at: from is inclusive and to is exclusive. Retention and the Free plan's 30-day look-back apply as they do to the click export: a Free organization whose from is earlier than the last 30 days gets 403 LOOKBACK_EXCEEDED with details.earliest_allowed, and a from earlier than the plan's data retention is raised to it, which window.from reports. The list is not frozen when a Free organization reaches its click limit. Page with pagination.next_cursor and send the same filters with it. A parameter this endpoint does not accept is a 400 VALIDATION_ERROR.

## Query parameters

- `app_id` union
  - string, uuid
  - 'none'
- `link_id` string, uuid
- `from` string, date-time
- `to` string, date-time
- `limit` integer
- `cursor` string

## Response `200`

One page of install records

- object
  - `data` Install[], required
    - `id` string, uuid, required: Stable install id. The same value the attribution response returned as install_id.
    - `app_id` string, uuid, nullable: The app the install belongs to, or null when it was never determined.
    - `link_id` string, uuid, nullable: The link the install is attributed to. Null after that link is deleted.
    - `click_id` string, uuid, nullable: The click the install was attributed to. Null when the match did not carry a click identifier, for example an Android referrer match or an older deferred payload.
    - `platform` 'ios' | 'android', required
    - `installed_at` string, date-time, required: When the attribution request created the record.
    - `attributed_at` string, date-time, nullable: When the match was recorded. Null on records created before this was stored.
    - `match_type` 'deterministic' | 'probabilistic' | 'null', nullable: How the install was matched.
    - `match_confidence` number, nullable: From 0 to 1. Null on records created before this was stored.
    - `match_guaranteed` boolean, required: True when match_type is deterministic. Branch on this, not on a confidence threshold.
    - `is_reinstall` boolean, nullable: Whether the device had completed attribution before. Null when the SDK did not say.
    - `has_device_id` boolean, required: Whether a device id is stored. The value is never returned.
    - `has_device_fingerprint` boolean, required: Whether a hashed device match key is stored. The value is never returned.
    - `has_matched_payload` boolean, required: Whether the routing the match answered with (destination, deep link, custom parameters) was stored at match time. False on records created before that was stored. The payload is never returned.
  - `pagination` CursorPagination, required
    - `limit` integer, required
    - `has_more` boolean, required
    - `next_cursor` string, nullable, required: Send as cursor, with the same filters, to read the next page. Null on the last page.
  - `window` ExportWindow, required: The window that was read.
    - `from` string, date-time, required: Inclusive. Raised to the start of the plan's data retention when the request asked for older rows.
    - `to` string, date-time, required: Exclusive.

## Other responses

- `400`: Invalid query: an unknown or repeated parameter, a value of the wrong type, a from that is not before to (VALIDATION_ERROR), or a cursor that does not belong to this list (CURSOR_INVALID)
- `401`: Unauthorized
- `403`: Forbidden. An SDK key, a key without the analytics:read or links:read scope, or a Free organization whose from is earlier than its last 30 days (LOOKBACK_EXCEEDED, with details.earliest_allowed)
- `404`: Not found
- `422`: No part of the requested window is within your plan's data retention (RETENTION_WINDOW_UNAVAILABLE)

---

[API](https://skmtc.dev/warplink/apis/warplink-api.md) · [All operations](https://skmtc.dev/warplink/apis/warplink-api/llms.txt) · [OpenAPI document](https://skmtc.dev/warplink/apis/warplink-api/revisions/2a90ae8c44e8?raw)
