ServiceManifest
A ServiceManifest is the declaration of a paid AI service. It tells potential payers everything they need to know to discover, evaluate, and pay for the service — what it does, who runs it, what payment methods are accepted, and how to initiate a transaction.
Every AI agent that wishes to receive payments broadcasts a ServiceManifest via the MCP tool discovery or a registry endpoint. The manifest serves as both advertisement and contract: any agent that processes it can initiate a payment flow against the declared terms.
Fields
| Field | Type | Description |
|---|---|---|
id | string (UUIDv7) | Globally unique manifest identifier |
name | string | Human-readable service name |
description | string | Short description of what the service provides |
provider | ProviderInfo | Identity and reputation of the service provider |
payment_methods | PaymentMethods | Supported payment model flags |
pricing | Pricing | Price schedules for each payment method |
accepted_channels | Channel[] | Payment channels accepted (e.g. alipay, wechat, card) |
qr_mode | string | QR generation mode — "dynamic" or "static" |
settlement_currency | string (ISO 4217) | Currency the provider receives settlement in |
endpoint | string (URL) | API base URL for payment intents and callbacks |
version | string (SemVer) | Manifest schema version |
created_at | string (ISO 8601) | Timestamp of manifest creation |
ProviderInfo
| Field | Type | Description |
|---|---|---|
agent_id | string | Unique ID of the provider agent |
display_name | string | Public-facing name of the provider |
avatar_url | string (URL) | Profile image URL |
kyc_level | string | KYC/KYB verification level — "none", "basic", "enhanced", "institutional" |
PaymentMethods
| Field | Type | Description |
|---|---|---|
one_time | boolean | Whether one-time (per-call) payments are accepted |
cumulative | boolean | Whether cumulative (post-paid billing) payments are accepted |
subscription | boolean | Whether subscription (recurring) payments are accepted |
Pricing
| Field | Type | Description |
|---|---|---|
one_time | OneTimePrice[] | Per-call pricing options |
cumulative | CumulativePricing | Cumulative billing terms |
subscription | SubscriptionPlan[] | Recurring plan definitions |
OneTimePrice
| Field | Type | Description |
|---|---|---|
amount | number | Price in minor currency units (e.g. cents) |
currency | string (ISO 4217) | Currency of the price |
label | string | Human-readable label (e.g. "per query") |
CumulativePricing
| Field | Type | Description |
|---|---|---|
billing_cycle | string | Billing period — "daily", "weekly", "monthly" |
rate_per_unit | number | Price per unit of consumption |
unit | string | Unit of consumption (e.g. "token", "request", "minute") |
SubscriptionPlan
| Field | Type | Description |
|---|---|---|
id | string | Plan identifier unique within this manifest |
name | string | Plan name (e.g. "Pro", "Enterprise") |
amount | number | Recurring price in minor currency units |
currency | string (ISO 4217) | Currency of the price |
interval | string | Billing frequency — "weekly", "monthly", "yearly" |
quota | Quota | Included usage allowance per period |
Quota
| Field | Type | Description |
|---|---|---|
limit | number | Maximum units included per billing period |
unit | string | Unit of measurement (e.g. "token", "request") |
Channel
| Value | Description |
|---|---|
"alipay" | Alipay QR payment |
"wechat" | WeChat Pay QR payment |
"card" | Credit/debit card via a 402 gateway |
"usdc" | USDC on-chain settlement |
"xrpl" | XRP Ledger payment |
JSON Example
{
"id": "01J7XYKZ1A2B3C4D5E6F7G8H9I",
"name": "Smart Summary",
"description": "AI-powered document summarization — upload any PDF and get concise summaries.",
"provider": {
"agent_id": "agent_srv_9x8y7z6w",
"display_name": "SummaryBot Inc.",
"avatar_url": "https://cdn.summarybot.ai/avatar.png",
"kyc_level": "enhanced"
},
"payment_methods": {
"one_time": true,
"cumulative": true,
"subscription": true
},
"pricing": {
"one_time": [
{
"amount": 99,
"currency": "USD",
"label": "per summary"
}
],
"cumulative": {
"billing_cycle": "monthly",
"rate_per_unit": 0.003,
"unit": "token"
},
"subscription": [
{
"id": "plan_starter",
"name": "Starter",
"amount": 999,
"currency": "USD",
"interval": "monthly",
"quota": {
"limit": 50,
"unit": "request"
}
},
{
"id": "plan_pro",
"name": "Pro",
"amount": 2999,
"currency": "USD",
"interval": "monthly",
"quota": {
"limit": 500,
"unit": "request"
}
}
]
},
"accepted_channels": ["alipay", "wechat", "card"],
"qr_mode": "dynamic",
"settlement_currency": "USD",
"endpoint": "https://api.summarybot.ai/itpay/v1",
"version": "1.0.0",
"created_at": "2026-05-27T09:00:00Z"
}
Key Behaviors
- A ServiceManifest is immutable after publication. To change pricing or terms, publish a new manifest with a new
idandversion. - The
accepted_channelsfield determines which QR standards and payment flows the provider can handle. A payer MUST check this before initiating a payment intent. qr_mode: "dynamic"means a fresh QR code is generated per payment intent.qr_mode: "static"means the same QR code is always presented and the provider identifies the payer by other means.- The
kyc_levelhelps payers assess trust. An"institutional"KYC level implies formal identity verification and may be required for high-value transactions.