---
title: "Present Link Token"
method: POST
path: "/iap/identities/reconcile/"
tags: ["Identity"]
---

# Present Link Token

`POST /iap/identities/reconcile/`

## Request

- Base URL: `https://api.zerosettle.io/v1`
- URL: `https://api.zerosettle.io/v1/iap/identities/reconcile/`
- Auth: API key in header `X-ZeroSettle-Key`

Called by the SDK (`reconcile(linkToken:)`) to finish a guest-to-account move with a link token your server signed. Authenticated with the publishable key.

The token is single use. It is spent when presented, even if the reconcile is refused. A `429` does not spend it. Limits: the project reconcile limits (300 a minute and 50,000 a day, counted apart from the secret-key endpoint), and 5 presentations an hour for the same `from` id. That per-id limit fails closed: if the rate-limit store is unavailable the call returns `429` with `Retry-After: 5`.

A merge sends an `identity.reconciled` webhook with `actor` of `link_token`.

## Request body

- object
  - `link_token` string, required: The token from Create Link Token or your own signing.

## Response `200`

The ids were reconciled.

- ReconcileResponse
  - `reconciliation_id` integer: The id of the reconciliation record.
  - `from` string: The id that was merged away.
  - `into` string: The id that kept the purchases.
  - `moved` object
    - `transactions` integer: Transactions moved. `0` when only analytics moved.
    - `entitlements` integer: Entitlements moved. `0` when only analytics moved.

## Other responses

- `400`: `invalid_request`. `link_token` is missing or not a string.
- `401`: `invalid_link_token`: the token is malformed, has a bad signature, is expired, was already used, or is for the other environment. An invalid publishable key is also `401`, in the standard error shape.
- `409`: `reconcile_refused`. Nothing moved and the token is spent.
- `429`: `rate_limited`. The token is not spent.

## Changes

- **2026-10-26** `8b59573fcc02`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zerosettle/apis/zerosettle-iap-api/changes/iap/identities/reconcile/post.md)

---

[API](https://skmtc.dev/zerosettle/apis/zerosettle-iap-api.md) - [All operations](https://skmtc.dev/zerosettle/apis/zerosettle-iap-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zerosettle/apis/zerosettle-iap-api/revisions/4cd9e227d9b8?raw)
