Compliance & Business
Live on RapidAPI & Zyla
POST /v1/peppol-ubl-invoice
Generate EN 16931 / Peppol BIS 3.0 UBL 2.1 XML and SEPA EPC-QR payloads from JSON, or parse UBL XML to JSON. Convert JSON invoices into EN 16931 / Peppol BIS Billing 3.0 / XRechnung 3.0 compliant UBL 2.1 XML or parse UBL XML back to JSON, with automatic SEPA EPC069-12 QR payment payload generation.
POST /v1/peppol-ubl-invoice){
"ok": true,
"data": {
"valid": true,
"verdict": "valid",
"mode": "json_to_ubl",
"en16931_conformant": true,
"math_valid": true,
"customization_id": "urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0",
"profile_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0",
"invoice": {
"invoice_number": "INV-2026-0042",
"issue_date": "2026-11-14",
"due_date": "2026-11-28",
"currency": "EUR",
"seller": {
"name": "Tinplate Labs GmbH",
"country": "DE",
"vat_number": "DE123456788",
"iban": "DE89370400440532013000"
},
"buyer": {
"name": "Example Holding BV",
"country": "NL",
"vat_number": "NL123456782B01"
},
"line_items": [
{
"description": "Tinplate Enterprise API Guardrails",
"quantity": 1,
"unit_price": 1000,
"vat_rate": 0,
"line_net": 1000
}
],
"subtotal_net": 1000,
"discount": 0,
"total_vat": 0,
"total_gross": 1000,
"reverse_charge": true
},
"ubl_xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>...",
"epc_qr_payload": "BCD\n002\n1\nSCT\nCOBADEFFXXX\nTinplate Labs GmbH\nDE89370400440532013000\nEUR1000.00\n\n\nINV-2026-0042",
"issues": []
},
"meta": {
"request_id": "req_ubl_01",
"ms": 1
}
}
curl -X POST "https://api.tinplate.dev/v1/peppol-ubl-invoice" \
-H "Content-Type: application/json" \
-H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
-d '{"invoice":{"invoice_number":"INV-2026-0042","issue_date":"2026-11-14","due_date":"2026-11-28","currency":"EUR","seller":{"name":"Tinplate Labs GmbH","country":"DE","vat_number":"DE123456788","iban":"DE89370400440532013000"},"buyer":{"name":"Example Holding BV","country":"NL","vat_number":"NL123456782B01"},"line_items":[{"description":"Tinplate Enterprise API Guardrails","quantity":1,"unit_price":1000,"vat_rate":0,"net_amount":1000}],"subtotal_net":1000,"discount":0,"total_vat":0,"total_gross":1000,"reverse_charge":true},"seller_bic":"COBADEFFXXX","buyer_reference":"04011000-12345-67"}'import { TinplateClient } from "@tinplate/sdk"; // npm install @tinplate/sdk
const tinplate = new TinplateClient({
rapidApiKey: process.env.RAPIDAPI_KEY!,
});
const { data, meta } = await tinplate.call("/v1/peppol-ubl-invoice", {
"invoice": {
"invoice_number": "INV-2026-0042",
"issue_date": "2026-11-14",
"due_date": "2026-11-28",
"currency": "EUR",
"seller": {
"name": "Tinplate Labs GmbH",
"country": "DE",
"vat_number": "DE123456788",
"iban": "DE89370400440532013000"
},
"buyer": {
"name": "Example Holding BV",
"country": "NL",
"vat_number": "NL123456782B01"
},
"line_items": [
{
"description": "Tinplate Enterprise API Guardrails",
"quantity": 1,
"unit_price": 1000,
"vat_rate": 0,
"net_amount": 1000
}
],
"subtotal_net": 1000,
"discount": 0,
"total_vat": 0,
"total_gross": 1000,
"reverse_charge": true
},
"seller_bic": "COBADEFFXXX",
"buyer_reference": "04011000-12345-67"
});
console.log(`[${meta.ms} ms]`, data);import requests
response = requests.post(
"https://api.tinplate.dev/v1/peppol-ubl-invoice",
headers={
"Content-Type": "application/json",
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
},
json={
"invoice": {
"invoice_number": "INV-2026-0042",
"issue_date": "2026-11-14",
"due_date": "2026-11-28",
"currency": "EUR",
"seller": {
"name": "Tinplate Labs GmbH",
"country": "DE",
"vat_number": "DE123456788",
"iban": "DE89370400440532013000"
},
"buyer": {
"name": "Example Holding BV",
"country": "NL",
"vat_number": "NL123456782B01"
},
"line_items": [
{
"description": "Tinplate Enterprise API Guardrails",
"quantity": 1,
"unit_price": 1000,
"vat_rate": 0,
"net_amount": 1000
}
],
"subtotal_net": 1000,
"discount": 0,
"total_vat": 0,
"total_gross": 1000,
"reverse_charge": true
},
"seller_bic": "COBADEFFXXX",
"buyer_reference": "04011000-12345-67"
}
)
print(response.json())const response = await fetch("https://api.tinplate.dev/v1/peppol-ubl-invoice", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
},
body: JSON.stringify({
"invoice": {
"invoice_number": "INV-2026-0042",
"issue_date": "2026-11-14",
"due_date": "2026-11-28",
"currency": "EUR",
"seller": {
"name": "Tinplate Labs GmbH",
"country": "DE",
"vat_number": "DE123456788",
"iban": "DE89370400440532013000"
},
"buyer": {
"name": "Example Holding BV",
"country": "NL",
"vat_number": "NL123456782B01"
},
"line_items": [
{
"description": "Tinplate Enterprise API Guardrails",
"quantity": 1,
"unit_price": 1000,
"vat_rate": 0,
"net_amount": 1000
}
],
"subtotal_net": 1000,
"discount": 0,
"total_vat": 0,
"total_gross": 1000,
"reverse_charge": true
},
"seller_bic": "COBADEFFXXX",
"buyer_reference": "04011000-12345-67"
}),
});
const result = await response.json();
console.log(result);{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tinplate_peppol_ubl_invoice",
"arguments": {
"invoice": {
"invoice_number": "INV-2026-0042",
"issue_date": "2026-11-14",
"due_date": "2026-11-28",
"currency": "EUR",
"seller": {
"name": "Tinplate Labs GmbH",
"country": "DE",
"vat_number": "DE123456788",
"iban": "DE89370400440532013000"
},
"buyer": {
"name": "Example Holding BV",
"country": "NL",
"vat_number": "NL123456782B01"
},
"line_items": [
{
"description": "Tinplate Enterprise API Guardrails",
"quantity": 1,
"unit_price": 1000,
"vat_rate": 0,
"net_amount": 1000
}
],
"subtotal_net": 1000,
"discount": 0,
"total_vat": 0,
"total_gross": 1000,
"reverse_charge": true
},
"seller_bic": "COBADEFFXXX",
"buyer_reference": "04011000-12345-67"
}
}
}POST /v1/peppol-ubl-invoice)| Parameter | Type & Constraints | Description |
|---|---|---|
invoiceoptional |
object |
Structured invoice object to validate against EN 16931, convert to Peppol BIS Billing 3.0 UBL 2.1 XML, and generate a SEPA EPC-QR payment payload. |
ubl_xmloptional |
stringminLen: 20, maxLen: 262144 |
Optional raw UBL 2.1 / Peppol BIS Billing 3.0 / XRechnung <Invoice> XML string to parse into JSON and validate. |
seller_bicoptional |
stringmaxLen: 11 |
Optional seller BIC/SWIFT code for EPC SEPA QR generation. |
buyer_referenceoptional |
stringmaxLen: 128, default: "BUYER-REF-01" |
Peppol BT-10 BuyerReference / German XRechnung Leitweg-ID. |
data Object Fields (200 OK)| Field | Type | Description |
|---|---|---|
valid |
boolean |
Field 'valid' |
verdict |
"valid" | "warnings_only" | "invalid" |
Field 'verdict' |
mode |
"json_to_ubl" | "ubl_to_json" |
Field 'mode' |
en16931_conformant |
boolean |
Field 'en16931_conformant' |
math_valid |
boolean |
Field 'math_valid' |
customization_id |
string |
Field 'customization_id' |
profile_id |
string |
Field 'profile_id' |
invoice |
object |
Field 'invoice' |
ubl_xml |
string |
Generated or normalized Peppol BIS Billing 3.0 UBL 2.1 XML document. |
epc_qr_payload |
string | null |
EPC069-12 SEPA Credit Transfer QR payload (GiroCode) for EUR invoices with a valid seller IBAN. |
issues |
object[] |
Field 'issues' |
Release Version: v1.0.7 ·
Last Verified / Benchmarked: 14 November 2026 ·
Latency Note: Sub-millisecond figures measure in-Worker V8 compute time (typical client HTTPS network RTT to the nearest Cloudflare PoP is 15–65 ms) ·
See Full Portfolio Benchmarks & Corpora →
| Plan | Monthly Price | Included Requests | Rate Limit | Max Request Payload | Best For |
|---|---|---|---|---|---|
| BASIC | $0.00 / month | 500 / month (hard limit) | 10 req / min | 64 KB | Evaluation, local development & CI smoke tests |
| PRO | $9.99 / month | 15,000 / month | 60 req / min | 128 KB | Solo developers & production apps |
| ULTRA | $29.99 / month | 100,000 / month | 300 req / min | 256 KB | Growing SaaS & multi-agent pipelines |
| MEGA | $79.99 / month | 500,000 / month | 1,000 req / min | 256 KB | High-volume enterprise workloads |
Use API #39 to convert ERP JSON into Peppol UBL 2.1 XML (or parse incoming UBL XML), and use API #20 to audit mathematical and BR-CO/BR-S business rule compliance.
Yes—pass the Leitweg-ID in buyer_reference (BT-10) and it is emitted directly into <cbc:BuyerReference>.
Invoice payloads and generated UBL XML are processed statelessly in memory.
Worker Zero-Logging Guarantee: Cloudflare Workers Observability and invocation logging are disabled in configuration
(observability.enabled = false, head_sampling_rate = 0, invocation_logs = false). Payloads are processed strictly in volatile V8 memory and never logged or stored by Tinplate.
Marketplace Proxies vs. Direct Bearer Key: Requests sent via RapidAPI or Zyla API Hub pass through those marketplaces' proxy infrastructure (subject to their respective privacy policies). Security-sensitive workloads requiring end-to-end zero-intermediary processing can connect directly to https://api.tinplate.dev using a Direct Bearer Key (Authorization: Bearer <API_KEY>).
Read our full Privacy Notice and OpenAPI 3.0.3 JSON Schema.
POST /v1/invoice-validator
Tier 1
Audit extracted invoices for line-item math errors, VAT mismatches, and Peppol compliance.
POST /v1/eu-vat-calculator
Live on Hub
Determine exact EU VAT rates, B2B reverse charge, EN 16931 tax category codes, and mandatory invoice legal text.
POST /v1/eu-vat-iban/iban
Live on Hub
Validate IBANs, BIC/SWIFT codes, and EU/UK VAT numbers with live EU VIES lookup.