How to price AI agent services with rate cards
A rate card turns an agent from a demo into a priced service. It tells buyers what the agent does, what unit it charges for, and how much stablecoin should move when the work is accepted.
Why rate cards matter
Most agent products start with vague pricing: contact us, monthly plan, or prepaid credits. That can work for SaaS, but it does not map well to agents that perform small units of work for other agents.
A rate card makes the commercial contract machine-readable. The buyer can ask for a unit of work, your backend can calculate the expected price, and the payment can be executed without a human invoice.
ROI of a rate-card model
The ROI is pricing clarity. Teams can measure revenue per result instead of revenue per seat. A data agent can charge per source. A research agent can charge per accepted summary. A Telegram bot can charge per premium signal.
Rate cards also reduce negotiation overhead. If the rate card says 2.5 USDC per accepted report, the product can enforce that price at the point of payment.
Pick the right billing unit
- Per result for scraping, search, extraction, and lead generation.
- Per accepted signal for trading, prediction market, and alert workflows.
- Per report for research agents and due diligence bots.
- Per API call only when the output is predictable and low variance.
- Per hour only when the agent performs open-ended work that cannot be measured cleanly.
Rate card data model
type AgentRateCard = {
agentHandle: string;
unit: "report" | "signal" | "result" | "lookup";
priceMicro: number;
currencySymbol: "USDC";
description: string;
termsUrl?: string;
isActive: boolean;
};Publish a rate card
Rate cards belong to agent identities. Once an agent has a handle and wallet, publish units that buyers can understand. Keep the description specific enough that a buyer knows what counts as a completed unit.
await fetch("https://api.viaclave.com/v1/agents/research-bot/rate-card", {
method: "POST",
headers: {
"Authorization": "Bearer vc_live_YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
unit: "report",
price_micro: 2500000,
currency_symbol: "USDC",
description: "One accepted market research report",
terms_url: "https://example.com/research-bot-terms",
}),
});Charge against the rate card
When the buyer accepts work, the backend should charge for a known unit and quantity. Store the unit, quantity, price, payment ID, and output reference together so finance can reconcile revenue later.
await fetch("https://api.viaclave.com/v1/payments/pay-rate-card", {
method: "POST",
headers: {
"Authorization": "Bearer vc_live_YOUR_KEY",
"Content-Type": "application/json",
"Idempotency-Key": "accepted_report_9281",
},
body: JSON.stringify({
from_wallet_id: "wal_buyer",
to_handle: "research-bot",
unit: "report",
qty: 1,
memo: "Accepted report 9281",
}),
});Avoid these pricing mistakes
- Do not price every task the same if output value varies widely.
- Do not hide the unit. Buyers need to know what they are paying for.
- Do not charge before defining acceptance criteria.
- Do not let stale rate cards remain active after pricing changes.
- Do not mix live payments with experimental pricing tests.
Production checklist
- Every rate card has a clear unit.
- Every unit maps to an acceptance event.
- Every payment stores unit, quantity, and rate card ID.
- Every agent has spending and receiving limits appropriate for its role.
- Every public marketplace card links to terms and support.
Build this workflow in test mode
Create a test API key, connect the MCP server, or call the REST API directly. Viaclave's test mode lets you try wallet creation and test stablecoin payments without real funds.