---
title: "Buy a tiered prepaid API key with USDC, USDT, or BTC (no auth required)"
method: POST
path: "/v1/keys/purchase"
tags: ["Agent Onboarding"]
---

# Buy a tiered prepaid API key with USDC, USDT, or BTC (no auth required)

`POST /v1/keys/purchase`

## Request

- Base URL: `https://api.insumermodel.com`
- URL: `https://api.insumermodel.com/v1/keys/purchase`
- Auth: none required

Email-based tiered key purchase: send the tier-specific amount in USDC/USDT/BTC to the platform wallet (EVM USDC/USDT: `0xAd982CB19aCCa2923Df8F687C0614a7700255a23` — same on all chains; Solana USDC/USDT: `6a1mLjefhvSJX1sEX8PTnionbE9DqoYjU6F6bNkT4Ydr`; Bitcoin BTC: `bc1qg7qnerdhlmdn899zemtez5tcx2a2snc0dt9dt0`), then call this endpoint with the transaction hash, your email, and the tier you paid for. Returns an API key valid for 30 days at the tier's daily limit and credit allocation. Fixed pricing: Pro = $29 (10000 requests/day, 1,000 attest credits), Enterprise = $99 (100000 requests/day, 5,000 attest credits), the same allocation as the card subscription (POST /v1/keys/checkout). One-month prepaid; to renew, call this endpoint again with a new payment. For pay-what-you-want credit purchases without a fixed tier or expiry, see POST /v1/keys/buy (wallet-native, agent-friendly). Crypto sent on unsupported chains cannot be recovered. All purchases are final and non-refundable. Tron is NOT supported on this endpoint (only EVM, Solana, Bitcoin). **Response envelope note**: this endpoint stands apart from the main router and returns a flat `{success, key, ...}` object — NOT the `{ok, data, meta}` envelope used by the main `/v1/*` router. Its error responses (400, 405, 409, 422) are likewise flat `{"error": "..."}` objects, matching POST /v1/keys/create.

## Request body

- object
  - `tier` 'pro' | 'enterprise', required: Pricing tier. Pro = $29, Enterprise = $99 (USD-equivalent for BTC payments).
  - `email` string, email, required: Owner email for account recovery and renewal reminders.
  - `appName` string, required: Name for this API key (e.g., your app or service name).
  - `txHash` string, required: Transaction hash proving payment of the tier-specific amount.
  - `chainId` union, required: EVM chain ID, or 'solana' / 'bitcoin'. Tron not supported on this endpoint.
    - integer
    - 'solana' | 'bitcoin'

## Response `200`

API key created with 30-day validity at the tier's limits

- object: Flat response — not wrapped in {ok, data, meta} envelope.
  - `success` true
  - `key` string: Your new API key (store securely — shown only once).
  - `tier` 'pro' | 'enterprise'
  - `dailyLimit` integer: Pro = 10000, Enterprise = 100000.
  - `apiKeyCredits` integer: Initial attestation credits. Pro = 100, Enterprise = 500.
  - `expiresAt` string, date-time: ISO 8601 timestamp 30 days from purchase. Key stops authenticating after this.
  - `validDays` 30

## Other responses

- `400`: Validation error (missing fields, invalid tier, malformed email, unsupported chainId)
- `405`: Method not allowed (only POST supported)
- `409`: Transaction hash already used (replay protection)
- `422`: On-chain verification failed (wrong amount, wrong recipient, tx not found, insufficient confirmations)
- `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.

---

[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)
