---
title: "Confirm a USDC payment and receive bearer token (nonce required)"
method: POST
path: "/api/payment/confirm"
tags: ["Payment"]
---

# Confirm a USDC payment and receive bearer token (nonce required)

`POST /api/payment/confirm`

Verifies the USDC Transfer event on-chain via Base RPC and
mints a tf_live_ bearer token tied to the credit balance.
Both `tx_hash` and `nonce` are required (the legacy no-nonce
path is closed to prevent public-mempool tx sniping). The
on-chain sender of the verified tx MUST match the
sender_wallet bound to the quote at /api/payment/buy-credits;
a mismatch returns `{ ok: false, error: "sender_mismatch" }`.

## Request body

- object
  - `tx_hash` string, required
  - `nonce` string, required — The memo returned from /api/payment/buy-credits.

## Response `200`

Bearer token + credit balance.

- object

## Other responses

- `400` — Possible errors include `nonce_required`, `quote_not_found_or_expired`, `quote_expired`, `sender_mismatch`, `tx_already_claimed`, `verification_failed`.

---

[API](https://skmtc.net/tensorfeed/apis/tensorfeed-api.md) · [All operations](https://skmtc.net/tensorfeed/apis/tensorfeed-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tensorfeed/tensorfeed-api/revisions/017e10130065/schema)
