Developer platform
Fake peer-to-peer card transactions for testing. No authentication, no API keys, no rate limits. Everything lives under https://bank.decagon.tools.
This is the fastest way to use SimplePay. The MCP server URL is:
https://bank.decagon.tools/api/public/mcp
claude mcp add --transport http simplepay https://bank.decagon.tools/api/public/mcp
Restart Claude Code (or run claude mcp list to confirm it registered). Then just ask in plain language, for example:
Add this to .mcp.json (project) or claude_desktop_config.json:
{
"mcpServers": {
"simplepay": {
"type": "http",
"url": "https://bank.decagon.tools/api/public/mcp"
}
}
}The MCP server exposes three tools: list_users (discover user IDs) and get_transactions (lookup by user ID with optional date range and merchant filter), plus get_transaction for a single payment. Full details are in the reference below.
One endpoint, no auth. Pass a user ID and optional date range:
curl "https://bank.decagon.tools/api/public/transactions?user_id=usr_toby_tyler_2254&from=2026-09-01&to=2026-09-30"
# SimplePay API
Fake peer-to-peer card transaction data for testing. No authentication, no API keys, no rate limits.
Base URL: `https://bank.decagon.tools`
## Connect the MCP server (Claude Code)
SimplePay exposes a Model Context Protocol server so agents such as Claude Code can call it directly as a tool. No authentication.
- MCP endpoint: `POST https://bank.decagon.tools/api/public/mcp` (streamable HTTP / JSON-RPC 2.0)
- `GET https://bank.decagon.tools/api/public/mcp` for a plain JSON description of the server.
### Option 1 — one terminal command
```bash
claude mcp add --transport http simplepay https://bank.decagon.tools/api/public/mcp
```
That's it. Restart Claude Code (or run `claude mcp list` to confirm), then ask it things like "list the SimplePay users" or "get Toby Tyler's transactions for September 2026".
### Option 2 — config file
Add this to `.mcp.json` (project) or `claude_desktop_config.json`:
```json
{
"mcpServers": {
"simplepay": {
"type": "http",
"url": "https://bank.decagon.tools/api/public/mcp"
}
}
}
```
### MCP tools
**`list_users`** — no arguments. Lists every person with their string user ID, name, account number, email and phone. Use this first to discover a `user_id`.
**`get_transactions`** — look up transactions by user ID and date range.
| Argument | Required | Notes |
| --- | --- | --- |
| `user_id` | yes | String user ID (e.g. `usr_toby_tyler_2254`) or internal UUID. |
| `from` | no | Inclusive start date/time, ISO 8601. |
| `to` | no | Inclusive end date/time, ISO 8601. |
| `merchant_name` | no | Filter by counterparty/merchant name, case-insensitive partial match. |
| `limit` | no | 1–1000, default 500. |
**`get_transaction`** — fetch one transaction's full details. Single required argument `transaction_id` (the `transaction_id`/`id` returned by `get_transactions`).
All tools return JSON text content plus `structuredContent` with the same shape as the matching REST endpoint. Failures come back as a tool result with `isError: true` and an `error` message.
### Raw JSON-RPC example (no MCP client needed)
```bash
curl -X POST "https://bank.decagon.tools/api/public/mcp" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_transactions","arguments":{"user_id":"usr_toby_tyler_2254","from":"2026-09-01","to":"2026-09-30"}}}'
```
Supported methods: `initialize`, `tools/list`, `tools/call`, `ping`.
## GET /api/public/transactions
Returns every transaction for one person, newest first.
### Query parameters
| Name | Required | Notes |
| --- | --- | --- |
| `user_id` | yes | The person's string user ID (e.g. `usr_toby_tyler_2254`). The internal UUID also works. Alias: `userId`. |
| `from` | no | Inclusive start date/time, ISO 8601 (`2026-09-01` or `2026-09-01T00:00:00Z`). Alias: `start_date`. |
| `to` | no | Inclusive end date/time, ISO 8601. Alias: `end_date`. |
| `merchant_name` | no | Filter by counterparty/merchant name, case-insensitive partial match. Alias: `merchant`. |
| `limit` | no | 1–1000, default 500. |
### Example
```bash
curl "https://bank.decagon.tools/api/public/transactions?user_id=usr_toby_tyler_2254&from=2026-09-01&to=2026-09-30"
```
### Response
```json
{
"user_id": "usr_toby_tyler_2254",
"user_name": "Toby Tyler",
"account_number": "7131463462",
"date_range": { "from": "2026-09-01", "to": "2026-09-30" },
"count": 1,
"transactions": [
{
"id": "a7963676-9d48-4d4c-b9e8-191d7ba9d4ec",
"transaction_id": "a7963676-9d48-4d4c-b9e8-191d7ba9d4ec",
"amount": 42.18,
"date": "2026-09-16T16:51:14.317364+00:00",
"merchant_name": "Jordan Avery",
"account_type": "business",
"type": "USD",
"currency_code": "USD",
"status": "posted"
}
]
}
```
### Field reference
- `id` / `transaction_id` — the transaction's unique ID (same value, both keys are always present). Use it with `GET /api/public/transactions/{transaction_id}`.
- `amount` — number. Up to 8 decimal places for crypto, 2 for USD.
- `date` — ISO 8601 timestamp of the transaction.
- `merchant_name` — counterparty (a person for p2p transfers, or a merchant).
- `account_type` — `business` | `merchant`.
- `type` — `USD` | `crypto`.
- `currency_code` — `USD`, `BTC`, `ETH`, `USDC`, `SOL`.
- `status` — `pending` | `posted` | `declined` | `refunded`.
### Errors
| Status | Body | Meaning |
| --- | --- | --- |
| 400 | `{"error":"user_id query parameter is required"}` | Missing `user_id`. |
| 404 | `{"error":"Unknown user_id"}` | No person with that ID. |
| 500 | `{"error":"..."}` | Server-side failure. |
CORS is open (`Access-Control-Allow-Origin: *`); `OPTIONS` returns 204.
## GET /api/public/transactions/{transaction_id}
Returns the full details of a single transaction, including which person it belongs to. No query parameters, no auth.
```bash
curl "https://bank.decagon.tools/api/public/transactions/a7963676-9d48-4d4c-b9e8-191d7ba9d4ec"
```
```json
{
"transaction": {
"id": "a7963676-9d48-4d4c-b9e8-191d7ba9d4ec",
"transaction_id": "a7963676-9d48-4d4c-b9e8-191d7ba9d4ec",
"amount": 42.18,
"date": "2026-09-16T16:51:14.317364+00:00",
"merchant_name": "Jordan Avery",
"account_type": "business",
"type": "USD",
"currency_code": "USD",
"status": "posted",
"created_at": "2026-09-16T16:51:14.317364+00:00",
"user_id": "usr_toby_tyler_2254",
"user_name": "Toby Tyler",
"account_number": "7131463462"
}
}
```
| Status | Body | Meaning |
| --- | --- | --- |
| 400 | `{"error":"Invalid transaction id"}` | Not a valid transaction ID. |
| 404 | `{"error":"Unknown transaction id"}` | No transaction with that ID. |
## Machine-readable endpoints
- `GET https://bank.decagon.tools/api/public/docs` — this document as Markdown (`?format=json` for JSON).
- `GET https://bank.decagon.tools/api/public/openapi.json` — OpenAPI 3.1 spec.
- `POST https://bank.decagon.tools/api/public/mcp` — MCP server (see above).