In Spain, every invoice now has to be tamper-proof and reported to the tax agency. That's Verifactu, and building it yourself eats a quarter of engineering time. BeeL is one API that just does it. Point us at your payments and each charge becomes a legal invoice, filed with the tax agency and emailed to your customer. One click on Stripe, no code — or wire the API into your product. REST, SDKs, and a CLI so Claude Code or any AI agent can invoice. Free sandbox, no limits.
No reviews yetBe the first to leave a review for BeeL
Maker
📌
Hi Product Hunt!
From January 2027, Spain requires every invoice to be digitally signed, chained to the previous one with a hash, QR-coded and filed with the tax agency. Every SaaS that invoices on behalf of its users inherits that problem too.
BeeL. is that layer, as infrastructure. One POST and you get a legally valid invoice, filed with the tax agency, PDF generated and emailed to your customer. No certificates to manage. Or connect Stripe in a click and every charge invoices itself, zero code.
Multi-tenant from day one: one account, from 1 to thousands of tax IDs, same integration. Predictable JSON, native idempotency, signed webhooks, SDKs, and a free unlimited sandbox.
Report
@pvallsv nice launch congrats🙌love that you built webhooks for this. Are webhook payloads signed so we can verify they actually came from BeeL?
Report
Maker
@vikramp7470 Thanks! 🙏 Yep, everything we send is signed. The header looks like this: BeeL-Signature: t=,v1= v1 is an HMAC-SHA256 of ".", keyed with the webhook secret you get when you create the subscription. We only show it once, so store it somewhere safe. Two gotchas when you implement it. The HMAC covers the raw bytes, so verify before anything parses the JSON (express.json() will bite you here). And reject anything where the timestamp is more than ~5 min old, otherwise replays go through. Use a constant time compare too. If you're on Node, @beel_es/sdk already does all of this for you. There's also a BeeL-Event-Id header. Retries and manual redeliveries keep the same id, so you can dedupe on it. And you can list deliveries via the API if you ever want to see what we actually sent and replay it. Rest is at docs.beel.es. Ping me if anything looks off.
@pvallsv nice launch congrats🙌love that you built webhooks for this. Are webhook payloads signed so we can verify they actually came from BeeL?
@vikramp7470 Thanks! 🙏 Yep, everything we send is signed. The header looks like this: BeeL-Signature: t=,v1= v1 is an HMAC-SHA256 of ".", keyed with the webhook secret you get when you create the subscription. We only show it once, so store it somewhere safe. Two gotchas when you implement it. The HMAC covers the raw bytes, so verify before anything parses the JSON (express.json() will bite you here). And reject anything where the timestamp is more than ~5 min old, otherwise replays go through. Use a constant time compare too. If you're on Node, @beel_es/sdk already does all of this for you. There's also a BeeL-Event-Id header. Retries and manual redeliveries keep the same id, so you can dedupe on it. And you can list deliveries via the API if you ever want to see what we actually sent and replay it. Rest is at docs.beel.es. Ping me if anything looks off.
Zernio
great software!
@paletmiki thanks miki!!