Quickstart
Sign up free, run your first e-invoice in the playground, then take Beliq into your own code and pick an integration path.
This guide takes you from a fresh account to e-invoices generated and checked in your own code. Sign up, run your first invoice in the playground, then switch to the API when you are ready.
1. Sign up and run your first invoice
Create a free account on the dashboard. The free tier does not ask for a card. From your workspace, open the playground. It opens on the Validate tab in Test mode, with a sample invoice already loaded, and you need neither a key nor a line of code to run it. Press Run request and the sample goes through the same engine and rulesets as the API. You get back:
- the valid verdict,
- the exact ruleset versions it was checked against, and
- the hashes to check the result yourself:
sha256of the bytes you sent, andrulesetSha256of the rules that judged them.
That is an e-invoice checked against the rule packs and schemas of its format, in the versions named, without a line of code.
A run in Test mode spends your workspace’s sandbox allowance, not your plan’s monthly quota, and marks any document it generates as a sandbox specimen. Switch the playground to Live when you want production output.
2. Get the format your market needs
The same invoice can come out in whichever format you need. Switch to the Generate tab, pick the standard, and run it:
- XRechnung and Peppol BIS Billing 3.0 return an XML file your systems read.
- Factur-X and ZUGFeRD return a hybrid PDF you can open and look at, with the invoice XML embedded inside it for machines.
Same data in, the format you need out. The format reference lists every format and its current status.
3. Take it to your own code
The playground is genuinely all some teams need. To run Beliq automatically inside your own billing system, switch to the API. It is the same engine behind the same request.
Get an API key
In your workspace, create a key under Integration → API Keys. Start with a Test key: it begins with blq_test_, runs on the same sandbox allowance as the playground in Test mode, and marks what it generates as a specimen. Real invoices need a Live key, which counts against your plan’s monthly quota. Copy the key once, because it is shown only once.
Make your first call
You do not have to write the request by hand. In the playground, use Copy as cURL to grab the exact call you just ran, then drop in your key. Or start from this generate example:
curl -X POST https://api.beliq.eu/v1/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"standard": "xrechnung",
"profile": "xrechnung",
"output": "xml",
"invoice": {
"number": "INV-2026-001",
"issueDate": "2026-04-13",
"dueDate": "2026-05-13",
"currencyCode": "EUR",
"buyerReference": "04011000-12345-03",
"seller": {
"name": "Acme GmbH",
"vatId": "DE123456789",
"email": "billing@acme.example",
"contactName": "Anna Beispiel",
"phone": "+49 30 1234567",
"address": {
"street": "Musterstraße 1",
"city": "Berlin",
"postalCode": "10115",
"countryCode": "DE"
}
},
"buyer": {
"name": "Bundesministerium für Beispiele",
"vatId": "DE987654321",
"email": "rechnung@beispiel.example",
"address": {
"street": "Beispielweg 42",
"city": "Bonn",
"postalCode": "53113",
"countryCode": "DE"
}
},
"lines": [
{
"description": "IT consulting, April 2026",
"quantity": 20,
"unitCode": "HUR",
"unitPrice": 120.00,
"lineTotal": 2400.00,
"vatRate": 19,
"vatCategoryCode": "S"
}
],
"taxSummary": [
{ "vatCategoryCode": "S", "vatRate": 19, "taxableAmount": 2400.00, "taxAmount": 456.00 }
],
"paymentMeans": {
"typeCode": "58",
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX"
},
"paymentTerms": "Net 30 days",
"totalNetAmount": 2400.00,
"totalTaxAmount": 456.00,
"totalGrossAmount": 2856.00
}
}'import { Beliq } from '@beliq/sdk';
const beliq = new Beliq({ apiKey: process.env.BELIQ_API_KEY! });
const generated = await beliq.generate({
standard: 'xrechnung',
profile: 'xrechnung',
output: 'xml',
invoice: {
number: 'INV-2026-001',
issueDate: '2026-04-13',
dueDate: '2026-05-13',
currencyCode: 'EUR',
buyerReference: '04011000-12345-03',
seller: {
name: 'Acme GmbH',
vatId: 'DE123456789',
email: 'billing@acme.example',
contactName: 'Anna Beispiel',
phone: '+49 30 1234567',
address: { street: 'Musterstraße 1', city: 'Berlin', postalCode: '10115', countryCode: 'DE' },
},
buyer: {
name: 'Bundesministerium für Beispiele',
vatId: 'DE987654321',
email: 'rechnung@beispiel.example',
address: { street: 'Beispielweg 42', city: 'Bonn', postalCode: '53113', countryCode: 'DE' },
},
lines: [
{
description: 'IT consulting, April 2026',
quantity: 20,
unitCode: 'HUR',
unitPrice: 120.00,
lineTotal: 2400.00,
vatRate: 19,
vatCategoryCode: 'S',
},
],
taxSummary: [{ vatCategoryCode: 'S', vatRate: 19, taxableAmount: 2400.00, taxAmount: 456.00 }],
paymentMeans: { typeCode: '58', iban: 'DE89370400440532013000', bic: 'COBADEFFXXX' },
paymentTerms: 'Net 30 days',
totalNetAmount: 2400.00,
totalTaxAmount: 456.00,
totalGrossAmount: 2856.00,
},
});
// `xml` is the same document curl writes to stdout.
console.log(generated.xml);import os
from beliq import Beliq
beliq = Beliq(api_key=os.environ["BELIQ_API_KEY"])
generated = beliq.generate(
standard="xrechnung",
profile="xrechnung",
output="xml",
invoice={
"number": "INV-2026-001",
"issueDate": "2026-04-13",
"dueDate": "2026-05-13",
"currencyCode": "EUR",
"buyerReference": "04011000-12345-03",
"seller": {
"name": "Acme GmbH",
"vatId": "DE123456789",
"email": "billing@acme.example",
"contactName": "Anna Beispiel",
"phone": "+49 30 1234567",
"address": {
"street": "Musterstraße 1",
"city": "Berlin",
"postalCode": "10115",
"countryCode": "DE",
},
},
"buyer": {
"name": "Bundesministerium für Beispiele",
"vatId": "DE987654321",
"email": "rechnung@beispiel.example",
"address": {
"street": "Beispielweg 42",
"city": "Bonn",
"postalCode": "53113",
"countryCode": "DE",
},
},
"lines": [
{
"description": "IT consulting, April 2026",
"quantity": 20,
"unitCode": "HUR",
"unitPrice": 120.00,
"lineTotal": 2400.00,
"vatRate": 19,
"vatCategoryCode": "S",
},
],
"taxSummary": [{"vatCategoryCode": "S", "vatRate": 19, "taxableAmount": 2400.00, "taxAmount": 456.00}],
"paymentMeans": {"typeCode": "58", "iban": "DE89370400440532013000", "bic": "COBADEFFXXX"},
"paymentTerms": "Net 30 days",
"totalNetAmount": 2400.00,
"totalTaxAmount": 456.00,
"totalGrossAmount": 2856.00,
},
)
# `xml` is the same document curl writes to stdout.
print(generated.xml)On success the response body is the generated XML. For a hybrid PDF instead, set "output": "pdf" with "standard": "zugferd" or "facturx", and change "profile" to one those standards accept, such as "en16931" (see Profile compatibility). The full request schema and every option live on POST /v1/generate.
Already have an invoice to check? POST /v1/validate runs the same rules over an XML or PDF file you upload and returns the same verdict, versions, and hashes you saw in the playground.
4. Choose your integration path
However you build, there is a path in. The Integrations overview lays out five ways to reach Beliq, grouped by how you work:
- REST API: call the endpoints directly, as above.
- SDKs and developer tools: typed clients, the CLI, the MCP server, and the CI action.
- No-code and automation: connect Beliq inside the automation tools you already run.
- E-commerce: turn store orders into e-invoices.
- Accounting and ERP: validate and convert what your finance tool emits.
Each category links to step-by-step guides for the actual tools. A few listings are still in review and more connectors are on the way, so they appear on that page as they land. Whatever you already run, that is the page to start from.
Next steps
- Authentication for API key formats and header options
- POST /v1/generate for the full request schema and all supported options
- POST /v1/validate to validate an existing invoice
- How verification works and Verify a hash for the honesty model behind the verdict
- Format reference for every format and its status
- Integration guides for choosing a standard and profile, mapping your data, and retry behaviour
- Country guides for the mandate dates and format specifics per market
- Error reference for error codes and how to handle them