Most autoposters hold an Anthropic API key.
S4L holds your OAuth token instead.
That one choice is the difference between a bundled SaaS invoice with AI costs rolled in, and a clean Anthropic invoice in your own console with a VAT ID field you fill in yourself. For an EU indie dev, that is not cosmetic, it is the shape of your reverse-charge paperwork for the year.
the uncopyable bit
The line that decides whether you get a reseller bill or an Anthropic bill.
It sits in scripts/post_reddit.py, line 309, and in three sister files. Every S4L pipeline that spawns Claude Code strips the API key out of the child process before running, so the CLI falls back to OAuth against whatever Claude Code subscription is already signed in on the machine. The bill stays on your side of the wire.
The same env.pop call appears in post_github.py (line 233), engage_reddit.py (line 195), and engage_github.py (line 236). Four files, four identical comments: ensure claude uses OAuth, not API key. That is the architecture in a sentence.
What the invoice chain actually looks like
On the left, the things that drive AI inference cost in an autoposter. In the middle, the place that holds the auth. On the right, who you pay and how VAT lands. Trace any input: it ends on an Anthropic invoice, not an S4L one.
authentication choice -> invoice path
Fields your Anthropic invoice already carries
Stripe generates the Anthropic invoice. These are the fields a typical EU tax office will expect to see on any electronically supplied service invoice. They are all there by default, once you add a valid VAT ID.
how many places S4L touches an Anthropic API key
You can grep for it. The four scripts that matter explicitly strip ANTHROPIC_API_KEY out of the subprocess environment before calling claude -p. There is no server-side prepay bucket, no shared key, no orchestration layer buying inference in bulk and marking it up. Which is also why there is no S4L line on your AI invoice, because there is no S4L-side AI invoice.
Verify it yourself in 30 seconds
If you are nervous about a tool silently holding an API key, confirm the effective environment the pipeline runs under. On a machine with S4L installed:
S4L's run-*.sh scripts source ~/social-autoposter/.env before spawning Claude, but none of the default env files reference an Anthropic key. If you ever accidentally export one in your shell, the env.pop call in the four Python scripts still removes it from the child process before claude -p sees it.
Two invoice shapes, same product category
Autoposters that hold their own ANTHROPIC_API_KEY produce one shape. Autoposters that passthrough your Claude Code OAuth produce another. For EU indie devs, the shapes have different tax consequences.
| Feature | Reseller autoposter | S4L (passthrough) |
|---|---|---|
| Who bills you for AI inference | The SaaS tool (it holds the API key, pays Anthropic, marks up, invoices you) | Anthropic directly, on your own Claude Code OAuth subscription |
| Where you enter a VAT ID | Tool's billing page (if the tool vendor is EU-registered and supports reverse-charge) | console.anthropic.com -> Settings -> Billing (Anthropic is already wired for reverse-charge) |
| What the invoice line item says | 'Pro plan', 'AI credits', 'API usage' bundled with the software service | 'Claude' (or 'API usage') separated from any software you paid for, itemised by Anthropic |
| Reverse-charge eligibility | Depends on the tool vendor's jurisdiction and tax setup, often not available | Applies to Anthropic's electronically supplied service at the usual B2B EU rate, 0% with a valid VAT ID |
| If you want to stop using the tool | You lose access to the AI spend history, it never lived in your Anthropic console | Your full AI invoice history stays in the Anthropic dashboard regardless of tool |
| Double-taxation risk | Possible if the reseller is outside the EU and charges VAT on top of already-VAT-inclusive API cost | One invoice, one VAT calculation, one reverse-charge line, no stack |
What a run logs when the key is stripped
The reddit pipeline, one iteration. Notice the claude -p call announces OAuth, not API key, and the invoice side-effect is a metered usage entry in your Anthropic console, not a line on an S4L bill.
The end-of-quarter checklist
If you run an autoposter in the EU and want clean paperwork for the next VAT return, this is the shortest path. It assumes you are using S4L or a similar passthrough-OAuth tool. If your tool is a reseller, replace every Anthropic reference below with the reseller's billing dashboard.
What to file before the next return
- Open console.anthropic.com, Settings, Billing, confirm your EU VAT ID is on file
- Download every Anthropic invoice for the period, confirm the reverse-charge line is present
- Repeat for claude.ai if you pay Pro or Max there, it is a separate invoice stream
- For each bring-your-own-key service (Neon, Moltbook, Resend), check the same VAT ID is applied
- Save the four invoice streams to your bookkeeping, not one bundled one
- Confirm no autoposter or SaaS tool appears in the AI spend column, if it does, trace which key it is using
Running an autoposter in the EU and want the tax paperwork clean?
We built S4L as a passthrough tool so the Anthropic invoice stays yours. Book 20 minutes and we will walk through how that maps to your stack.
Anthropic VAT, indie devs, and social tools: common questions
Why does the way my autoposter calls Anthropic change my VAT at all?
Because EU VAT on electronically supplied services follows the invoice, not the software. If your autoposter holds an Anthropic API key in its backend, the tool is the customer Anthropic bills, and the tool is the supplier that bills you. That puts two VAT lines in the chain: Anthropic -> tool, and tool -> you. If instead the autoposter runs on your own Claude Code OAuth subscription, Anthropic bills you directly and the tool never handles the inference cost. S4L does the second by design, which is why this page exists at all.
How can I tell whether a tool holds its own API key or uses my subscription?
The fastest check: look for a field in the tool's onboarding that asks for ANTHROPIC_API_KEY, or a 'bring your own key' toggle. If it is required, the tool is probably server-side calling Anthropic with that key. S4L does the opposite. Four of its Python scripts (post_reddit.py, post_github.py, engage_reddit.py, engage_github.py) include the line env.pop('ANTHROPIC_API_KEY', None) before spawning claude -p, which forces the Claude Code CLI to authenticate through OAuth against your Claude subscription. You can grep the source to confirm.
If I run the whole thing locally, do I still need to add a VAT ID anywhere?
Yes, on your Anthropic console if you are an EU business. Go to console.anthropic.com, open Settings, then Billing, and click Update next to your payment method. There is a Tax or VAT ID field in the payment form. Adding a valid EU VAT ID switches future invoices to 0% VAT with a reverse-charge note. The same applies to claude.ai if you subscribe to Claude Pro or Max on that side. Anthropic processes exemptions prospectively, so invoices before the change keep whatever rate was charged at the time, you have to email support to amend them.
What if I am using Claude Code on a Max subscription, does the passthrough still work?
It works the same. Claude Code CLI authenticates via OAuth against either Pro, Max, or Team. When S4L's scripts call claude -p, they inherit that OAuth session, not any API key. The distinction the tax office cares about is the supplier on the invoice, not the tier. Max and Pro invoices both come from Anthropic, both have a VAT ID field, both can be reverse-charged if you are an EU business with a valid VAT number on file.
Is the Anthropic invoice enough documentation if a tax authority asks where my AI spend went?
For EU indie devs treating Anthropic as a deductible business expense, the Stripe-generated Anthropic invoice carries the seller details, buyer details (including your VAT ID once you add it), the reverse-charge note where applicable, and a line item naming the service. That is the standard EU invoice shape. You do not need S4L to issue a separate AI line because S4L never handles that spend. Keep the Anthropic invoice and the log of what you ran through it, same way you would with any other electronically supplied service.
What about the rest of the stack, Neon, Moltbook, Resend? Does S4L resell those?
No. Every third-party dependency in S4L is bring-your-own. Neon Postgres is connected via a DATABASE_URL you own. Moltbook uses your API key. Resend uses your API key. The installer creates a blank .env template and asks you to fill it in yourself, meaning the invoices for all of those services sit in your own vendor dashboards with your own VAT ID on them. S4L itself is open source and installed via npx. There is no S4L-branded bundled bill in this picture.
What about the posts database, does that move my data to a US supplier for VAT purposes?
The posts table is in your Neon project. Neon is a separate vendor with its own invoice, its own VAT handling, and its own VAT ID field. That is a separate compliance question from the Anthropic one. For an EU indie dev it means you add your VAT ID to Neon the same way you did with Anthropic, and treat them as two distinct reverse-charge lines in your bookkeeping. S4L just writes to whatever DATABASE_URL you configured.
I am not in the EU, does any of this matter to me?
Less directly. Outside the EU, the reverse-charge mechanism does not apply, but the same principle holds: an autoposter that passes through your OAuth subscription keeps your AI spend on an Anthropic invoice that belongs to you. That matters for deductibility, record-keeping, and whether you can move to a different tool without losing invoice history. UK VAT, Australian GST, and Canadian GST/HST all use analogous mechanisms, each of which Anthropic supports on the billing form.