Card snapshot
agents.abapays.com
·
2026-09-21 07:26:36 UTC
·
b14e6eb983d5fbac56cd28a1eef1258aadc8e880f2ac65ae76d10157ecdf703e
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"protocolVersion": "0.3.0",
"name": "AbaPay",
"description": "Non-custodial bill-payment agent. Pays airtime, mobile data, electricity, cable TV, education fees and international top-ups across 140+ countries, settled in stablecoins on Celo and Base from a wallet that has granted a bounded, revocable on-chain allowance.",
"url": "https://agents.abapays.com/api/a2a",
"preferredTransport": "JSONRPC",
"version": "1.0.0",
"documentationUrl": "https://github.com/investorphem/AbaPay#a2a",
"iconUrl": "https://agents.abapays.com/logo.png",
"provider": {
"organization": "AbaPay",
"url": "https://agents.abapays.com"
},
"capabilities": {
"streaming": false,
"pushNotifications": false,
"stateTransitionHistory": false
},
"defaultInputModes": [
"text/plain",
"application/json"
],
"defaultOutputModes": [
"text/plain",
"application/json",
"image/png"
],
"securitySchemes": {
"bearer": {
"type": "http",
"scheme": "bearer",
"description": "OAuth 2.1 access token (see /.well-known/oauth-authorization-server) or an AbaPay Agent Hub API key. A token authenticates the connection only \u2014 pay_bill additionally requires the wallet PIN on every single call."
}
},
"security": [
{
"bearer": []
}
],
"skills": [
{
"id": "describe_capabilities",
"name": "Describe capabilities",
"description": "List what AbaPay can pay (airtime, data, electricity, cable, etc.), any services currently paused, and example requests. Call this first if unsure what is supported.",
"tags": [
"discovery",
"capabilities"
],
"examples": [
"What can AbaPay pay for?"
]
},
{
"id": "check_balance",
"name": "Check wallet balance",
"description": "Check a linked wallet's stablecoin balances and remaining agent spending allowance. Works with no arguments once this connector is authorized via OAuth.",
"tags": [
"balance",
"wallet",
"stablecoin",
"celo",
"base"
],
"examples": [
"What is the linked wallet's USDC balance and approved limit?"
]
},
{
"id": "list_plans",
"name": "List purchasable plans",
"description": "List the REAL, currently purchasable plans for a service that needs one \u2014 DATA bundles, CABLE packages, or EDUCATION products (WAEC/JAMB) \u2014 with their exact codes and current VTpass prices. ALWAYS call this before pay_bill for these three services and pass back one of the returned codes as variation_code. Never guess a plan, a code, or a price \u2014 if this returns nothing usable, say so rather than i",
"tags": [
"catalogue",
"data",
"cable",
"education"
],
"examples": [
"List MTN data plans"
]
},
{
"id": "list_international_options",
"name": "Browse international options",
"description": "Browse the REAL, live international top-up catalogue (140+ countries) one level at a time. Call with no country to see supported countries. Add country to see its product types. Add product_type_id to see operators. Add operator_id too to see real, currently purchasable plans with their exact codes, foreign-currency price, and NGN-equivalent cost. ALWAYS call this before pay_bill with service: INT",
"tags": [
"international",
"airtime",
"data",
"catalogue"
],
"examples": [
"What airtime operators are available in Ghana?"
]
},
{
"id": "transaction_history",
"name": "Recent transaction history",
"description": "List recent real transactions for the linked wallet \u2014 same data as the AbaPay app's History tab (service, provider, amount, status, tx hash). Read-only, no PIN required. The interactive card's own Next/Previous buttons page through results by re-calling this tool with a different offset \u2014 pass offset yourself only when asked for something like \"the next page\" or \"transactions before that\" in plain",
"tags": [
"history",
"receipts"
],
"examples": [
"What bills were paid recently?"
]
},
{
"id": "pay_bill",
"name": "Pay a bill",
"description": "Pay a real bill \u2014 Nigerian (airtime, data, electricity, cable TV, a WAEC/JAMB education PIN) or international airtime/data across 140+ countries \u2014 from the linked wallet, settled on-chain and delivered via the same pipeline as the AbaPay app. For DATA, CABLE (when changing package), and EDUCATION, call list_plans first and use a real variation_code from it. For service: INTERNATIONAL, call list_in",
"tags": [
"payment",
"airtime",
"data",
"electricity",
"cable",
"education",
"international"
],
"examples": [
"Pay 1000 NGN MTN airtime for 08012345678"
]
},
{
"id": "pay_bill_batch",
"name": "Pay multiple bills at once",
"description": "Pay airtime or data to multiple recipients in ONE call \u2014 the same multi-recipient batch Telegram/WhatsApp/X support (\"send 500 to X and 1000 to Y\"). One PIN authorizes the whole batch. Recipients are grouped by (chain, token); each group's capacity (balance + approved agent limit) is checked against that group's own subtotal \u2014 but if ANY group is short, the ENTIRE batch is refused before anything ",
"tags": [
"payment",
"airtime",
"data",
"batch"
],
"examples": [
"Send 500 NGN airtime to 08011111111 and 1000 NGN to 08033333333"
]
},
{
"id": "schedule_bill",
"name": "Schedule a bill",
"description": "Set up a recurring or future one-off bill payment \u2014 daily/weekly/monthly airtime, data, electricity, or cable \u2014 the same automation Telegram/WhatsApp/X support. Validates exactly like pay_bill (call list_plans first for DATA, or CABLE when changing package, to get a real variation_code) and ALWAYS requires the PIN, since this creates a standing spend. Nothing is charged when this tool runs \u2014 money",
"tags": [
"payment",
"schedule",
"recurring",
"automation"
],
"examples": [
"Every Tuesday buy 200 NGN MTN airtime for 08012345678"
]
},
{
"id": "list_schedules",
"name": "List schedules",
"description": "List active recurring/one-off bill schedules for the linked wallet \u2014 same data as the AbaPay app and Telegram/WhatsApp \"show my schedules\". Read-only, no PIN required. Returns each schedule's id \u2014 pass that to cancel_schedule to remove one.",
"tags": [
"schedule",
"recurring",
"automation"
],
"examples": [
"What automations do I have set up?"
]
},
{
"id": "cancel_schedule",
"name": "Cancel a schedule",
"description": "Cancel one or more active schedules for the linked wallet. Call list_schedules first to get a real id. Pass id to cancel exactly one; pass provider to cancel every active schedule for that provider; omit both to cancel ALL active schedules for this wallet. No PIN required, matching chat.",
"tags": [
"schedule",
"recurring",
"automation"
],
"examples": [
"Cancel my MTN airtime schedule"
]
}
]
}