Resolve a mobile open
Resolve an installed or deferred mobile link with an app-scoped mobile publishable key.
POST https://biq.li/api/v1/track/open resolves an iOS or Android open for one registered Mobile App. A successful response can contain an exact match, a probabilistic iOS match, or no match.
Authentication
Send the Mobile App’s public, app-scoped key:biqli_pk_... browser key or a biqli_... secret workspace API key. The key must belong to the appId in the body.
Required headers
Request body
attestation value. Do not advertise device-attestation enforcement until Biqli documents an active contract.
Example request
Matched response
No-match response
No match is a successful200 response:
Matching behavior
handoffToken and deepLink identify different links, the API returns 422 handoff_mismatch.
For a matched first open, the first accepted install attribution is immutable. A later firstOpen: true request for the same app instance returns the original accepted result.
Idempotency
The endpoint de-duplicates within the Mobile App by eithereventId or the hashed Idempotency-Key. Repeating either identifier with the identical validated request returns the stored result and creates no second open event. Reusing either identifier with different request data returns 409 idempotency_conflict.
Persist the event ID, request ID, idempotency key, and complete body together before sending. A retry must not regenerate only part of that set.
Rate limits
Default one-minute limits are 3,000 requests per Mobile App, 120 per source address, 30 per app instance, and 20 per handoff token. Additional abuse protection applies to repeated invalid-token attempts. A429 response includes Retry-After; wait at least that many seconds and retry with the same idempotent request.
Errors
Errors produced after the mobile resolver accepts the endpoint containerror.code, error.message, and requestId; the same safe request ID is
returned in X-Biq-Request-Id. The method guard and unexpected-failure handler
use the standard API envelope with request_id instead. Read either request-ID
spelling when implementing a direct client.
429, and 5xx with bounded backoff and the identical idempotent request. Correct other errors before retrying.
Receipts and caching
Matched live responses can include a short-lived signed receipt. Cached SDK results intentionally omit it. Verify a live receipt on a trusted backend by following Attribution receipts. Responses includeCache-Control: no-store and must not be stored by shared HTTP caches.Authorizations
A public app-scoped key beginning with biqli_mobile_pk_. It resolves mobile opens for one registered Mobile App and grants no workspace-management access.
Headers
Stable identity for this exact request. Reuse only with the identical canonical body.
8 - 100^[A-Za-z0-9._~-]+$Native platform. Must equal the body platform.
ios, android SDK version. Must equal the body sdkVersion.
1 - 32Caller-generated request identifier returned in the response.
8 - 100^[A-Za-z0-9._~-]+$Body
JSON object no larger than 16 KB and no deeper than 32 levels. Unknown fields are rejected.
8 - 100^[A-Za-z0-9._~-]+$Mobile App ID belonging to the bearer key.
40Random stable identifier for this app installation.
16 - 128^[A-Za-z0-9._~-]+$ios, android Valid only for an eligible iOS first-open request with a verified attached domain.
1 - 32Opaque handoff token. Treat as sensitive and do not log.
128Eligible installed-app HTTPS short URL.
2048Required verified attached hostname for probabilistic matching.
2553232Reserved and not currently enforced.
Response
Resolution completed. A no-match result is also a successful response.

