Ask Claude, ChatGPT or Gemini about your own spending
Create a read-only token in Pocket Clear and paste one prompt into your assistant. It reads your synced data to answer questions, build dashboards and make the custom views you've always wanted.
Read-only. Opt-in. Revocable any time. Pro with Cloud Sync.
What the assistant can and can't see
Read-only
Every endpoint is a GET. An assistant can never add, edit or delete anything in Pocket Clear.
Opt-in
Nothing is shared until you create a token. No token, no access — that is the default for every account.
Revocable, with last used
Each token shows when it was last used and from which country. Revoke it and it stops working immediately.
Expires on its own
Pick 30, 90 or 365 days when you create it. Up to five active tokens, one per assistant if you like.
Notes off by default
Your free-text notes stay out of every response unless you turn on Include notes for that token.
Your data only
In Partner Mode the token reads your own transactions, including ones your partner logged for you. Your partner's own transactions are never shared.
What is shared
Amounts, dates, categories and subcategories, payees, payment types, tags, budgets, savings goals and account balances — the data you have synced with Cloud Sync, and nothing else. No email address, no name, no device details. Notes only if you include them.
Once your assistant has fetched an answer, what it does with that data is governed by that assistant provider's own terms and settings. Pocket Clear gives it read access through your token and nothing more.
Why it needs Pro and Cloud Sync
The assistant reads the copy of your data that Cloud Sync keeps on our server. On the free plan your data never leaves your phone, so there is nothing for an assistant to read. Anything you back up is encrypted with AES-256.
Four steps, about a minute
Open Settings → Connect an AI assistant
In the Pocket Clear app on iPhone or Android (Pro), or under Connect an AI assistant on web.pocketclear.app.
Choose an expiry and whether to include notes, then tap Create
90 days is the default; notes are off unless you switch them on. The token is shown once.
Tap Copy prompt
The prompt holds your token and a link to this API's reference, so the assistant knows how to read it.
Paste it into Claude, ChatGPT, Gemini or any assistant that can fetch URLs
Then ask your question. If your assistant can't browse, open the link in the prompt yourself and paste the JSON it returns into the chat.
Claude Code, Cursor and other MCP clients
Pocket Clear also runs a read-only remote MCP server with the same data as tools. For Claude Code:
claude mcp add --transport http pocket-clear https://api.pocketclear.app/api/ai/mcp --header "Authorization: Bearer <TOKEN>"
Tools: get_profile, get_summary, list_transactions, list_categories, get_budgets, list_goals, list_accounts. Clients that can't set a header can use https://api.pocketclear.app/api/ai/mcp/t/<TOKEN>.
Example prompts
"Build a dashboard of my spending by category this year"
The assistant pulls a year summary and charts spending by category and by month.
"Which subscriptions went up?"
It compares what each subscription actually charged, month by month.
"Am I on track with my budgets this month?"
Limit, spent and remaining for every budget, with the ones you're over called out.
"Where did my money go last month?"
Top categories first, then the transactions behind the biggest one.
"Make a table of every restaurant I went to in October"
Payee, date and amount for each visit, sorted however you like.
"How much do I have across my accounts?"
Balances for every payment type, using the same maths as the app.
Read-only API, v1
Machine-readable reference for assistants: pocketclear.app/developers/api.md · OpenAPI 3.1: openapi.json
Base URL and authentication
Base URL: https://api.pocketclear.app/api/ai/v1. Tokens start with pcai_. Two equivalent ways to send one:
- Token in the path — works with any tool that can fetch a URL:
GET https://api.pocketclear.app/api/ai/v1/t/<TOKEN>/summary?month=2026-10 - Authorization header:
GET https://api.pocketclear.app/api/ai/v1/summary?month=2026-10withAuthorization: Bearer <TOKEN>
All responses are JSON with Cache-Control: no-store. Start with /me, then /summary for the current month, then answer the question. Assistants should never show the token back to the user or put it in links.
Conventions
- Amounts are plain positive numbers in the user's home currency (
currencyin/me, ISO 4217).type/kindgives the direction. - Dates:
fromandtoare inclusive local datesYYYY-MM-DDin the user's time zone.month=YYYY-MMis a shortcut for a whole month. No dates means the current calendar month; onlyfromruns to today.tz=<IANA zone>overrides the time zone. - Totals follow the app:
moneyOut= expenses,moneyIn= income + refunds,net= in − out. Transfers between the user's own accounts, lend/borrow rows and savings-goal set-asides are never income or spending; each transaction carrieskindandcountsInTotals. Spending by category nets refunds against the category they refund. - Partner Mode: only the token owner's own data, including entries a partner logged on their behalf.
- Notes appear only when the user turned on Include notes (
notesIncludedin/me). truncated: truemeans the account is very large and figures cover the most recently edited 50,000 transactions — partial numbers.
GET /me
Profile and token facts. No email or name. periodSettings are the app's view period and budget start day at the moment the token was created.
{
"app": "Pocket Clear",
"apiVersion": "v1",
"currency": "EUR",
"secondaryCurrency": null,
"timeZone": "Europe/Berlin",
"periodSettings": { "viewPeriod": "monthly", "periodStartDay": 1, "note": "..." },
"hasPartner": false,
"dataScope": "own",
"notesIncluded": false,
"readOnly": true,
"tokenExpiresAt": "2027-01-24T10:00:00.000Z",
"docs": "https://pocketclear.app/developers/api.md"
}
GET /summary?from&to (or ?month)
Totals for a range. share is the percentage of total spending. For a year view, pass from=2026-01-01&to=2026-12-31 and use byMonth.
{
"currency": "EUR",
"range": { "from": "2026-10-01", "to": "2026-10-31", "timeZone": "Europe/Berlin" },
"totals": {
"moneyIn": 3210.5, "moneyOut": 1874.2, "net": 1336.3,
"refundsIncludedInMoneyIn": 10.5,
"savingsSetAside": 200, "savingsWithdrawn": 0,
"transactionCount": 64
},
"spendingByCategory": [ { "categoryId": "…", "category": "Groceries", "amount": 412.3, "share": 22 } ],
"incomeByCategory": [ { "categoryId": "…", "category": "Salary", "amount": 3200 } ],
"byMonth": [ { "month": "2026-10", "moneyIn": 3210.5, "moneyOut": 1874.2, "net": 1336.3 } ],
"excludedFromTotals": { "transfers": 3, "loanRows": 1 },
"rules": "…",
"truncated": false
}
GET /transactions
Individual entries, newest first, in keyset pages.
| Param | Meaning |
|---|---|
from, to, month, tz | Range, as above. |
category | A category name (case-insensitive, e.g. Groceries) or id. A name that matches nothing returns an empty page with a notice. |
type | income, expense or transfer. |
q | Text search over payee, category, subcategory, payment type, tags, loan person (and notes, only when notes are included). |
limit | Page size, 1–500, default 100. |
cursor | nextCursor from the previous page; keep going until it is null. |
{
"currency": "EUR",
"range": { "from": "2026-10-01", "to": "2026-10-31", "timeZone": "Europe/Berlin" },
"count": 2,
"transactions": [
{
"id": "…", "date": "2026-10-24", "dateTime": "2026-10-24T18:12:00.000Z",
"amount": 42.9, "type": "expense", "kind": "expense", "countsInTotals": true,
"category": "Eating out", "categoryId": "…", "subcategory": "Restaurants",
"paymentType": "Visa", "payee": "Pizza Place", "tags": ["friends"]
},
{
"id": "…", "date": "2026-10-20", "dateTime": "…",
"amount": 300, "type": "expense", "kind": "transfer", "countsInTotals": false,
"category": null, "categoryId": null, "subcategory": null,
"paymentType": "Checking", "payee": null, "transferTo": "Savings account"
}
],
"nextCursor": "eyJzIjoi…",
"truncated": false
}
kind is one of expense, income, refund, transfer, loan, loan_repayment, savings_set_aside, savings_withdrawal; only expense, income and refund count toward totals. Loan rows carry loan: { "kind": "loan" | "repayment", "person": "Sam", "dueDate"? }. note appears only when notes are included.
GET /categories
{ "categories": [
{ "id": "…", "name": "Groceries", "type": "expense", "icon": "🛒", "sharedByPartner": false,
"subcategories": [ { "id": "…", "name": "Supermarket" } ] }
] }
GET /budgets?from&to (or ?month)
kind is overall, category or subcategory. spentInRange is spending over exactly the range you pass — a month for a monthly budget, a week for a weekly one. Monthly budgets with per-month amounts use the amount for the month of from. Rollover is not included.
{
"currency": "EUR",
"range": { "from": "2026-10-01", "to": "2026-10-31", "timeZone": "Europe/Berlin" },
"budgets": [
{ "id": "…", "kind": "category", "category": "Groceries", "subcategory": null,
"period": "monthly", "limit": 400, "spentInRange": 412.3, "remaining": -12.3, "percentUsed": 103.08 }
],
"note": "…",
"truncated": false
}
GET /goals
{ "currency": "EUR", "goals": [
{ "id": "…", "name": "Japan trip", "targetAmount": 3000, "currentAmount": 1250,
"remaining": 1750, "percentComplete": 41.67, "deadline": "2027-04-01" }
] }
GET /accounts
Payment types with all-time balances: opening balance + money in − money out. Transfers count on both accounts; savings set-asides are not counted (the app's default). A row named "No payment method" collects entries without one.
{ "currency": "EUR", "accounts": [
{ "id": "…", "name": "Checking", "sharedByPartner": false, "openingBalance": 1000,
"moneyInAllTime": 15400, "moneyOutAllTime": 13120.5, "balance": 3279.5 }
], "note": "…", "truncated": false }
Errors
Errors use HTTP status codes and a JSON body { "error": "<code>", "message": "…", "docs": "…" }.
| Status | error | Meaning |
|---|---|---|
| 400 | bad_request | A parameter is wrong; the message says which. |
| 401 | invalid_token | The token is wrong or incomplete. Copy the prompt again. |
| 401 | token_expired | Create a new token in Settings → Connect an AI assistant. |
| 401 | token_revoked | The owner revoked this token. |
| 403 | pro_required | Pro has lapsed; the token works again once Pro is renewed. |
| 404 | not_found | Unknown endpoint; the message lists the available ones. |
| 405 | method_not_allowed | Only GET is supported. |
| 409 | cloud_sync_off | Cloud Sync is off, so there is no data on the server. |
| 429 | rate_limited | Wait Retry-After seconds. |
| 500 | server_error | Retry once, then tell the user. |
Rate limits
60 requests a minute and 2,000 a day per token. Answers past the limit are 429 with a Retry-After header.
Frequently Asked Questions
Can an AI assistant change or delete my transactions?
No. The API is read-only: every endpoint is a GET, and there is no way to add, edit or delete anything through it.
Which assistants work?
Any assistant that can fetch a web page: Claude, ChatGPT and Gemini with web access, and most agents. Claude Code, Cursor and other MCP clients can also add Pocket Clear as a remote MCP server. If your assistant cannot browse, open the API link yourself and paste the JSON into the chat.
Does my partner's data get shared?
No. The token reads only your own transactions, including entries your partner logged on your behalf. Your partner's own transactions are never shared through it.
Are my notes shared?
Not unless you turn on Include notes when you create the token. With it off, notes are left out of every response and search never matches note text.
How do I stop an assistant reading my data?
Revoke the token in Pocket Clear → Settings → Connect an AI assistant, in the app or on web.pocketclear.app. It stops working immediately. Every token also expires on its own after 30, 90 or 365 days.
Why does it need Pro and Cloud Sync?
The assistant reads the copy of your data that Cloud Sync keeps on the server. On the free plan your data never leaves your phone, so there is nothing for an assistant to read.
Your data, your questions, your assistant
Pocket Clear is free forever. Connecting an AI assistant is part of Pro.