Issue e-invoices in Europe without leaving your code
Self-service API for Poland’s KSeF — with Italy, Romania and Peppol coming next. Generate valid FA(3) XML, submit it and track its status. No Peppol Access Point. No manual portal.
KSeF test environment available today Production coming soon No credit card
curl -X POST https://api.getnotaly.com/invoices \
-H "Authorization: Bearer $NOTALY_API_KEY" \
-d '{
"number": "FV/2026/10/001",
"currency": "PLN",
"seller": { "nip": "5260250995", … },
"buyer": { "nip": "1234563218", … },
"items": [{ "name": "SaaS subscription",
"quantity": 1, "unitNetPrice": 1000, "vatRate": 23 }]
}'
{
"status": "accepted",
"number": "FV/2026/10/001",
"ksefNumber": "5260250995-20261012-8F3A21C9B7D0-4E",
"upo": "<UPO …/>"
}
- FA(3) XMLValidated against the official XSD
- KSeF APITest environment available today
- Signed webhooksHMAC on every status change
- IdempotentSafe retries on POST /invoices
Built for developers, not for portals
Truly developer-first
API keys, webhooks and idempotent submissions. Integrate in hours, not weeks.
Compliance handled for you
We validate the XML against the official XSD before sending. You get a readable error, not a government rejection.
One endpoint, many markets
Start with Poland. Italy, Romania and Peppol arrive on the same API.
How it works
1. Create your API key
Sandbox sign-up in minutes.
2.
POST /invoicesSend the invoice data as simple JSON.
3. Track status via webhook
Track the submission and KSeF response until
acceptedorrejected, with the UPO.
curl -X POST https://api.getnotaly.com/invoices \
-H "Authorization: Bearer $NOTALY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"number": "FV/2026/10/001",
"issueDate": "2026-10-12",
"currency": "PLN",
"seller": { "nip": "5260250995", "name": "Example Sp. z o.o. (FICTIONAL)", "address": { "line1": "ul. Testowa 1, 00-001 Warszawa", "country": "PL" } },
"buyer": { "nip": "1234563218", "name": "Test Customer S.A. (FICTIONAL)", "address": { "line1": "ul. Probna 2, 30-001 Kraków", "country": "PL" } },
"items": [
{ "name": "SaaS subscription - October", "unit": "szt.", "quantity": 1, "unitNetPrice": 1000, "vatRate": 23 },
{ "name": "Support", "unit": "godz.", "quantity": 2, "unitNetPrice": 150.5, "vatRate": 8 }
]
}'
Fictional data (test NIPs), identical to docs/examples/invoice-sample.json in the repository.
Invoice status
- draftFA(3) XML generated and validated against the XSD
- submittedSent to KSeF; stays here while KSeF processes it
- acceptedKSeF number and UPO returned
- rejectedStable error code, never a raw government message
KSeF and FA(3) in a nutshell
KSeF (Krajowy System e-Faktur) is Poland’s national e-invoicing system, run by the Ministry of Finance. B2B invoices are issued as XML and receive a unique KSeF number.
FA(3) is the current version of the XML schema (XSD) for KSeF structured invoices. An invoice must follow it to be accepted; Notaly generates the XML and validates it against the official XSD before submission.
UPO (Urzędowe Poświadczenie Odbioru) is the official proof of receipt returned by KSeF when an invoice is accepted.
Pricing
Starter Recommended
- Up to 200 invoices/month
- KSeF production (coming soon)
- Webhooks
- Email support
Scale
- Up to 1,000 invoices/month
- Multi-entity
- Peppol (coming soon)
- Priority support
Launch prices, subject to review before production release.
What is Notaly?
Notaly is a self-service KSeF API and e-invoicing API for Poland (and, soon, more of Europe). Send JSON via POST /invoices and Notaly generates FA(3) XML, validates it against the official XSD, submits it to KSeF and tracks the status.
What is KSeF?
KSeF (Krajowy System e-Faktur) is Poland's national e-invoicing system, operated by the Ministry of Finance. Structured invoices are submitted as XML and receive a unique KSeF number.
What is the FA(3) format?
FA(3) is the current version of the XML schema (XSD) for KSeF invoices. Notaly generates FA(3) XML from simple JSON and validates it against the official XSD before submitting.
What is the UPO?
The UPO (Urzędowe Poświadczenie Odbioru) is the official proof of receipt issued by KSeF when an invoice is accepted. The API returns the UPO together with the status.
Do I need to be a Peppol Access Point?
No. Notaly talks directly to KSeF for Poland and, for Peppol, resells a certified partner. You do not inherit the certification cost.
Does Notaly calculate taxes?
No. We issue and track the e-invoice; tax calculation is your responsibility or your accountant's.
When is KSeF production available?
Today the full flow works in the KSeF TEST environment. Production follows after tax and legal validation.
How do I track an invoice's status?
Via a signed webhook (HMAC) or by calling GET /invoices/{id}. API statuses: draft → submitted → accepted | rejected. While KSeF processes the submission internally, the invoice stays submitted.
Which countries are supported?
Poland (KSeF) first. Italy, Romania and Peppol come next, on the same API.
How much does it cost?
Free sandbox; Starter €49/month for up to 200 invoices; Scale €199/month for up to 1,000 invoices; Enterprise on request.
Start invoicing in Europe today
Create a sandbox account and issue your first KSeF test invoice in minutes.