← Published 2026-09-25 · 6 min read
English Deutsch

Connect Your Own AI: Categorize Bank Transactions Without Handing Over Your Data

A key lying on a wooden table.

Every finance app has an AI button now. You press it, and your transactions travel to whichever AI company the app signed a contract with. You did not pick that company, and you cannot take it back.

Pinke does this the other way around. There is no AI inside Pinke, no API key and no model, and Pinke makes no calls to any provider. Instead you can hand your assistant a key to a small, locked room, and take the key back whenever you like.

Two words before we start. An LLM is the thing behind ChatGPT or Claude: a program that reads text and writes text. A token here is a long random password that grants access to one specific thing, in this case a narrow slice of your Pinke data.

The problem this solves: categorizing bank transactions

Rules are the heart of Pinke, as Rules That Stick explains. A rule says "when the text contains netflix, set category entertainment", and from then on your Netflix charges land in the right place forever. Consistent categories are what make your numbers comparable month over month.

The catch: after an import you often sit on a pile of transactions no rule matched. SUMUP *BACKHAUS, SQ *KAFFEEROESTEREI, some payment provider string with an order number glued to the end. Writing twenty rules by hand is tedious. It is also exactly the kind of boring pattern work an LLM is good at.

The question for Pinke was whose AI to use, and how much it gets to see.

How Pinke answers that

You bring your own LLM, the data stays yours, and Pinke only provides the API.

Pinke exposes a small documented interface. Your assistant reads it, looks at your uncategorized payee groups, and writes rules back. Pinke itself never talks to an AI provider; the connection runs between you, your chat, and your Pinke.

That gives you three things a built-in AI cannot:

  1. You choose the provider. ChatGPT, Claude, a local model on your own machine, whatever agent you trust. Or none at all.
  2. Access is off by default. Without a token, every data endpoint answers 401 Unauthorized. Knowing the address of your Pinke gets nobody anywhere.
  3. You can end it in one click. Revoke, and access stops immediately.

The walkthrough

1. Create a token

Go to /rules and find the ✨ AI access section. Before you generate anything, it says:

> No access token. Your data is not reachable by any assistant.

Click Generate access token. You get a long string and this note:

> Your access token. Copy it now, it is shown only once. It expires after 7 days and can be revoked below at any time.

Copy it. Pinke stores only a hash of it, so it genuinely cannot show it to you again.

2. Give your assistant the link

Most chat interfaces cannot make arbitrary API calls, but they can fetch a URL. So Pinke bundles everything into one address:

https://your-pinke-host/api/ai/context?token=YOUR_TOKEN

Paste that into your chat and say: "Read this and propose categorization rules."

What comes back is the manual (the same one that is public at /api/ai/llm.txt, so you can read it yourself first), followed by your data. The manual tells the assistant the rule format, the matching operators, and house guidelines like "strip order numbers out of the match text" and "skip clusters you cannot classify with confidence."

3. What your assistant actually sees

This is the part worth being precise about. Three lists, nothing else:

  • Unmatched clusters. Uncategorized transactions grouped by payee, at most 30 groups, and only groups with at least two transactions. Per group: the payee string, how many there are, one sample description trimmed to 120 characters, and the rounded average amount. Something like {"payee": "SUMUP *BACKHAUS", "count": 6, "typical_amount": -4.4}.
  • Category names you already use, up to 40 of them, so the assistant reuses groceries instead of inventing Food & Supermarkets.
  • Your existing rules, so it does not propose one you already have.

Not included: your IBANs, your balances, your income, your full transaction history, or individual dated transactions. The token also cannot log in to Pinke; it opens the AI endpoints and nothing else.

4. It proposes, and can write

Your assistant comes back with something like: "SUMUP *BACKHAUS appears 6 times at around €4.40, which reads like a bakery. Rule: text contains BACKHAUS β†’ category groceries, subcategory bakery."

If your setup can send POST requests (an agent with tool access, a GPT Action, a small script), it can create the rule directly. If you are in a plain chat window that can only fetch URLs, you get the proposal and enter it on /rules yourself. Both paths work.

Rules written through the API go through exactly the same validation as rules you type by hand. A malformed match is rejected with a 400 before it touches anything. There is no privileged AI path into your data.

5. You audit

Every rule an assistant creates is tagged ai-created. Automatically, even if the assistant does not ask for it.

Open /rules and each of your rules reads as a sentence: "Set group daily_life, category groceries, subcategory bakery, and tags ai-created." The tag is right there. If a rule is wrong, the trash icon removes it, and the magnifier tests it against your history first and tells you how many rows it hits. The assistant proposes, you keep or delete, and nothing is applied without you seeing it.

Beyond rules: tax review

The same access covers tax work. Your assistant can pull expenses that are flagged maybe_relevant or not yet labelled, judge them, and write back either tax_relevant or maybe_relevant, plus a short note that shows up in the note column on /visualize/tax-overview, the page Understanding Tax Categories is about. Anything else it sends clears the label instead of writing something unexpected.

These rows do carry dates and amounts, because a tax judgement is impossible without them. Still no IBANs, no balances.

The fine print

Here are the awkward parts of the privacy story:

Your data goes to the AI service you chose. If you paste the context link into ChatGPT, the clusters end up at OpenAI under their terms. Pinke is not in that conversation and cannot protect it. That is your choice and your provider, which is the point, but it is not the same as nothing leaving your machine.

The token ends up in a chat log. That is why it dies on its own after 7 days, even if you forget. Treat it like a password. Revoke it when the session is done; that is one click on /rules.

One token at a time. Generating a new one invalidates the old one.

Nothing happens without your say-so. No token means no access. Access is not a setting buried in a menu that quietly defaults to on.

What changes for you

The dull part of categorization (staring at SQ *KAFFEEROESTEREI and deciding what it is) moves to a machine that is good at it. The judgement stays with you: every rule tagged, testable, deletable.

And when you are done, you revoke the token and the room locks again. Pinke goes back to what it is the rest of the time: your data, on your terms, with no AI in it at all. The first token is one click away on /rules, for the next time an import leaves you with a pile of unmatched rows.

Frequently asked questions

Can I use ChatGPT to categorize my bank transactions?

Yes. Pinke exposes a small read-only API that your own assistant can fetch with a token, so ChatGPT, Claude or a local model can look at your uncategorized payee groups and propose categorization rules. Pinke itself never calls an AI provider; the connection runs between you, your chat and your Pinke.

Does Pinke send my financial data to an AI company?

No. There is no API key, no model and no provider calls inside Pinke. Data only leaves when you personally hand your own assistant an access token, and then it goes to the provider you picked, under their terms.

What data can an AI assistant actually see in Pinke?

Three lists: uncategorized transactions grouped by payee (max 30 groups, at least two transactions each, with a sample description and the rounded average amount), the category names you already use, and your existing rules. No IBANs, no balances, no income, no full transaction history.

How do I revoke an AI access token?

Open /rules, find the ✨ AI access section and click revoke, and access stops immediately. Tokens also expire on their own after 7 days, and generating a new one invalidates the old one.

How do I know which rules the AI created?

Every rule written through the API is automatically tagged ai-created, even if the assistant does not ask for it. On /rules you can read each rule as a sentence, test it against your history with the magnifier, and delete it with one click.

Read next

Turn your bank statements into insights.