Pay an agent credit top-up with MPP on Tempo
Adds USD credit through a Machine Payments Protocol (MPP) charge paid in USDC.e on Tempo. Reuse the same request body and Idempotency-Key when sending the credential.
Access: API key: billing:write · Session: any role, own account.
- The first request returns
402with aWWW-Authenticate: Paymentchallenge (method="tempo",intent="charge"). The body repeats it with the decoded request. - Pay with one
transferWithMemoof the exact amount to the recipient, carrying the MPP attribution memo for this challenge, then repeat this request with the credential inPayment-Authorization. Keep your API key inAuthorization, as the challenge'sheaderparameter says. - Push: your wallet broadcasts the transfer and the credential carries its hash. Pull: the credential carries the signed transaction and Layerbeat broadcasts it once. A pull transaction must make exactly that one call on this chain, pay its own fee (no sponsorship) and, if it sets an expiry, expire no later than the challenge.
201means a final transfer has credited the wallet, with aPayment-Receipt.503 payment_not_finalmeans resend the same credential shortly. Never pay again.- A
402witherror: payment_verification_failedmeans the transaction does not pay this challenge: wrong amount, token, recipient or memo, or it failed. - API keys fund their creator. The account must be eligible for funding, and configured top-up limits apply. The small fractional amount that identifies the payment is kept as credit.
- You can have at most 5 unpaid crypto top-ups at a time and start 20 in 24 hours; beyond that the request returns
409 quota_exceeded. - mppx clients do all of this automatically. See the agent payment guide.
AuthorizationBearer <token>Send Authorization: Bearer <token>. A token is an API key (lb_live_…, scoped, for programs) or a session (lb_sess_…, from signup or login, for people). See Authentication above.
Idempotency-Key*stringPersist one identity for the entire funding attempt and every retry, across workspaces.
1 <= length <= 128X-Org-ID?stringSessions only: act on this organization (you must be a member). Default: your first organization.
application/json- body
amount*UsdStringUSD amount, parsed as integer cents without rounding.
^[0-9]+([.][0-9]{1,2})?$A final Tempo transfer has credited the authenticated user's personal wallet. A replay returns the original payment.
application/json- response
credit?display_idr_per_usd?stringImmutable original rate for displaying this USD credit in IDR. Omitted on legacy instructions or when unconfigured.
^[0-9]+$instructions_version?1Immutable instruction snapshot version; legacy rows may omit it.
1id*stringpurpose*stringNew intents are top-ups. The legacy vm_purchase value remains readable for historical records.
"vm_purchase""topup"method*stringusdc_tempo is used only by MPP agent top-ups.
"usdc_solana""usdc_arc""usdc_tempo"status*stringawaiting: nothing received. partial: some received. paid: complete. expired/canceled: closed (anything received is wallet balance).
"awaiting""partial""paid""expired""canceled"vm_id*|Null for new top-ups; retained only for historical direct-payment VM orders.
amount*received*What has arrived so far.
pay_to*stringThe address to pay on the stated network.
reference*|Solana only: a unique reference key that identifies this payment (already inside payment_uri).
payment_uri*stringA link/QR payload for wallets: Solana Pay on Solana, an EIP-681 request on Arc.
network*expires_at*stringPay before this time.
date-timepaid_at*|date-timecreated_at*stringdate-timetransactions*array<>On-chain transfers credited to this payment, oldest first. Empty until a transfer is credited.
curl -X POST 'https://layerbeat.com/v1/billing/top-ups/mpp' \ -H 'Idempotency-Key: agent-mpp-20261011-01' \ -H 'Payment-Authorization: Payment eyJjaGFsbGVuZ2UiOnsiaWQiOiJtcHBfLi4uIn19' \ -H 'Content-Type: application/json' \ -d '{ "amount": "5.00"}'{ "id": "pay_q7c2m9x4k8w3z6tfjn5r2bcdva", "purpose": "topup", "method": "usdc_tempo", "status": "paid", "vm_id": null, "amount": { "usd": "5.00", "usdc": "5.004213" }, "received": { "usdc": "5.004213", "credited_usd": "5.00" }, "pay_to": "0x742d35cc6634c0532925a3b844bc9e7595f8fe00", "reference": null, "payment_uri": "ethereum:0x20c000000000000000000000b9537d11c60e8b50@4217/transfer?address=0x742d35cc6634c0532925a3b844bc9e7595f8fe00&uint256=5004213", "network": { "name": "USDC on Tempo", "network": "tempo", "asset": "USDC.e", "contract": "0x20c000000000000000000000b9537d11c60e8b50", "decimals": 6 }, "expires_at": "2026-10-11T11:00:00Z", "paid_at": "2026-10-11T10:01:00Z", "created_at": "2026-10-11T10:00:00Z", "transactions": [ { "id": "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060", "explorer_url": "https://explore.tempo.xyz/tx/0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060" } ]}