Docs

3 API3.4

3.4

Read an invoice, its events, its documents

Read an invoice, its events and its documents.

  • In the sandbox

In plain words

These calls show where an invoice stands, every event in its history and the files stored for it.

Four reads follow an invoice after the 202. All of them need a key with the read scope. An id that does not exist, or that belongs to another client, answers 404.

The invoice

GET /invoices/{id} returns the invoice's current state.

FieldMeaning
id, invoice_ref, invoice_numberOur id, the ERP's document id and the invoice number.
route, environment, clientThe route, the environment and the client identifier (local when none was named).
statequeued, submitted, ready, cancelled and so on. Statuses lists both layers.
legal_idThe route's own reference once the rail has the invoice: the KSeF number, the ANAF upload index, the access point's document id or the French platform's invoice id.
document_sha256SHA-256 of what was stored.
attemptsEarlier submissions of the same invoice_ref, for example after a rejection and a fix.
deadline_atAn indicative deadline, for Romania and Poland only, and only when the invoice carries an issue date. It is never earlier than the real one, and it is not legal advice.
created_at, updated_atRFC 3339 timestamps in UTC.
curl "https://api-sandbox-eu.eurinvoice.com/invoices/inv_936a93e38de84e7b0a1d7681" \
  -H "Authorization: Bearer <your-api-key>"
Response200 OK
{
  "invoice_ref": "CAPTURE-JSON-1790961440",
  "environment": "sandbox",
  "document_sha256": "45f857890231e9bc6e73c1ec1e53bc01e7b030f84068b324bdd9ef42b88322bc",
  "route": "DE-XRECHNUNG",
  "updated_at": "2026-10-06T19:49:02.676Z",
  "documents": [
    {
      "sha256": "45f857890231e9bc6e73c1ec1e53bc01e7b030f84068b324bdd9ef42b88322bc",
      "kind": "canonical",
      "href": "/invoices/inv_936a93e38de84e7b0a1d7681/documents/canonical"
    },
    {
      "sha256": "ad122fe72dc6f04b2de6b6bbc01fcb7e46e33116b12e3bbb02a569cde3f10106",
      "kind": "manifest",
      "href": "/invoices/inv_936a93e38de84e7b0a1d7681/documents/manifest"
    },
    {
      "sha256": "941fd5005aa03586a7bf23f3039c6d15e38220879d46690f9199a494e35fdc11",
      "kind": "validation-report",
      "href": "/invoices/inv_936a93e38de84e7b0a1d7681/documents/validation-report"
    },
    {
      "sha256": "251a52fec3bdd44555a7396a1567d62c5ada3e3b7d002bb757d6b50e347c2e90",
      "kind": "xrechnung-ubl",
      "href": "/invoices/inv_936a93e38de84e7b0a1d7681/documents/xrechnung-ubl"
    }
  ],
  "client": "acme-srl",
  "created_at": "2026-10-06T19:49:01.621Z",
  "id": "inv_936a93e38de84e7b0a1d7681",
  "state": "ready",
  "invoice_number": "DOC-mux3dlqm"
}
Recorded on 7 Oct 2026.

Its events

GET /invoices/{id}/events replays every status event of the invoice, in sequence order. Use it to catch up after downtime. Events do not expire while the contract runs, and nothing has to be acknowledged.

curl "https://api-sandbox-eu.eurinvoice.com/invoices/inv_936a93e38de84e7b0a1d7681/events" \
  -H "Authorization: Bearer <your-api-key>"
Response200 OK
{
  "data": [
    {
      "occurred_at": "2026-10-06T19:49:01.621Z",
      "sequence": 1,
      "environment": "sandbox",
      "invoice_ref": "CAPTURE-JSON-1790961440",
      "document_sha256": "45f857890231e9bc6e73c1ec1e53bc01e7b030f84068b324bdd9ef42b88322bc",
      "event_id": "evt_e1b58da963c46e4a63409006",
      "country_route": "DE-XRECHNUNG",
      "invoice_number": "DOC-mux3dlqm",
      "status": "received"
    },
    {
      "occurred_at": "2026-10-06T19:49:02.661Z",
      "sequence": 2,
      "environment": "sandbox",
      "invoice_ref": "CAPTURE-JSON-1790961440",
      "document_sha256": "45f857890231e9bc6e73c1ec1e53bc01e7b030f84068b324bdd9ef42b88322bc",
      "event_id": "evt_0dcb4d0b797e93185b22c27d",
      "country_route": "DE-XRECHNUNG",
      "invoice_number": "DOC-mux3dlqm",
      "status": "validated"
    }
  ]
}
Recorded on 7 Oct 2026.

