Confirm Receipt

The in-app way for a receiver to claim a player-to-player send. The receiver confirms in their own app with a device signature instead of typing a claim code. This applies to sends only — a self-transfer has no second person to confirm.

POST

/api/sdk/send/{id}/confirm-receipt

Receiver confirms an incoming send; the funds are credited and the send completes

Authenticated with the RECEIVER's player token

The token is minted by the receiving game for the receiver. The receiver's enrolled phone must match the one the send was addressed to.

Authorization: Bearer <receiver's player token>

Request Body

ParameterTypeRequiredDescription
device_fingerprintstringYesWhich enrolled device is confirming
device_signalobjectYesSignature over the action — see Device Enrollment
biometric_verifiedbooleanIf stepped upHonest result of the step-up, when required

Success Response

{
  "status": "completed",
  "transaction_id": "TX_send789",
  "amount_received": "90.00"
}

How the receiver discovers an incoming send

The receiver's app polls GET /api/sdk/transfers/pending. An incoming send appears as an item withkind: "receiving_confirm" (amount, source game, expiry). Render the confirm prompt from that, then call this endpoint.

Other responses to handle

StatusMeaning / what to do
403 not_intended_receiverThis player/phone isn't the addressed recipient
404 receiving_tenant_unavailableThe receiving game can't be resolved right now — retry shortly
409 receiver_not_enrolled_use_claim_codeNo account in the receiving game yet — fall back to the claim-code flow
400 no_registered_device_keyThis receiver has no enrolled device key — register the device first (Device Enrollment)
202 STEP_UP_REQUIREDMay be returned when risk step-up is enabled for your game — run biometric / PIN, then retry with biometric_verified: true. A no-op when the flag is off.
503 sdk_verification_disabledIn-app verification is off (feature / flag) for this game — fall back to the claim-code flow
401 SIGNAL_*Bad/stale/replayed signature — re-sign with a fresh device_signal
400 (cannot be confirmed)Already resolved — treat as "already done"

Receivers without the app are unaffected

A receiver who isn't enrolled (no account/app in the receiving game) simply uses the existing claim-code flow — the send still completes. In-app confirm is the upgrade for enrolled receivers, not a requirement for everyone.