invoice_create
Create a payment request: who receives, which token, how much, on which network. Returns invoice.id, invoice.label (INV-XXXX-XXXX, what people copy), invoice.url (share this; it previews with the QR on WhatsApp and Telegram) and invoice.qr (PNG). No signature or API key needed. New invoices only receive VERIFIED dollar stablecoins on the network allowlist, even without paid analysis. Without paid analysis there is no split fee. Previously created invoices keep their terms. Tokens resolve by address or symbol — an unverified token is refused because a cloned "USDC" with its own pool would let the creator sell a fake at any price. The payer can pay with ANY token on that network. Optional paid checks (see checks): "scorechain" (0.15 USDC) adds the Scorechain sanctions API and "merkle-science" (0.60 USDC) the Merkle Science analysis via Didit, both on BOTH wallets (payer and receiver), paid by the creator before the invoice can be paid (0.75 USDC in one transfer with both). They send both wallets to the third party, so they run only when chosen. A wallet listed by Scorechain is refused (payer_blocked or receiver_blocked); when Scorechain cannot be read the payment is not held, because the OFAC list is already checked here. On Solana the model is different (see payerChecks): the free screening of the receiving wallet must pass for the invoice to be created (receiver_blocked 403, screening_unavailable 503), and the paid analysis of the payer wallet is paid out of the amount through a split in the payment transaction.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| memo | No | Optional note, up to 80 chars, visible to anyone with the link. | |
| token | Yes | Token to receive: address/mint or symbol of a verified dollar stablecoin on the network allowlist. Other tokens return stablecoin_required, even without paid analysis. | |
| amount | Yes | Human decimal amount, e.g. "100". Decimals come from the token list, not from you. | |
| checks | No | Optional extra screening chosen by the invoice creator; default none. Any other value is refused with invalid_check. Both checks are PAID by the creator, for both wallets (payer and receiver), before the invoice can be paid. EVM networks only (the old model): on Solana paid checks here are refused with paid_check_moved; use payerChecks instead, and the payer contracts the receiver analysis with invoice_analysis_pay. "scorechain" (0.15 USDC): the Scorechain sanctions API, which sends both wallets to Scorechain. Available on Optimism, BNB Chain, Gnosis, Unichain, Polygon, Base, Arbitrum, Avalanche and Solana. "merkle-science" (0.60 USDC): the Merkle Science analysis via Didit (score, summary, risk factors and where the money came from), which sends both wallets to Didit/Merkle Science. Available on Base, Optimism, Arbitrum, BNB Chain, Polygon and Solana. Both together: one transfer of 0.75 USDC. Ethereum answers check_not_available_on_chain for both (coming soon), as do the networks a check does not cover. The invoice comes back with analysis {status: "awaiting_payment", checks, amount (the sum), token (USDC of that network), to (Vurto fee wallet), chainId}: the creator pays it first with invoice_analysis_pay (sign) and invoice_report_analysis_payment; until then the invoice cannot be paid (analysis_unpaid). The creator is the signed-in wallet, or the receiving wallet when there is no session (always the receiving wallet over MCP), and only the creator can pay the analysis. The analysis is not sold when the free screening rejects the receiving or the creating wallet (screening_blocked, 403). | |
| chainId | Yes | EVM: integer from GET /v1/chains (1, 10, 56, 100, 137, 8453, 42161, 43114, 130). Solana: string from GET /v1/svm/chains ("solana-mainnet"). | |
| recipient | Yes | Wallet that receives. EVM 0x address, or base58 on Solana (case-sensitive). | |
| payerChecks | No | Solana and EVM networks with invoiceSplit=true in /v1/chains, stablecoin invoices only: USDC, USDT (including USDT0), PYUSD, USDG and USD1, by verified address on each network. Availability differs by network. The PAID analysis of the PAYER wallet is chosen by you (the receiver) and paid out of the amount you receive. Price per wallet: "merkle-science" 0.30, "scorechain" 0.075 (both 0.375). The fee that goes to the Vurto fee wallet is the LARGER of that sum and 0.5% of the amount. The percentage rounds down on Solana and up on EVM to the token's smallest unit; EVM fees cannot exceed 10% of the amount: a 100 USDC invoice with merkle-science has fee 0.50 (you receive 99.50); a 20 USDC invoice has fee 0.30 (you receive 19.70). invoice.split comes back with fee, receiverAmount and feeWallet. It runs only when the payer clicks pay (invoice_pay), after the free screening passes, and the payer cannot switch it off. The payment is then ONE transaction that splits the amount between you and the fee wallet; a payment without the fee in that same transaction does not settle the invoice. Refused: split_not_available_on_chain where no split contract is configured, stablecoin_required for tokens outside the network allowlist, amount_below_fee, fee_above_maximum (EVM fee exceeds 10%), analysis_offer_suspended (403) when this receiving wallet left 2 approved paid analyses without payment (each completed payment gives 2 back). | |
| confidential | No | Not available yet: private invoices are coming soon, with the Vurto vault. Any value other than false is refused with private_coming_soon and nothing is created. A payment is a direct transfer, so the transaction shows the receiving wallet on-chain; omit this field. |