Skip to content
OpenPulseDocs

Products

Pay

Passkey wallets for every identity: send USDC and EURC between handles, signed on the device.

Preview Every OpenPulse identity can hold wallets: passkey-signed smart accounts on Base, each with a normal address. Money is USDC and EURC. Payments are signed on the person’s device, network fees are sponsored, and a payment counts once it is on chain. OpenPulse resolves handles, quotes and records; it never holds a key.

In the browser#

TypeScript
import { createPay } from '@openpulse/sdk/pay'const pay = createPay({ api: '/api/pay', passkey: { url, key } })await pay.createWallet()                                     // one passkey promptawait pay.send({ to: '@bob', amount: '12.50', currency: 'EUR', review })const { phrase } = await pay.setupRecovery()                 // show once; never stored

From a session#

Servers and agents send through the session. A payment needs the person’s step-up assertion (su1.…) and an idempotency key; the result also wakes the session’s agent with payment.completed or payment.failed.

TypeScript
await pulse.pay.send({  amount: '1.000000',  currency: 'USD',  to: '@bob',  idempotencyKey: 'order-8812',  stepUp,                        // from the OpenPulse-hosted step-up page})

Where it leaves our edge#

Payments settle on the Base blockchain, which is outside our edge by design.