Layerbeat

Pay an agent credit top-up with MPP on Tempo

POST
/v1/billing/top-ups/mpp

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.

Authorization

headerAuthorizationBearer <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.

Header Parameters

Idempotency-Key*string

Persist one identity for the entire funding attempt and every retry, across workspaces.

Length1 <= length <= 128
X-Org-ID?string

Sessions only: act on this organization (you must be a member). Default: your first organization.

Payment-Authorization?string

An MPP credential: Payment followed by base64url JSON echoing the challenge, with payload {"type":"hash","hash":"0x…"} (push) or {"type":"transaction","signature":"0x76…"} (pull).

Lengthlength <= 16384

Request Body

application/json
  1. body
amount*UsdString

USD amount, parsed as integer cents without rounding.

Match^[0-9]+([.][0-9]{1,2})?$

Response Body

A final Tempo transfer has credited the authenticated user's personal wallet. A replay returns the original payment.

application/json
  1. response
credit?
display_idr_per_usd?string

Immutable original rate for displaying this USD credit in IDR. Omitted on legacy instructions or when unconfigured.

Match^[0-9]+$
instructions_version?1

Immutable instruction snapshot version; legacy rows may omit it.

Value in1
id*string
purpose*string

New intents are top-ups. The legacy vm_purchase value remains readable for historical records.

Value in"vm_purchase""topup"
method*string

usdc_tempo is used only by MPP agent top-ups.

Value in"usdc_solana""usdc_arc""usdc_tempo"
status*string

awaiting: nothing received. partial: some received. paid: complete. expired/canceled: closed (anything received is wallet balance).

Value in"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*string

The address to pay on the stated network.

reference*|

Solana only: a unique reference key that identifies this payment (already inside payment_uri).

payment_uri*string

A link/QR payload for wallets: Solana Pay on Solana, an EIP-681 request on Arc.

network*
expires_at*string

Pay before this time.

Formatdate-time
paid_at*|
Formatdate-time
created_at*string
Formatdate-time
transactions*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"    }  ]}