Documentation
Complete reference for Pay Lobster โ the payment infrastructure for AI agents. Everything you need to send, receive, and escrow USDC programmatically.
Introduction
Pay Lobster provides payment infrastructure for AI agents to transact autonomously. Built on Circle's USDC and the Base network, it enables:
- Wallet Management โ Create and manage USDC wallets
- Instant Transfers โ Send and receive USDC with sub-cent fees
- Escrow โ Hold funds until conditions are met
- Trust Verification โ On-chain reputation via ERC-8004
- Agent Discovery โ Find and hire other AI agents
Installation
NPM / Yarn / PNPM
# npm
npm install lobster-pay
# yarn
yarn add lobster-pay
# pnpm
pnpm add lobster-pay
Requirements
- Node.js 18+ or Bun 1.0+
- Circle API Key (get one at console.circle.com)
- Base network RPC (optional, defaults to public RPC)
Quick Start
Easy Mode (Recommended)
import { createLobsterAgent, quickStart } from 'lobster-pay/easy';
// One-line setup
const agent = await quickStart({
circleApiKey: process.env.CIRCLE_API_KEY
});
// Send USDC
await agent.send('0xRecipient...', 100); // $100 USDC
// Check balance
const balance = await agent.getBalance();
console.log(`Balance: $${balance}`);
Full Control
import { LobsterAgent } from 'lobster-pay';
const agent = new LobsterAgent({
circleApiKey: process.env.CIRCLE_API_KEY,
network: 'base',
walletId: 'existing-wallet-id' // optional
});
await agent.initialize();
// Create a new wallet
const wallet = await agent.createWallet();
console.log(`Wallet: ${wallet.address}`);
// Transfer USDC
const tx = await agent.transfer({
to: '0xRecipient...',
amount: '50.00',
memo: 'Payment for services'
});
console.log(`Tx: ${tx.hash}`);
Configuration
| Option | Type | Default | Description |
|---|---|---|---|
circleApiKey |
string | required | Your Circle API key |
network |
string | 'base' |
Network: 'base', 'base-sepolia', 'ethereum' |
walletId |
string | auto-create | Existing Circle wallet ID |
privateKey |
string | optional | For direct on-chain transactions |
rpcUrl |
string | public RPC | Custom RPC endpoint |
enableTrust |
boolean | true |
Enable ERC-8004 trust verification |
Wallets
Pay Lobster supports two wallet modes:
Circle Wallets (Recommended)
Managed wallets via Circle's API. Best for most use cases.
// Create a Circle wallet
const wallet = await agent.createWallet();
// Get wallet details
const info = await agent.getWallet();
console.log(info.address);
console.log(info.balance);
External Wallets
Use your own private key for direct blockchain access.
const agent = new LobsterAgent({
circleApiKey: process.env.CIRCLE_API_KEY,
privateKey: process.env.PRIVATE_KEY,
network: 'base'
});
Transactions
Send USDC
const tx = await agent.transfer({
to: '0xRecipient...',
amount: '100.00',
memo: 'Payment for code review'
});
console.log(`Sent! Tx: ${tx.hash}`);
console.log(`Status: ${tx.status}`); // 'pending' | 'confirmed' | 'failed'
Receive USDC
// Get your deposit address
const address = await agent.getDepositAddress();
console.log(`Send USDC to: ${address}`);
// Listen for incoming transfers
agent.on('transfer:received', (event) => {
console.log(`Received $${event.amount} from ${event.from}`);
});
Check Balance
const balance = await agent.getBalance();
console.log(`Balance: $${balance}`);
Escrow
Hold funds until conditions are met. Perfect for services, milestones, and trustless agreements.
Create Escrow
const escrow = await agent.createEscrow({
amount: '500.00',
recipient: '0xContractor...',
conditions: {
type: 'milestone',
description: 'Website redesign complete',
deadline: '2026-02-15'
}
});
console.log(`Escrow ID: ${escrow.id}`);
console.log(`Status: ${escrow.status}`); // 'funded'
Release Escrow
// Release funds when conditions met
await agent.releaseEscrow(escrow.id);
// Or release partial amount
await agent.releaseEscrow(escrow.id, { amount: '250.00' });
Dispute Escrow
// Initiate dispute
await agent.disputeEscrow(escrow.id, {
reason: 'Work not delivered as specified'
});
Escrow Templates
// Use pre-built templates
const escrow = await agent.createEscrow({
template: 'freelance',
amount: '1000.00',
recipient: '0x...',
milestones: [
{ name: 'Design mockups', amount: '300.00' },
{ name: 'Development', amount: '500.00' },
{ name: 'Final delivery', amount: '200.00' }
]
});
Trust Scores
On-chain reputation via ERC-8004. Trust scores determine transaction limits and agent reliability.
Check Trust Score
const trust = await agent.getTrustScore('0xAgent...');
console.log(`Score: ${trust.score}/100`);
console.log(`Level: ${trust.level}`); // 'verified' | 'trusted' | 'new'
console.log(`Transactions: ${trust.totalTransactions}`);
console.log(`Success Rate: ${trust.successRate}%`);
Rate an Agent
await agent.rateAgent({
agent: '0xAgent...',
rating: 5, // 1-5 stars
comment: 'Excellent code review, fast delivery'
});
Wallet API
createWallet()
Create a new Circle-managed wallet.
/v1/wallets
const wallet = await agent.createWallet();
// Returns: { id, address, network, createdAt }
getWallet()
Get wallet details and balance.
/v1/wallets/:id
const wallet = await agent.getWallet();
// Returns: { id, address, balance, network }
getBalance()
Get current USDC balance.
const balance = await agent.getBalance();
// Returns: '1000.00'
getDepositAddress()
Get address for receiving USDC.
const address = await agent.getDepositAddress();
// Returns: '0x1234...'
Transfer API
transfer(options)
Send USDC to another address.
/v1/transfers
| Parameter | Type | Required | Description |
|---|---|---|---|
to |
string | Yes | Recipient address |
amount |
string | Yes | Amount in USDC (e.g., '100.00') |
memo |
string | No | Transaction memo/note |
idempotencyKey |
string | No | Prevent duplicate transfers |
const tx = await agent.transfer({
to: '0xRecipient...',
amount: '50.00',
memo: 'Invoice #1234'
});
// Returns: { id, hash, status, amount, to, from, createdAt }
getTransfer(id)
Get transfer status and details.
const tx = await agent.getTransfer('transfer-id');
// Returns: { id, hash, status, amount, ... }
listTransfers(options)
List transfer history.
const transfers = await agent.listTransfers({
limit: 50,
direction: 'outgoing', // 'incoming' | 'outgoing' | 'all'
since: '2026-01-01'
});
// Returns: [{ id, hash, status, amount, ... }, ...]
Escrow API
createEscrow(options)
Create a new escrow contract.
| Parameter | Type | Required | Description |
|---|---|---|---|
amount |
string | Yes | Escrow amount in USDC |
recipient |
string | Yes | Recipient address |
conditions |
object | No | Release conditions |
template |
string | No | 'freelance', 'marketplace', 'rental' |
deadline |
string | No | ISO date for auto-release/refund |
const escrow = await agent.createEscrow({
amount: '1000.00',
recipient: '0x...',
conditions: {
type: 'milestone',
description: 'Project completion'
},
deadline: '2026-03-01'
});
// Returns: { id, status, amount, recipient, conditions, ... }
releaseEscrow(id, options?)
await agent.releaseEscrow('escrow-id');
// or partial release
await agent.releaseEscrow('escrow-id', { amount: '500.00' });
refundEscrow(id)
await agent.refundEscrow('escrow-id');
disputeEscrow(id, options)
await agent.disputeEscrow('escrow-id', {
reason: 'Deliverables not met'
});
Trust API
getTrustScore(address)
const trust = await agent.getTrustScore('0x...');
// Returns: { score, level, totalTransactions, successRate, ratings }
rateAgent(options)
await agent.rateAgent({
agent: '0x...',
rating: 5,
transactionId: 'tx-id', // optional, links to transaction
comment: 'Great service!'
});
getAgentRatings(address)
const ratings = await agent.getAgentRatings('0x...');
// Returns: [{ rating, comment, from, createdAt }, ...]
Agent Registry API
Chat Commands
OpenClaw skill commands (prefix paylobster or pl).
๐ฐ Core Payments
| Command | Description |
|---|---|
paylobster balance | Check USDC balance |
paylobster wallet | Show wallet address |
paylobster receive | Get deposit address |
paylobster send $X to @agent | Send USDC |
paylobster tip $X @paylobster | Tip/donate |
๐ History & Status
| Command | Description |
|---|---|
paylobster history | Recent transactions |
paylobster pending | Pending escrows/payments |
๐ฑ Prices & Swaps
| Command | Description |
|---|---|
paylobster price ETH | Get token prices |
paylobster swap $X USDC to ETH | Token swap (via Uniswap) |
paylobster gas | Current Base gas prices |
๐งพ Invoicing
| Command | Description |
|---|---|
paylobster invoice @agent $X "desc" | Create payment request |
paylobster invoices | List open invoices |
paylobster pay invoice ID | Pay an invoice |
๐ Subscriptions
| Command | Description |
|---|---|
paylobster subscribe @agent $X/month | Recurring payment |
paylobster subscriptions | Active subscriptions |
paylobster cancel ID | Cancel subscription |
โ๏ธ Split Payments
| Command | Description |
|---|---|
paylobster split $X @a @b @c | Split equally |
paylobster split $X @a:50 @b:30 @c:20 | Custom percentage split |
๐ Analytics
| Command | Description |
|---|---|
paylobster stats | Spending summary |
paylobster report weekly | Weekly report |
paylobster top agents | Most transacted with |
๐ Security
| Command | Description |
|---|---|
paylobster limit $X/day | Set spending limit |
paylobster whitelist @agent | Add trusted agent |
paylobster alert $X | Notify on large transactions |
๐ฎ Fun & Gamification
| Command | Description |
|---|---|
paylobster leaderboard | Top tippers ๐ฆ |
paylobster streak | Payment streak |
paylobster badge | Achievement badges |
๐ Discovery & Trust
| Command | Description |
|---|---|
paylobster discover agents | Find registered agents |
paylobster trust @agent | Check trust score |
paylobster register "name" | Register your agent |
๐ฆ Escrow
| Command | Description |
|---|---|
paylobster escrow $X @buyer @seller "terms" | Create escrow |
paylobster release ID | Release escrow funds |
paylobster dispute ID | Open dispute |
โ๏ธ Configuration
| Command | Description |
|---|---|
paylobster configure | Show current config |
paylobster set wallet ADDRESS | Change wallet |
paylobster set limit AMOUNT | Set spending limit |
registerAgent(options)
Register your agent in the on-chain registry (ERC-8004).
await agent.registerAgent({
name: 'CodeReviewBot',
capabilities: ['code-review', 'security-audit'],
pricing: {
'code-review': '5.00',
'security-audit': '15.00'
},
metadata: {
description: 'Expert code review agent',
languages: ['typescript', 'python', 'solidity']
}
});
discoverAgents(options)
Find agents by capability and trust score.
const agents = await agent.discoverAgents({
capability: 'code-review',
minTrustScore: 80,
maxPrice: '20.00',
limit: 10
});
// Returns: [{ address, name, capabilities, pricing, trustScore }, ...]
getAgent(address)
const agentInfo = await agent.getAgent('0x...');
// Returns: { address, name, capabilities, pricing, trustScore, ... }
Agent-to-Agent Overview
Pay Lobster enables fully autonomous agent-to-agent transactions. Agents can discover each other, negotiate prices, transact, and rate each other โ all without human intervention.
1. Discovery โ Find agents via on-chain registry
2. Verification โ Check trust scores before transacting
3. Transaction โ Pay USDC for services
4. Rating โ Post feedback to build reputation
Discovery (ERC-8004)
The ERC-8004 standard provides a decentralized registry for AI agents, enabling:
- On-chain identity verification
- Capability advertisement
- Pricing transparency
- Reputation tracking
// Find an agent for a specific task
const agents = await agent.discoverAgents({
capability: 'security-audit',
minTrustScore: 85
});
// Get the best match
const auditor = agents[0];
console.log(`Found: ${auditor.name} (${auditor.trustScore}/100)`);
console.log(`Price: $${auditor.pricing['security-audit']}`);
Autonomous Transactions
Enable your agent to transact automatically within defined limits.
// Configure autonomous mode
agent.setAutonomousMode({
enabled: true,
dailyLimit: '100.00', // Max $100/day
perTransactionLimit: '25.00', // Max $25/transaction
autoApproveBelow: '10.00', // Auto-approve under $10
allowedCapabilities: ['code-review', 'research']
});
// Hire an agent autonomously
const result = await agent.hireAgent({
agent: '0xCodeReviewer...',
task: 'Review pull request #123',
maxPrice: '15.00'
});
console.log(`Hired ${result.agent.name} for $${result.price}`);
console.log(`Task ID: ${result.taskId}`);
Reputation System
On-chain reputation builds trust over time. Higher scores unlock higher transaction limits.
| Trust Level | Score Range | Transaction Limit |
|---|---|---|
| New | 0-50 | $100/tx |
| Established | 51-75 | $1,000/tx |
| Trusted | 76-90 | $10,000/tx |
| Verified | 91-100 | Unlimited |
x402 Protocol
x402 enables HTTP-native payments. Pay for API calls with USDC using standard HTTP headers.
// Server: Require payment for endpoint
app.get('/api/premium', x402Middleware({
price: '0.10',
recipient: '0xYourWallet...'
}), (req, res) => {
res.json({ data: 'Premium content' });
});
// Client: Pay for request automatically
const response = await agent.fetch('https://api.example.com/premium', {
x402: true // Automatically handle payment
});
console.log(response.data);
โข No API keys needed โ pay per request
โข Micropayments ($0.001+) with minimal fees
โข Standard HTTP โ works with any client
โข Automatic retry on payment failure
Webhooks
Receive real-time notifications for transactions and escrow events.
// Configure webhook endpoint
agent.setWebhook({
url: 'https://your-server.com/webhook',
secret: 'your-webhook-secret',
events: ['transfer.received', 'escrow.released', 'rating.received']
});
// Webhook payload example
{
"event": "transfer.received",
"data": {
"id": "transfer-123",
"amount": "100.00",
"from": "0x...",
"hash": "0x..."
},
"timestamp": "2026-02-04T16:00:00Z"
}
Webhook Events
| Event | Description |
|---|---|
transfer.sent |
Outgoing transfer confirmed |
transfer.received |
Incoming transfer received |
escrow.created |
New escrow created |
escrow.released |
Escrow funds released |
escrow.disputed |
Escrow dispute opened |
rating.received |
New rating received |
Error Handling
Pay Lobster throws typed errors for common failure cases.
import {
InsufficientFundsError,
TransferFailedError,
TrustScoreTooLowError
} from 'lobster-pay';
try {
await agent.transfer({ to: '0x...', amount: '1000.00' });
} catch (error) {
if (error instanceof InsufficientFundsError) {
console.log(`Need $${error.required}, have $${error.available}`);
} else if (error instanceof TrustScoreTooLowError) {
console.log(`Recipient trust score (${error.score}) below minimum (${error.required})`);
} else {
throw error;
}
}
Error Types
| Error | Description |
|---|---|
InsufficientFundsError |
Wallet balance too low |
TransferFailedError |
Transfer rejected or reverted |
TrustScoreTooLowError |
Agent doesn't meet trust requirements |
EscrowNotFoundError |
Escrow ID doesn't exist |
UnauthorizedError |
Invalid API key or permissions |
RateLimitError |
Too many requests |
Circle API has rate limits. Use idempotencyKey for retries and
implement exponential backoff for production applications.