Kairos Signal · Customer manual

USDC top-ups on Base

Checking current availability. Do not send without a current quote.

Every top-up starts with a quote. The quote supplies the receiving address, the exact amount and the expiry; use that response as your payment instructions. There are two ways to be matched to your account: a verified wallet (sign once, then send from that wallet) or a unique amount (no signature; send exactly the quoted 6-decimal amount from any sender, including an exchange).

Verified wallet

Your API account and sending wallet are linked by a signed challenge before you request a top-up quote.

  1. Register an account. POST /v1/credits/register returns your API key. Keep it private. Use X-API-Key on the requests below.
  2. Request a challenge for your Base wallet.
    POST /v1/credits/crypto/challenge
    {"wallet":"<your EOA address>"}
    The response includes nonce, message and expires_at. Sign the exact returned message with your wallet's EIP-191 personal_sign capability. Do not send your private key or seed to Kairos.
  3. Submit the signature.
    POST /v1/credits/crypto/verify
    {"nonce":"<returned nonce>","signature":"0x<signature>"}
    The signature is bound to kairossignal.com, Base, your account, a one-time nonce and an expiry. It authorizes wallet attribution only, not a transfer. Continue only after status: verified.
  4. Request a quote.
    POST /v1/credits/topup
    {"method":"usdc","amount":"25","from_address":"<verified wallet>"}
    Wait for status: awaiting_transfer. Read deposit_address, token_contract, chain_id, amount_atomic and expires_at from that response. A rejected request is not a quote.
  5. Send exactly the quoted amount. Send native USDC on Base from the verified wallet to the quoted receiving address before expiry. One transfer per quote. Request a new quote for another payment.
  6. Check the result.
    GET /v1/credits/crypto/receipts
    GET /v1/credits/balance
    Both require your API key. A credited receipt includes the transaction hash, log index, atomic USDC amount and evidence hash. No submitted transaction hash can create a credit.

Unique amount (no wallet signature)

  1. Request a unique-amount quote.
    POST /v1/credits/topup
    {"method":"usdc","mode":"micro_decimal","amount":25}
    amount is a whole number of USDC from 1 to 999,999. The response's amount_usdc adds a unique 6-decimal suffix below 0.01 USDC, for example 25.00xxxx. Asking again for the same whole amount returns the same quote until it is paid or expires.
  2. Send exactly amount_usdc. Native USDC on Base, to the quoted deposit_address, in one transfer, before expires_at. Any sender works, including an exchange withdrawal or a smart-contract wallet. The amount that arrives must match to the last decimal: if your exchange deducts its fee from the amount you enter, add the fee; if it cannot send six decimals, use the verified-wallet route instead.
  3. Check the result with the same receipts and balance calls. You receive exactly the amount received as credits once its Base block is finalized.

The suffix is how the transfer is attributed to your account, so no two open quotes share it, whatever their whole amounts. Sent before expiry, a transfer whose amount was changed by an exchange fee taken out in whole cents, by rounding or truncation to fewer decimals, by one mistyped digit or by two swapped neighbouring digits of the suffix matches no other account's quote. A second transfer of the same amount, or a transfer after expiry, matches no other account's quote if it arrives within 30 days of expiry, because no unique amount is issued again before then. These transfers are held for attribution review, not credited automatically. Each account may hold at most three open unique-amount quotes.

Supported payments

Base mainnet, chain ID 8453. Native USDC contract 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913. This is the token contract, not your deposit destination.

1 USDC buys 1 credit. Verified-wallet quotes accept 1 to 1,000,000 USDC, with at most six decimal places; unique-amount quotes accept whole amounts from 1 to 999,999 USDC plus the quoted suffix. Amounts are retained as integer token units in transfer receipts. The verified-wallet route supports only externally owned accounts (EOAs) that can sign the challenge; for exchange withdrawals and smart-contract wallets use the unique-amount route.

Credit requires a successful transfer in a finalized Base block. Two blocks are insufficient. Finality and the scheduled deposit scan take time; no fixed credit arrival time is promised. If the watcher is not current, new quotes are unavailable.

Signatures establish wallet control for your Kairos account, not legal identity. A wallet cannot be reassigned to another account through this API. Previously credited balances remain unchanged. Legacy unsigned intents, transfers made before a quote, wrong amounts and expired quotes are held for attribution review; they are not automatically refunded or credited.

Machine-readable availability and protocol · Card payment options