Base URL
https://freebillgen.com/api/v1
Authentication
Every request uses a Bearer token. Create one under Settings → API keys, give it the per-resource read/write scopes it needs, set an optional expiry, and send it on each request:
Authorization: Bearer <your-api-key>Requests are authenticated to the account that created the key and checked against its assigned scopes. Keep the token secret and revoke it if it is exposed or no longer needed.
What you can do
- Read invoices, clients, companies, payments and recurring schedules
- Create and update them (write API - Pro)
- Pull VAT and aging reports as JSON
- Read the same bounded Next actions queue used by the dashboard
- Read supplier e-invoice files you manually uploaded to the Inbox (not a Peppol/email receiving endpoint)
- Download generic OASIS UBL and UN/CEFACT CII mappings for review (not profile-validated)
- Register webhook endpoints for invoice and payment events (Pro)
- Idempotency-Key on supported writes - changed request data under the same key returns 409
- Cursor pagination via links.next, tunable with per_page (max 100)
- Let AI agents read any shared invoice - schema.org/Invoice JSON-LD, plus Accept: application/json or text/markdown on every signed share link
- No-auth, read-only MCP server at https://freebillgen.com/api/mcp (get_invoice, verify_invoice) for AI agents
Conventions
- Idempotency
- On supported create and action calls, send a unique Idempotency-Key. Retrying identical request data replays the original success; changed request data returns 409.
- Pagination
- Persisted resource lists are cursor-paginated - follow links.next (or pass ?cursor=...), and tune ?per_page= (max 100). The bounded action feed reports its limit and truncated state.
- Money
- Monetary amounts are exact JSON strings formatted to the currency's ISO 4217 scale, such as "121.00" for EUR or "500" for JPY. Unit prices can retain additional input precision.
- IDs
- Every resource is addressed by an opaque id, never a sequential number.
Example: list your invoices
curl https://freebillgen.com/api/v1/invoices \
-H "Authorization: Bearer $FREEBILLGEN_API_KEY"
Open the full interactive API reference →
Invoice API questions
Is the invoice API free?
Yes - the read API is included in the free tier at no cost. The write API and outbound webhooks are included in tax-inclusive €49 Lifetime Pro: one payment, with no monthly fee or annual renewal.
How do I authenticate?
Create a Bearer token under Settings -> API keys, assign it read/write scopes per resource, and send it as an Authorization: Bearer header on every request. Keys are scoped to your own account and can be revoked or expired.
Can I create invoices programmatically?
Yes, via the write API, which is part of the Pro add-on. It produces the same professional invoices as the web app, with sequential numbering and configurable VAT handling applied server-side. The API does not certify local-law compliance.
How do I avoid creating duplicate invoices on retry?
Send a unique Idempotency-Key on the create call. Retrying identical request data with that key returns the original result. Reusing it with changed request data returns 409 instead of silently replaying a different invoice.
Can I read the invoices I have received?
Yes, free. GET /api/v1/inbox lists supported UBL/CII supplier files that you manually uploaded and FreeBillGen parsed, with the original retained for audit; GET /api/v1/inbox/{id} returns one. Syntax recognition is not profile validation, and these endpoints do not make FreeBillGen a Peppol, government-network, or email receiving endpoint.
Can an AI agent read an invoice without an account?
Yes. Every invoice you share by its signed public link is agent-readable on the same URL: the page embeds schema.org/Invoice JSON-LD, and sending Accept: application/json returns a structured invoice (parties, line items, totals, balance due, payment options) while Accept: text/markdown returns a clean low-token rendering. There is also a no-auth, read-only Model Context Protocol (MCP) server at https://freebillgen.com/api/mcp with get_invoice and verify_invoice tools. The link signature is the access token. Treat the full URL as a secret because anyone who receives it can open the invoice.