Invoice intents

The draft invoice object: required fields, supported tokens, implemented statuses, and why an unsigned intent has no payable links.

An InvoiceIntent is a draft/pre-invoice object for AI-generated invoices, preview-before-commit workflows, and wallet approval. It prevents assistants and agents from creating a payable invoice without authorization.

Pre-approval · not payable

POST/api/v1/invoice-intents

Required fields for AI actions are recipientWallet, tokenSymbol, and lineItems. Use USDC or USDT on Solana mainnet-beta; normal users do not need token mint addresses. Existing clients may still send token. Do not use SOL, devnet/testnet mints, or arbitrary SPL mints for invoice intents.

Pre-approval · not payable

{
  "recipientWallet": "9xQ...",
  "tokenSymbol": "USDC",
  "customerName": "PT Maju Jaya",
  "dueDate": "2026-07-20",
  "lineItems": [
    { "description": "Landing page website", "amount": "200", "quantity": 1 },
    { "description": "Maintenance", "amount": "50", "quantity": 1 }
  ]
}

Pre-approval · not payable

{
  "recipientWallet": "9xQ...",
  "tokenSymbol": "USDT",
  "lineItems": [
    { "description": "Support retainer", "amount": "500", "quantity": 1 }
  ]
}

Add chargesfor costs that aren't a line item — a rush fee, a processing fee, a discount as a negative amount. Charges add to the total and platform fee the same way line items do.

Pre-approval · not payable

{
  "recipientWallet": "9xQ...",
  "tokenSymbol": "USDC",
  "lineItems": [
    { "description": "Landing page website", "amount": "200", "quantity": 1 }
  ],
  "charges": [
    { "label": "Rush fee", "amount": "25" }
  ]
}

Implemented statuses

  • SIGNATURE_REQUIRED: wallet approval is required and the intent is not payable.
  • CONFIRMED: wallet approval is complete and a final invoice exists or is expected in finalInvoice.
  • EXPIRED: the 24-hour intent window elapsed before approval.
Unsigned intents never expose payUrl or x402Url. Those links only appear in the final invoice response after confirmation.