Rails
Install

Install AbaPay as a skill

One command adds AbaPay to any agent host that speaks the skills convention (Claude Code included). Everything below is real — the same live server the rest of this site demos.

1

Install the skill

From a terminal, in any project where your agent (Claude Code, or another skills-aware host) runs:

Terminal
npx skills add https://agents.abapays.com

This fetches agents.abapays.com/skill.md directly. Claude Code drops it into .claude/skills/ automatically; no config to hand-edit.

2

Just ask, in plain language

No new syntax to learn — once installed, your agent reads the skill and knows both paths in. Try prompts like these:

“Pay ₦1000 of MTN airtime to 08012345678 using AbaPay's x402 rail from my wallet.”
“Link my wallet to AbaPay with PIN 123456, then check my USDT balance on Celo.”
“Using AbaPay, pay my DSTV cable bill and my electricity bill in one batch.”
“Set up a monthly AbaPay schedule for ₦2000 MTN data on the 1st of each month.”

3See it work — zero setup (x402)

This is exactly what your agent does after step 2 for the zero-setup path — no account, no PIN. Edit the bill and send it for real; it's a live probe against production, so it always returns a genuine price.

Try it — live

Edit the bill, hit send — a probe against production with no payment attached returns a 402 challenge naming the live price. Nothing here moves money.

{
  "serviceID": "mtn",
  "serviceCategory": "AIRTIME",
  "network": "MTN",
  "billersCode": "08012345678",
  "nairaAmount": 1000,
  "token": "USDC",
  "blockchain": "CELO",
  "wallet_address": "0xYourAgentWallet"
}

4See it work — linked wallet (MCP)

For the fuller tool catalog, your agent calls these same 11 tools. Read-only ones below send for real; pay_bill and friends show the exact request instead — never fired from a public page.

Try it — live

Pick a tool, fill in values, and this calls the production MCP server. Read-only tools send for real; anything that moves money or state shows the exact request instead of a Send button.

This tool takes no parameters.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "describe_capabilities",
    "arguments": {}
  }
}
first real payment — end to end Real session
$npx skills add https://agents.abapays.com
You: “Pay ₦1000 MTN airtime to 08012345678 with AbaPay, from my wallet.”
→ Agent reads the skill, picks the x402 path (no account needed)
✓ POST /api/pay/x402 → 402 Payment Required, price named
✓ Signs EIP-3009 transferWithAuthorization with your wallet's own key
✓ Retries with X-PAYMENT header → 200 SUCCESS, tx_hash returned
Agent: “Paid — airtime is on its way. Tx: 0x91a3...4f2c”

That's the whole install-to-payment loop. Full parameter reference for every tool: Tools. Every way a call can fail: Error codes. Want it in code instead of a skill: abapay-sdk .