Skip to content
LogoLogo

Tempo

Stablecoin payments on the Tempo blockchain

The Tempo payment method enables payments using TIP-20 stablecoins on the Tempo blockchain. Tempo supports multiple intents—charge for one-time payments and session for pay-as-you-go payment channels—covering everything from simple API access to high-frequency metered billing.

Payments on Tempo

Tempo is purpose-built for the payment patterns MPP enables:

  • Instant finality—Transactions settle in ~500ms with deterministic confirmation, no probabilistic waiting
  • Sub-cent fees—Transaction costs low enough for micropayments and per-request billing
  • Fee sponsorship—Servers can pay gas fees on behalf of clients, removing wallet UX friction entirely
  • 2D nonces—Parallel nonce lanes let clients submit payment transactions without blocking other account activity
  • Payment lane—Dedicated transaction ordering for payment channel operations, providing reliable channel management UX
  • High throughput—Tempo's throughput handles the on-chain settlement and channel management volume that payment sessions generate at scale

Choosing a payment method

ChargeSession Recommended
PatternOne-time payment per requestContinuous pay-as-you-go
Latency overhead~500ms (on-chain confirmation)Near-zero
ThroughputOne transaction per requestHundreds of vouchers per second per channel
Best forSingle API calls, content access, one-off purchasesLLM APIs, metered services, usage-based billing
On-chain costPer request (0.001 USD per request)Amortized across many requests (0.001 USD total)
SettlementImmediate on-chain transactionOff-chain vouchers, periodic on-chain settlement

Intents

Fee sponsorship

Tempo supports server-paid transaction fees for both charge and session intents. When enabled, the client signs only the payment authorization and the server covers gas costs. The client doesn't need to hold gas tokens or understand fee mechanics.

Pass a feePayer account to tempo() to enable this:

import { ,  } from 'mppx/server'
import {  } from 'viem/accounts'
 
const  = .({
  : [({
    : ('0x…'), 
  })],
})

It is also possible to point the feePayer to a fee service that supports the Handler.feePayer endpoint:

import { Mppx, tempo } from 'mppx/server'
 
const mppx = Mppx.create({
  methods: [tempo({
    feePayer: 'https://sponsor.example.com', 
  })],
})