---
title: "Claim Entitlement"
method: POST
path: "/iap/claim-entitlement/"
tags: ["Entitlements"]
---

# Claim Entitlement

`POST /iap/claim-entitlement/`

Transfers an existing StoreKit entitlement to the calling user. Used when an Apple ID's StoreKit subscription is owned by a different ZeroSettle account and needs to be moved to the current account (account migration, support flows, sandbox testing). The backend verifies the supplied JWS, revokes the entitlement from the previous owner, and grants it to `user_id` in a single atomic transaction.

## Request body

- object
  - `jws_representation` string, required — The StoreKit 2 transaction's JWS representation string for the entitlement being claimed.
  - `user_id` string, required — The external user ID that should receive the entitlement.

## Response `200`

Claim processed

- object
  - `status` string, required
  - `claimed` boolean, required — True if the entitlement was transferred to the current user. False when the entitlement already belonged to the current user (no-op).
  - `product_id` string — Reference ID of the claimed product. Present when `claimed` is true.
  - `original_transaction_id` string — StoreKit `originalTransactionId` of the claimed entitlement. Present when `claimed` is true.

## Other responses

- `400` — Bad request — missing required field, or the entitlement is a consumable and cannot be claimed.
- `401` — JWS verification failed against Apple's root certificate chain, or API key invalid.
- `404` — No entitlement to claim — the JWS does not correspond to a known ZeroSettle entitlement.

---

[API](https://skmtc.net/zerosettle/apis/zerosettle-iap-api.md) · [All operations](https://skmtc.net/zerosettle/apis/zerosettle-iap-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zerosettle/zerosettle-iap-api/versions/1a7aa12f3d5e/schema)
