Layerbeat

Top up personal credit

POST
/v1/billing/top-ups

Creates a USDC or Rupiah top-up for your personal balance. Reuse the same Idempotency-Key if the request times out.

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

A unique string (for example a UUID). Repeating the same request with the same key returns the original result instead of buying again.

X-Org-ID?string

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

Request Body

application/json
  1. body
payment_option?|

Original native Doit choice, immutable with the invoice amount and request identity. Only accepted with method doit, currency IDR and a durable Idempotency-Key. QRIS must omit bank; virtual_account requires a configured supported bank. Omission/null preserves hosted selection for older clients. Changing this choice under the same Idempotency-Key returns 409. Existing invoices remain recoverable when a choice is disabled for new payments.

currency?string

Selected personal credit balance. Never converts or combines balances.

Value in"USD""IDR"
method*string
Value in"usdc_solana""usdc_arc""doit"
amount*string

Native funding amount. USDC uses USD decimals and funds USD only. Doit requires explicit currency IDR, uses whole Rupiah and adds exactly that amount to IDR credit; it never converts existing balances. Layerbeat absorbs processing fees.

Response Body

Payment created

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' \  -H 'Idempotency-Key: 7c1f1b0e-6f0c-4a5e-9c33-2d0c0f1c9a11' \  -H 'Content-Type: application/json' \  -d '{  "method": "usdc_solana",  "currency": "USD",  "amount": "25.00"}'
{  "id": "pay_h3x9k2m7q4w6z8tfjn5r2bcdva",  "purpose": "topup",  "method": "usdc_solana",  "status": "awaiting",  "vm_id": null,  "amount": {    "usd": "12.00",    "usdc": "12.003417"  },  "received": {    "usdc": "0.000000",    "credited_usd": "0.00"  },  "pay_to": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",  "reference": "J4Zq9mTt8Yd3nVwKpL2xRfH6bCsUeA5gQj7oWz1NhXy",  "payment_uri": "solana:7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU?amount=12.003417&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&reference=J4Zq9mTt8Yd3nVwKpL2xRfH6bCsUeA5gQj7oWz1NhXy&label=VPS",  "network": {    "name": "USDC on Solana",    "network": "solana",    "asset": "USDC",    "contract": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",    "decimals": 6  },  "expires_at": "2026-10-01T11:00:00Z",  "paid_at": null,  "created_at": "2026-10-01T10:00:00Z",  "transactions": []}