---
title: "Buy verification credits with USDC, USDT, or BTC"
method: POST
path: "/v1/credits/buy"
tags: ["Agent Onboarding"]
---

# Buy verification credits with USDC, USDT, or BTC

`POST /v1/credits/buy`

## Request

- Base URL: `https://api.insumermodel.com`
- URL: `https://api.insumermodel.com/v1/credits/buy`
- Auth: one of:
  - API key in header `X-API-Key`
  - API key in header `Authorization`

Purchase verification credits by sending USDC, USDT, or BTC to the platform wallet (EVM USDC/USDT: `0xAd982CB19aCCa2923Df8F687C0614a7700255a23` — same on all chains; Solana USDC/USDT: `6a1mLjefhvSJX1sEX8PTnionbE9DqoYjU6F6bNkT4Ydr`; Bitcoin BTC: `bc1qg7qnerdhlmdn899zemtez5tcx2a2snc0dt9dt0`; Tron USDT-TRC20: `TC5yvwkAMakkXtUxYiu2Yn1xbBcwYuD6cn`) and providing the transaction hash. Volume discounts: $5–$99 = 25 credits/$1 ($0.04/call), $100–$499 = 33 credits/$1 ($0.03/call, 25% off), $500+ = 50 credits/$1 ($0.02/call, 50% off). USDC and USDT accepted on EVM chains and Solana (auto-detected from transaction). USDT-TRC20 accepted on Tron. BTC accepted on Bitcoin (converted to USD at market rate, requires 1 confirmation). Crypto sent on unsupported chains cannot be recovered. All purchases are final and non-refundable. Sender verification: the first purchase registers the sender wallet address to the API key. Subsequent purchases must come from the same sender wallet. To change the registered wallet, include `"updateWallet": true` — the verified transfer from the new address proves ownership. `updateWallet` is ignored for wallet-auth callers (the SIWE signer is already bound to the registered wallet, and the soulbound pass cannot follow a wallet rotation). Authentication: this endpoint accepts EITHER the X-API-Key header OR the Authorization: Wallet header (SIWE envelope from a wallet that holds the Insumer Access pass). Wallet-auth callers let an SBT-holding agent top up without ever handling an API key.

## Request body

- object
  - `txHash` string, required: Transaction hash proving payment
  - `chainId` union, required: Chains supported for crypto payments. EVM chains and Solana accept USDC and USDT. Bitcoin accepts BTC (converted to USD at market rate, requires 1 confirmation). Tron accepts USDT-TRC20.
    - 1 | 8453 | 137 | 42161 | 10 | 56 | 43114
    - 'solana' | 'bitcoin' | 'tron'
  - `amount` number: Stablecoin amount sent (min 5). Not required for BTC.
  - `updateWallet` boolean: Set true to replace the registered sender wallet with this transaction's sender

## Response `200`

Credits purchased

- object
  - `ok` true
  - `data` object
    - `creditsAdded` integer
    - `totalCredits` integer
    - `usdcPaid` string
    - `effectiveRate` string: Effective USD cost per credit for this purchase (e.g. "$0.0400/credit").
    - `chainName` string
  - `meta` Meta
    - `version` string
    - `timestamp` string, date-time

## Other responses

- `400`: Validation error
- `401`: Invalid or missing API key
- `403`: Transaction sender does not match the wallet registered to this API key (include updateWallet: true to re-register)
- `409`: Transaction already used
- `422`: On-chain verification failed
- `429`: Rate limit exceeded. API-key requests count against the key's daily limit; every authenticated response carries X-RateLimit-Limit and X-RateLimit-Remaining headers, and a 429 additionally carries Retry-After (seconds until the window resets).
- `500`: Unexpected server error. Safe to retry; no credits are charged on a 500. Router endpoints return the standard error envelope; standalone endpoints (the ones whose 200 is a flat object) return a flat {"error": "..."} object.
- `503`: On-chain verification temporarily unavailable. Retry in a few seconds.

---

[API](https://skmtc.dev/insumermodel/apis/insumerapi.md) · [All operations](https://skmtc.dev/insumermodel/apis/insumerapi/llms.txt) · [OpenAPI document](https://skmtc.dev/insumermodel/apis/insumerapi/revisions/91f56fe9e3d8?raw)
