PayAgent — Product Overview
PayAgent is a crypto payments platform for humans and AI agents. Users create shareable payment links, receive on-chain payments, and earn reward credits. Merchants register autonomous agents via API, enforce spend policies, and record agent-initiated payments after on-chain settlement.
This page is a public product overview for merchants and integrators. Operational runbooks, database schemas, and deployment secrets are not published here.
---
Table of contents
- Core principles
- Who uses PayAgent
- Supported networks and tokens
- Payment links
- Profile payments
- Invoices
- Wallets
- Merchant agents and API
- WDK protocol (npm)
- Solana WDK test agents
- ChatGPT plugin
- Compliance and spend policies
- Rewards and referrals
- Agent integration checklist
- Public API surface
- Webhooks
- Public leaderboard
---
1. Core principles
| Principle | What it means |
|---|---|
| Non-custodial | PayAgent never holds private keys. Payers sign in their own wallet. |
| Verify on-chain | Payments are recorded only after the transaction is verified on-chain. |
| Fail closed for agents | Agent money APIs require an active compliance policy. |
| Workspace tenancy | Each account has a workspace. Links, agents, and keys stay scoped to that workspace. |
| Audit trail | Policy decisions and agent money actions produce receipts for compliance review. |
---
2. Who uses PayAgent
| User | Typical flow |
|---|---|
| Merchant (human) | Sign in → verify receiving wallets → create links or invoices → get paid |
| Payer (human) | Open a link or profile → connect wallet → pay on-chain |
| Agent (programmatic) | API key → register agent → policy → preflight → pay → report txHash |
Getting started (humans)
- Sign up at
/sign-upwith Google or a connected EVM wallet. - Choose a username during onboarding. This becomes your public profile (
/{username}) and payment-link prefix. - Verify a receiving wallet in Wallets for each network you want to accept.
- Create a payment link, invoice, or share your profile URL.
Payers do not need an account. They open a link or profile, connect a wallet, and pay on-chain (or scan the checkout QR).
---
3. Supported networks and tokens
| Network | ID | Tokens (checkout) |
|---|---|---|
| Ethereum | ethereum | USDC, USDT, ETH, LCX |
| Base | base | USDC, USDT, ETH |
| Solana | solana | USDC, USDT, SOL |
| Sepolia (testnet) | sepolia | USDC, USDT, ETH, LCX |
Sepolia may be hidden when testnets are disabled in your deployment.
Agent policies can restrict which networks and tokens an agent may use. USD caps apply to stablecoins directly; native tokens (ETH, SOL) require live pricing or the request may be denied.
---
4. Payment links
A payment link is a shareable URL with a fixed amount, token, network, and expiry.
URL format: /{username}/{publicId}
| Status | Meaning |
|---|---|
pending | Payable until expiry |
paid | Settled on-chain |
expired | Past expiry |
cancelled | Cancelled by creator |
Create (portal): Dashboard or Payment links
Create (agent API): POST /api/v1/payment-links
Batch create: POST /api/v1/payment-links/batch (up to 50 links per request)
List / read: GET /api/v1/payment-links and GET /api/v1/payment-links/{linkId}
Pay (payer): Open the URL → connect a wallet or scan the QR → send the transaction → checkout confirms with txHash.
Checkout is non-custodial. PayAgent only records the payment after the on-chain transfer is verified.
---
5. Profile payments
Users with a public username can receive any amount at /{username}.
Same wallet-connect, QR, and on-chain flow as links.
Agent pay types on POST /api/v1/pay:
type | Pays | Required fields |
|---|---|---|
link | A payment link | linkUsername, linkId |
profile | A username | recipientUsername, amount, tokenId, networkId |
address | A raw wallet address | recipientAddress, amount, tokenId, networkId |
Always send Idempotency-Key on POST /api/v1/pay. Call GET /api/v1/pay/preflight first (type = link, profile, or address).
---
6. Invoices
Create and manage invoices in the portal (/invoice/new, /manage-invoices). Invoices can include line items, PDF export, email share, and an optional attached payment link.
Agents and integrations can also create invoices with POST /api/v1/invoices and fetch them with GET /api/v1/invoices/{id}. A username and a verified receiving wallet on the invoice network are required.
---
7. Wallets
Receiving wallets (humans): Verified in Wallets before you can receive on a network. Verification uses a signed message — no private keys are stored.
Agent payer wallets: Registered via POST /api/v1/agents/wallet. Optionally prove ownership with POST /api/v1/agents/wallet/verify. The address used in POST /api/v1/pay must match a registered agent wallet. Agents sign transactions externally — PayAgent never holds those keys.
---
8. Merchant agents and API
Authentication
Authorization: Bearer fid_live_...
Manage keys in the portal under Merchant → API credentials (sign-in required).
Typical agent lifecycle
POST /api/v1/agents/registerPOST /api/v1/agents/wallet- Activate a compliance policy (portal or API)
GET /api/v1/pay/preflight(recommended)- Send on-chain transaction from the agent wallet
POST /api/v1/paywithtxHash
Idempotency
POST /api/v1/pay requires an Idempotency-Key header so retries are safe.
Use the Merchant API reference on this page or sign in to API credentials for request examples.
Machine-readable spec: GET /api/v1/openapi.json
Sending on-chain payments
PayAgent does not broadcast transactions. The agent signs and sends from its own wallet, then reports the hash.
- Call
GET /api/v1/pay/preflightand wait untilreadyis true. - Resolve the destination address:
- Link —
GET /api/v1/payment-links/{linkId}returnsrecipientAddress,amount,tokenId, andnetworkId. - Profile —
GET /api/public/users/{username}returns verifiedwallets. Use the address for the samenetworkId. - Address — you already have
recipientAddress.
- Link —
- Send the token or native asset to that address on the matching network (standard ERC-20
transfer, native ETH/SOL transfer). USDC and USDT use 6 decimals; ETH uses 18; SOL uses 9. Or use@payagent/wdk-protocolso WDK sends and records the hash. POST /api/v1/paywith thetxHashand anIdempotency-Key.
---
WDK protocol (npm)
Optional path for Tether WDK / QVAC agents. Install the module. Open a WDK WalletAccount on the agent machine. PayAgent never sees the seed.
npm install @payagent/wdk-protocol @tetherto/wdk @tetherto/wdk-wallet-solana
For Ethereum or Base, swap in @tetherto/wdk-wallet-evm.
import { PayAgentProtocol } from "@payagent/wdk-protocol";
const protocol = new PayAgentProtocol(account, {
baseUrl: "https://www.payagent.co",
apiKey: process.env.PAYAGENT_API_KEY,
agentId: "your-agent-id",
networkId: "solana",
});
await protocol.pay({
type: "address",
recipientAddress: "…",
amount: 1,
tokenId: "usdt",
networkId: "solana",
});
npm install does not register the agent. You still need a merchant API key, then register → attach the WDK address → set a no-approval USDT policy. Settlement is still the on-chain txHash. PayAgent is not a paymaster — the wallet pays SOL or ETH for gas.
ChatGPT plugin
The ChatGPT plugin opens PayAgent checkout and, after you connect your workspace, the same merchant and agent jobs as the portal. ChatGPT does not hold keys and does not send the chain transaction.
- Humans get a
https://www.payagent.co/…checkout URL and can poll public link status (pending/paid/expired/cancelled). - Agents still preflight, send from a registered wallet or local WDK, then record the
txHash. - Hosted MCP:
https://www.payagent.co/mcp. Upload package: repo folderchatgpt_plugin/(zip withoutserver/). - Personal / workspace install only until Legal/BD clears a public directory listing. Do not say “ChatGPT pays USDT by itself.”
---
Solana WDK test agents
Two dummy agents for a Solana USDT hop. Same npm module. Solana catalog is mainnet (real SOL + official USDT mint Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB).
npm install @payagent/wdk-protocol @tetherto/wdk @tetherto/wdk-wallet-solana- Create two WDK seeds. Derive Solana account 0 for each. Same seed on EVM is a different address — attach
networkId: "solana"only. POST /api/v1/agents/register— e.g.wdk test agent - solana Aandwdk test agent - solana B.POST /api/v1/agents/walletwith each WDK pubkey andnetworkId: "solana".PUT /api/v1/compliance/agents/{agentId}/policy—allowedNetworkIds: ["solana"],allowedTokenIds: ["usdt"],allowPay: true,autoPayEnabled: true,requireApprovalAbove: null.GET /api/v1/pay/preflightuntilready: true.- Fund both addresses with a little SOL. Fund at least one with USDT.
- Call
protocol.pay({ type: "address", … })from the funded side. A pays B, then B pays A.
Runnable template: agents/wdk-test-agent (npm install, npm run setup, npm run check, npm run run). Standard register-and-pay guide: agents/wdk-test-agent/HOW-IT-WORKS.pdf.
---
9. Compliance and spend policies
Every agent money action is evaluated against an active policy:
| Field | Purpose |
|---|---|
maxAmountPerPayment | Per-payment USD ceiling |
dailySpendCap / monthlySpendCap | Spend limits |
allowedNetworkIds / allowedTokenIds | Allowlists |
allowCreatePaymentLinks / allowPay | Permissions |
requireApprovalAbove | Large payments need human approval |
Verdicts
| Result | HTTP | Meaning |
|---|---|---|
| Allowed | 200 | Proceed |
| Denied | 403 | Blocked (POLICY_DENIED + codes) |
| Approval required | 202 | Human must approve; retry with approvalId |
Common codes: NO_ACTIVE_POLICY, DAILY_CAP_EXCEEDED, APPROVAL_REQUIRED, NETWORK_NOT_ALLOWED, TOKEN_NOT_ALLOWED.
Poll approvals: GET /api/v1/compliance/approvals/[id] Programmatic approve/reject: available with scoped admin keys where enabled in your deployment.
---
10. Rewards and referrals
- Default rewards: Confirmed payments accrue rewards in USDT or USDC (see Rewards in the portal).
- LCX: Optional extra. You do not need LCX to send or receive a payment.
- Referrals: Share a referral code at sign-up. Successful referred signups grant credits (see Referrals in the portal).
Network fees (gas) are paid by the sender on-chain. PayAgent does not take a cut of the payment amount. Rewards are not a checkout fee.
---
11. Agent integration checklist
- Create an API key in the portal
- Optional WDK:
npm install @payagent/wdk-protocolplus the matching Tether wallet module POST /api/v1/agents/registerPOST /api/v1/agents/wallet(fund the wallet externally, or derive it with WDK)- Activate policy —
PUT /api/v1/compliance/agents/{agentId}/policy - Create a link or prepare a profile pay
GET /api/v1/pay/preflight- Send on-chain transaction
POST /api/v1/paywithtxHashandIdempotency-Key- If
202 APPROVAL_REQUIRED— resolve approval, then retry with the sameapprovalId
OpenAPI spec (machine-readable): GET /api/v1/openapi.json
---
12. Public API surface
These endpoints are intended for unauthenticated or payer-facing use (subject to rate limits):
| Endpoint | Purpose |
|---|---|
GET /api/public/users/[username] | Public profile |
POST /api/public/users/[username]/pay | Record profile payment (checkout) |
GET /api/public/leaderboard | Leaderboard (?networkId= optional) |
GET /api/health | Service health |
GET /api/v1/openapi.json | OpenAPI spec (no auth) |
All /api/v1 merchant and agent operations require a workspace API key (Authorization: Bearer fid_live_…). The signed-in portal uses separate session routes under /api/merchant/*.
Merchant API (authenticated)
| Area | Endpoints |
|---|---|
| Agents | POST /agents/register, POST /agents/wallet, POST /agents/wallet/verify, GET /agents/profile, PATCH /agents/{agentId}, GET /agents/{agentId}/transactions |
| Payment links | GET|POST /payment-links, POST /payment-links/batch, GET /payment-links/{linkId} |
| Pay | GET /pay/preflight, POST /pay (link / profile / address) |
| Invoices | POST /invoices, GET /invoices/{id} |
| Webhooks | GET|POST /webhooks, PATCH|DELETE /webhooks/{id}, POST /webhooks/{id}/test |
| Compliance | Catalog, policies, decisions, audit, approvals |
Prefix all of the above with /api/v1.
---
13. Webhooks
Subscribe your server to workspace events. Manage endpoints in the portal (Merchant → API credentials / Webhooks) or via API.
| Event | When it fires |
|---|---|
payment_link.created | A payment link is created |
payment_link.paid | A link is settled on-chain |
payment_link.expired | A link expires |
profile_payment.received | A profile payment is recorded |
agent.payment_recorded | An agent pay is recorded |
compliance.approval_required | A payment is parked for approval |
compliance.approval.resolved | An approval is approved or rejected |
Verify every delivery using HMAC-SHA256:
signed = "{timestamp}.{raw_body}"
expected = HMAC_SHA256(webhook_secret, signed)
X-Fidence-Signature: t={timestamp},v1={expected}
X-Fidence-Event: payment_link.paid
Reject requests if v1 does not match or t is too old. HTTPS URLs only. Use POST /api/v1/webhooks/{id}/test to send a sample event.
---
14. Public leaderboard
/leaderboard ranks agents by confirmed on-chain volume. Filter by network (Ethereum, Base, Solana, and Sepolia when testnets are on).
JSON: GET /api/public/leaderboard and GET /api/public/leaderboard?networkId=ethereum
---
Security notes (public)
- API keys are secrets — treat them like passwords; rotate if leaked.
- PayAgent does not store payer or merchant private keys.
- Only report payments with valid on-chain transaction hashes you control.
- Use preflight before sending funds to avoid failed or rejected settlements.
- Verify webhook signatures (
X-Fidence-Signature) before acting on events.
For deployment, infrastructure, and internal security runbooks, use your private operator documentation — not this public page.
API reference
Use your merchant API key to register agents, add wallets, create links, and record payments. PayAgent verifies on-chain transactions — your agent signs and funds payments from its own wallet.
Authentication
Send your API key on every request. One key per workspace, max 10 agents.
Authorization: Bearer fid_live_your_api_key
POST/api/v1/agents/register
Register a new agent with a name. Required before adding wallets or creating links.
agentIdrequired — Your unique agent identifieragentNamerequired — Display name for the agent
curl -X POST https://www.payagent.co/api/v1/agents/register \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"agentId": "checkout-bot",
"agentName": "Checkout Bot"
}'
{
"ok": true,
"agent": {
"publicId": "agt_a1b2c3d4",
"externalAgentId": "checkout-bot",
"name": "Checkout Bot",
"status": "active",
"created": true
}
}
POST/api/v1/agents/wallet
Add a wallet to a registered agent. The agent must fund this wallet on-chain before it can pay.
agentIdrequired — Registered agent IDwalletAddressrequired — Agent wallet addressnetworkIdrequired — e.g. ethereum, base, solana
curl -X POST https://www.payagent.co/api/v1/agents/wallet \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"agentId": "checkout-bot",
"walletAddress": "0x518b9aba7586542e611909799f6d0b81e9552d9b",
"networkId": "sepolia"
}'
POST/api/v1/agents/wallet/verify
Prove the agent controls the registered wallet by signing a verify message. Optional unless your deployment requires verified agent wallets.
agentIdrequired — Registered agent IDaddressrequired — Wallet addressnetworkIdrequired — e.g. base, ethereum, solanamessagerequired — Must start with "Verify wallet for PayAgent"signaturerequired — Signature of that message
curl -X POST https://www.payagent.co/api/v1/agents/wallet/verify \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"agentId": "checkout-bot",
"address": "0x518b9aba7586542e611909799f6d0b81e9552d9b",
"networkId": "base",
"message": "Verify wallet for PayAgent\n\nNetwork: base\nWallet: 0x518b9aba7586542e611909799f6d0b81e9552d9b\nTimestamp: 1710000000000",
"signature": "0x..."
}'
GET/api/v1/agents/profile
Get agent wallets and supported networks.
agentIdrequired — Query param — registered agent ID
curl "https://www.payagent.co/api/v1/agents/profile?agentId=checkout-bot" \
-H "Authorization: Bearer fid_live_your_api_key"
GETPUT/api/v1/compliance/*
Money APIs fail closed without an active policy. Agents cannot edit their own policies — use the workspace API key or the Merchant portal. Caps are USD; USDC/USDT are 1:1.
GET /catalog— Networks, tokens, and actionsGET /agents— Agents plus policy summaryGET|PUT /agents/:agentId/policy— agentId = externalAgentIdGET /agents/:agentId/decisions— Per-agent decision receiptsGET /audit— Workspace audit searchGET /approvals/:id— Poll pending or approved payments
curl -X PUT https://www.payagent.co/api/v1/compliance/agents/checkout-bot/policy \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"status": "active",
"maxAmountPerPayment": 50,
"dailySpendCap": 200,
"monthlySpendCap": null,
"allowedNetworkIds": ["ethereum", "base", "solana"],
"allowedTokenIds": ["usdc", "usdt"],
"allowCreatePaymentLinks": true,
"allowPay": true,
"requireApprovalAbove": null
}'
GETPOST/api/v1/payment-links
Create a payment link for a registered agent. Requires an active compliance policy. List links with GET /api/v1/payment-links (agentId, status, page, limit query params). GET /api/v1/payment-links/{linkId} returns recipientAddress, amount, tokenId, and networkId — use those to send the on-chain transfer.
agentIdrequired — Registered agent IDamountrequired — Payment amounttokenIdrequired — e.g. usdc, ethnetworkIdrequired — Network for the linkexpiresAtrequired — ISO 8601 expiry date
curl -X POST https://www.payagent.co/api/v1/payment-links \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"agentId": "checkout-bot",
"amount": 1,
"tokenId": "usdc",
"networkId": "sepolia",
"expiresAt": "2026-12-31T00:00:00.000Z"
}'
POST/api/v1/payment-links/batch
Create up to 50 payment links in one request. Same fields as a single create, nested in a links array. Requires an active compliance policy.
curl -X POST https://www.payagent.co/api/v1/payment-links/batch \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"agentId": "checkout-bot",
"links": [
{ "amount": 1, "tokenId": "usdc", "networkId": "base", "expiresAt": "2026-12-31T00:00:00.000Z" },
{ "amount": 5, "tokenId": "usdc", "networkId": "base", "expiresAt": "2026-12-31T00:00:00.000Z" }
]
}'
POSTGET/api/v1/invoices
Create an invoice with an attached payment link. Requires a username and a verified receiving wallet on the invoice network. Fetch one later with GET /api/v1/invoices/{id}.
curl -X POST https://www.payagent.co/api/v1/invoices \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"companyDetails": { "name": "Acme", "address": "", "metadata": [] },
"clientDetails": { "name": "Client", "address": "", "metadata": [] },
"invoiceDetails": {
"theme": { "baseColor": "#2B6BFF", "mode": "light" },
"currency": "USD",
"prefix": "INV-",
"serialNumber": "0001",
"date": "2026-09-01T00:00:00.000Z",
"paymentTerms": "",
"billingDetails": []
},
"items": [{ "name": "Service", "description": "", "quantity": 1, "unitPrice": 25 }],
"metadata": { "notes": "", "terms": "", "paymentInformation": [] },
"paymentLink": { "tokenId": "usdc", "networkId": "base" }
}'
GET/api/v1/pay/preflight
Check whether an agent is ready to pay before sending an on-chain transaction. When ready is true, resolve the destination (see Sending on-chain payments), send the transfer, then call POST /api/v1/pay.
typerequired — "link", "profile", or "address"agentIdrequired — Agent to pay frompayerAddress— Optional — verify wallet matchlinkUsername— Required when type=linklinkId— Required when type=linkrecipientUsername— Required when type=profilerecipientAddress— Required when type=addresstokenId— Required when type=profile or addressnetworkId— Required when type=profile or addressamount— Recommended for policy checks
curl "https://www.payagent.co/api/v1/pay/preflight?type=link&agentId=checkout-bot&linkUsername=you&linkId=16e9de654a5a" \
-H "Authorization: Bearer fid_live_your_api_key"
POST/api/v1/paylink
Record a payment after your agent sends an on-chain transaction. PayAgent verifies the tx hash.
agentIdrequired — Paying agent IDpayerAddressrequired — Must match agent wallettxHashrequired — On-chain transaction hashtyperequired — "link"linkUsernamerequired — Recipient usernamelinkIdrequired — Payment link public ID
curl -X POST https://www.payagent.co/api/v1/pay \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pay-link-001" \
-d '{
"agentId": "checkout-bot",
"payerAddress": "0x518b9aba7586542e611909799f6d0b81e9552d9b",
"txHash": "0xb9a5f584452a5903386672a143c4aca14fcfb78124a87a2da51e9bf7e68f9075",
"type": "link",
"linkUsername": "you",
"linkId": "16e9de654a5a"
}'
POST/api/v1/payprofile
Pay a human profile directly. Send on-chain first, then report the transaction.
agentIdrequired — Paying agent IDpayerAddressrequired — Must match agent wallettxHashrequired — On-chain transaction hashtyperequired — "profile"recipientUsernamerequired — Human profile usernameamountrequired — Payment amounttokenIdrequired — e.g. usdcnetworkIdrequired — e.g. sepolia
curl -X POST https://www.payagent.co/api/v1/pay \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pay-profile-001" \
-d '{
"agentId": "checkout-bot",
"payerAddress": "0x518b9aba7586542e611909799f6d0b81e9552d9b",
"txHash": "0x...",
"type": "profile",
"recipientUsername": "you",
"amount": 1,
"tokenId": "usdc",
"networkId": "sepolia"
}'
POST/api/v1/payaddress
Pay a raw wallet address. Send on-chain first, then report the transaction. Same Idempotency-Key requirement as other pay types.
agentIdrequired — Paying agent IDpayerAddressrequired — Must match agent wallettxHashrequired — On-chain transaction hashtyperequired — "address"recipientAddressrequired — Destination walletamountrequired — Payment amounttokenIdrequired — e.g. usdcnetworkIdrequired — e.g. base
curl -X POST https://www.payagent.co/api/v1/pay \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pay-address-001" \
-d '{
"agentId": "checkout-bot",
"payerAddress": "0x518b9aba7586542e611909799f6d0b81e9552d9b",
"txHash": "0x...",
"type": "address",
"recipientAddress": "0x1111111111111111111111111111111111111111",
"amount": 1,
"tokenId": "usdc",
"networkId": "base"
}'
GETPOST/api/v1/webhooks
Create and list webhook endpoints. Update or delete with PATCH|DELETE /api/v1/webhooks/{id}. Send a sample payload with POST /api/v1/webhooks/{id}/test.
urlrequired — HTTPS endpointeventsrequired — Array of event namesenabled— Defaults to true
curl -X POST https://www.payagent.co/api/v1/webhooks \
-H "Authorization: Bearer fid_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/webhooks/payagent",
"events": ["payment_link.paid", "agent.payment_recorded"]
}'
Deliveries include X-Fidence-Signature (t=…,v1=…) and X-Fidence-Event. Verify HMAC-SHA256 of {timestamp}.{raw_body} with the endpoint secret.
Error codes
API errors include a code field when applicable. Use preflight before paying on-chain.
| Code | Meaning |
|---|---|
AGENT_NOT_FOUND | Agent not registered for this workspace |
AGENT_EXISTS | Agent ID already registered |
AGENT_INACTIVE | Agent is disabled |
AGENT_LIMIT_REACHED | Max 10 agents per workspace |
AGENT_WALLET_MISSING | No wallet added for this network |
AGENT_WALLET_MISMATCH | payerAddress does not match agent wallet |
LINK_NOT_FOUND | Payment link does not exist |
LINK_NOT_PAYABLE | Link is paid, expired, or cancelled |
RECIPIENT_NOT_FOUND | Recipient username does not exist |
NO_ACTIVE_POLICY | Agent has no active compliance policy |
NETWORK_NOT_ALLOWED | Network not on the agent allowlist |
TOKEN_NOT_ALLOWED | Token not on the agent allowlist |
DAILY_CAP_EXCEEDED | Daily USD spend cap would be exceeded |
MONTHLY_CAP_EXCEEDED | Monthly USD spend cap would be exceeded |
AMOUNT_ABOVE_MAX | Amount exceeds maxAmountPerPayment |
ACTION_NOT_ALLOWED | Policy disallows create-link or pay |
TOKEN_NETWORK_UNSUPPORTED | tokenId + networkId combo not supported |
RECIPIENT_WALLET_MISSING | Recipient has no verified wallet on network |
WALLET_NOT_VERIFIED_FOR_NETWORK | Merchant has no verified receiving wallet |
USERNAME_REQUIRED | Set a username before creating invoice links |
APPROVAL_REQUIRED | Pay parked for human approval (HTTP 202) |
AMOUNT_VALUATION_UNAVAILABLE | Non-stablecoin USD price unavailable |