# Axiomis Pay > Non-custodial stablecoin checkout for developers. One API call creates an invoice in USD; the customer pays USDT or USDC on TRON, BNB Smart Chain, Base, Arbitrum, Polygon or TON on a hosted page or iframe; funds go to the merchant's own wallet (on TON directly, matched by a transfer comment); a signed webhook reports the result. Axiomis Pay never holds merchant funds or private keys. Key facts: - API base: https://pay.axiomis.app/api/v1, JSON, auth header `Authorization: Bearer axp_live_...` or `axp_test_...` (test keys work only with testnets: TRON Nile, BSC testnet, Base Sepolia, Arbitrum Sepolia, Polygon Amoy, TON testnet). Enabled networks: GET /v1/assets. - Amounts are integer US cents (`amount_usd_cents`, 100 to 10000000); 1 USDT = 1 USDC = 1 USD. On-chain amounts are base-unit strings. - TON: the invoice has `memo` (AX-XXXXXXXX); the customer must put it in the transfer comment, the address is the merchant's TON wallet. - Create: POST /v1/invoices {amount_usd_cents, external_order_id, customer_ref, description?, locale?, success_url?, cancel_url?, metadata?} with optional Idempotency-Key header (30 min). Response has hosted_url and embed_url. - Statuses: pending, partially_paid, paid, paid_overpaid, paid_late, expired, needs_review, cancelled. Paid = paid | paid_overpaid | paid_late. - Webhooks: header `AxiomisPay-Signature: t=,v1=`, 5-minute window, retries up to 24 h, same event.id on retries. Verify over the raw body. - Network change on the checkout closes the invoice (cancel_reason "network_changed") and creates a new one with the same external_order_id, linked by replaced_by. - Node.js SDK: npm package @axiomis-pay/sdk (AxiomisPayClient, verifyWebhook, signWebhook). - AI agents: MCP server @axiomis-pay/mcp (stdio; tools create_invoice, get_invoice, find_invoices_by_order, cancel_invoice, create_payment_link, list_payment_links, set_payment_link_active, list_assets; env AXIOMISPAY_API_KEY). - Plugins: WooCommerce (webhook /?wc-api=axiomis_pay), WHMCS gateway module, Telegram bot template. - Sign up and get a test key right away: https://pay.axiomis.app/signup ## Docs - [Quickstart](https://pay.axiomis.app/docs): test key to first paid invoice in four steps - [Test mode](https://pay.axiomis.app/docs/testing): testnets, test USDT, end-to-end test - [Invoices API](https://pay.axiomis.app/docs/invoices): endpoints, invoice object, idempotency, errors - [Checkout page](https://pay.axiomis.app/docs/checkout): hosted page, iframe allow list, postMessage events - [Payment links](https://pay.axiomis.app/docs/payment-links): accept payments without code, payment_links API - [Webhooks](https://pay.axiomis.app/docs/webhooks): events, payload, signature verification in Node.js, Python, PHP, retries - [Statuses and edge cases](https://pay.axiomis.app/docs/statuses): tolerance, partial, late, duplicate payments, network change - [Node.js SDK](https://pay.axiomis.app/docs/sdk): client methods, errors, webhook helpers - [AI agents (MCP)](https://pay.axiomis.app/docs/mcp): MCP server setup, tools, limits - [Collect without us](https://pay.axiomis.app/docs/self-flush): move funds from forwarder payment addresses with your own wallet if the gateway is down - [WooCommerce](https://pay.axiomis.app/docs/woocommerce): install, webhook, order statuses - [WHMCS](https://pay.axiomis.app/docs/whmcs): gateway module install - [Telegram bot](https://pay.axiomis.app/docs/telegram-bot): template that sells access for USDT - [Paying from an exchange](https://pay.axiomis.app/docs/exchanges): network, amount and address when withdrawing ## Optional - [Product site](https://pay.axiomis.app/): pricing, how custody works, pilot request form - [Axiomis Pay vs NOWPayments](https://pay.axiomis.app/compare/nowpayments) and [vs BTCPay Server](https://pay.axiomis.app/compare/btcpay) - [Status](https://pay.axiomis.app/status) and [rules for merchants](https://pay.axiomis.app/aup)