All invoices

GET /invoices lists and searches a client's invoices, newest first, a page at a time. It filters by q (part of the invoice_ref or the number), route, state and the day received (received_from, received_to). A row holds what GET /invoices/{id} holds, without the documents and without invoice content: no buyer, no amounts and no issue date. GET /invoices/series counts the invoices received and rejected for each day and route, for a chart. See the reference.

Its documents

GET /invoices/{id}/documents/{kind} returns what the service stored. The kind is one of:

KindStored when
canonicalYou submitted JSON. The file is the invoice as you sent it.
erp-exportYou submitted an ERP export. The file is the export as the ERP sent it.
ubl, cii, fa3, pdfThe file as sent, or the document the service built: xrechnung-ubl for Germany, ubl or fa3 for the other routes.
validation-reportWhat each check found.
manifestThe SHA-256 of the bytes that go to the route, and the checks that ran on them.

The JSON kinds are served as application/json.

ETag is the file's SHA-256. Documents are readable only with the key. There are no public links. A dry run stores nothing.

curl "https://api-sandbox-eu.eurinvoice.com/invoices/inv_1721a979f65d8ff80ef5f64b/documents/ubl" \
  -H "Authorization: Bearer <your-api-key>"
Response200 OK
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"><cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID><cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID><cbc:ID>RE-2026-0142</cbc:ID><cbc:IssueDate>2026-09-26</cbc:IssueDate><cbc:DueDate>2026-10-10</cbc:DueDate><cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode><cbc:Note>Vielen Dank für Ihren Auftrag.</cbc:Note><cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode><cbc:BuyerReference>PO-88731</cbc:BuyerReference><cac:InvoicePeriod><cbc:StartDate>2026-09-01</cbc:StartDate><cbc:EndDate>2026-09-30</cbc:EndDate></cac:InvoicePeriod><cac:AccountingSupplierParty><cac:Party><cbc:EndpointID schemeID="9930">DE123456789</cbc:EndpointID><cac:PostalAddress><cbc:StreetName>Hafenstraße 12</cbc:StreetName><cbc:CityName>Hamburg</cbc:CityName><cbc:PostalZone>20457</cbc:PostalZone><cac:Country><cbc:IdentificationCode>DE</cbc:IdentificationCode></cac:Country></cac:PostalAddress><cac:PartyTaxScheme><cbc:CompanyID>DE123456789</cbc:CompanyID><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:PartyTaxScheme><cac:PartyLegalEntity><cbc:RegistrationName>Nordlicht Software GmbH</cbc:RegistrationName><cbc:CompanyID>HRB 123456</cbc:CompanyID><cbc:CompanyLegalForm>GmbH</cbc:CompanyLegalForm></cac:PartyLegalEntity><cac:Contact><cbc:Name>Jana Petersen</cbc:Name><cbc:Telephone>+49 40 1234567</cbc:Telephone><cbc:ElectronicMail>rechnung@nordlicht.example</cbc:ElectronicMail></cac:Contact></cac:Party></cac:AccountingSupplierParty><cac:AccountingCustomerParty><cac:Party><cbc:EndpointID schemeID="9930">DE987654321</cbc:EndpointID><cac:PostalAddress><cbc:StreetName>Marienplatz 4</cbc:StreetName><cbc:CityName>München</cbc:CityName><cbc:PostalZone>80331</cbc:PostalZone><cac:Country><cbc:IdentificationCode>DE</cbc:IdentificationCode></cac:Country></cac:PostalAddress><cac:PartyTaxScheme><cbc:CompanyID>DE987654321</cbc:CompanyID><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:PartyTaxScheme><cac:PartyLegalEntity><cbc:RegistrationName>Brauhaus Weber AG</cbc:RegistrationName></cac:PartyLegalEntity></cac:Party></cac:AccountingCustomerParty><cac:PaymentMeans><cbc:PaymentMeansCode>58</cbc:PaymentMeansCode><cbc:PaymentID>RE-2026-0142</cbc:PaymentID><cac:PayeeFinancialAccount><cbc:ID>DE89370400440532013000</cbc:ID><cbc:Name>Nordlicht Software GmbH</cbc:Name><cac:FinancialInstitutionBranch><cbc:ID>COBADEFFXXX</cbc:ID></cac:FinancialInstitutionBranch></cac:PayeeFinancialAccount></cac:PaymentMeans><cac:PaymentTerms><cbc:Note>Zahlbar innerhalb von 14 Tagen ohne Abzug.</cbc:Note></cac:PaymentTerms><cac:TaxTotal><cbc:TaxAmount currencyID="EUR">1255.71</cbc:TaxAmount><cac:TaxSubtotal><cbc:TaxableAmount currencyID="EUR">6609.00</cbc:TaxableAmount><cbc:TaxAmount currencyID="EUR">1255.71</cbc:TaxAmount><cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory></cac:TaxSubtotal></cac:TaxTotal><cac:LegalMonetaryTotal><cbc:LineExtensionAmount currencyID="EUR">6609.00</cbc:LineExtensionAmount><cbc:TaxExclusiveAmount currencyID="EUR">6609.00</cbc:TaxExclusiveAmount><cbc:TaxInclusiveAmount currencyID="EUR">7864.71</cbc:TaxInclusiveAmount><cbc:PayableAmount currencyID="EUR">7864.71</cbc:PayableAmount></cac:LegalMonetaryTotal><cac:InvoiceLine><cbc:ID>1</cbc:ID><cbc:InvoicedQuantity unitCode="LS">1</cbc:InvoicedQuantity><cbc:LineExtensionAmount currencyID="EUR">5900.00</cbc:LineExtensionAmount><cac:Item><cbc:Description>Mapping Business Central → EN 16931, Validierung XRechnung, Test im Peppol-Testnetz</cbc:Description><cbc:Name>E-Rechnung Einführung (Festpreis)</cbc:Name><cac:ClassifiedTaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:ClassifiedTaxCategory></cac:Item><cac:Price><cbc:PriceAmount currencyID="EUR">5900.00</cbc:PriceAmount></cac:Price></cac:InvoiceLine><cac:InvoiceLine><cbc:ID>2</cbc:ID><cbc:InvoicedQuantity unitCode="MON">1</cbc:InvoicedQuantity><cbc:LineExtensionAmount currencyID="EUR">349.00</cbc:LineExtensionAmount><cac:Item><cbc:Description>Care Plus, September 2026</cbc:Description><cbc:Name>Betreuung abgelehnter Rechnungen</cbc:Name><cac:ClassifiedTaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:ClassifiedTaxCategory></cac:Item><cac:Price><cbc:PriceAmount currencyID="EUR">349.00</cbc:PriceAmount></cac:Price></cac:InvoiceLine><cac:InvoiceLine><cbc:ID>3</cbc:ID><cbc:InvoicedQuantity unitCode="HUR">3</cbc:InvoicedQuantity><cbc:LineExtensionAmount currencyID="EUR">360.00</cbc:LineExtensionAmount><cac:Item><cbc:Description>Remote, Buchhaltungsteam</cbc:Description><cbc:Name>Zusätzliche Schulung</cbc:Name><cac:ClassifiedTaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19.00</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:ClassifiedTaxCategory></cac:Item><cac:Price><cbc:PriceAmount currencyID="EUR">120.00</cbc:PriceAmount></cac:Price></cac:InvoiceLine></Invoice>

<!-- shortened for these docs -->
The UBL file of a Peppol submit, shortened, recorded on 7 Oct 2026.

Answers

StatusMeaning
200The invoice, its events or the file.
401No key, or an unknown key.
403The key lacks the read scope.
404No such invoice for this client, or no such document kind on it.
429Too many requests for the key. Wait for Retry-After seconds.
curl "https://api-sandbox-eu.eurinvoice.com/invoices/inv_unknown" \
  -H "Authorization: Bearer <your-api-key>"
Response404 Not Found
{
  "type": "https://eurinvoice.com/problems/not-found",
  "title": "No such resource for this client",
  "status": 404
}
Recorded on 7 Oct 2026.

On this page