Skip to content

Result codes

The 262 results this API can return, with the status each one always carries, what it means and what to do next. A code never changes meaning, never moves to a different status and is never reused — branch on it.

Every response getpeppr writes carries these five headers, plus a sixth when the code has a guide. The body is unchanged: nothing here replaces what an endpoint already returns. A few requests are answered by our hosting platform before they reach us and carry none of this — see below.
Getpeppr-Result-Code
The identifier below. Stable, safe to branch on.
Getpeppr-Result-Message
A fixed sentence. Never a template, so never your data.
Getpeppr-Retryable
true or false. This outranks any rule based on the status.
Getpeppr-Remediation
What to do next, from a closed set of seven words.
Getpeppr-Request-Id
Ours, not yours. Quote it to support and we find the request.
Getpeppr-Result-Docs
A link to the guide for this outcome, when the code has one. 88 of 262 have one — treat its absence as normal, not as an error.

262 codes

attestation8

attestation.conflict409not retryable· nothing to do

The sub-tenant is not in a state where an attestation can be issued. The body names why.

1 operation
  • POST /v1/legal-entities/{id}/attestation
attestation.email_send_failed502retryable· retry

The attestation email could not be sent. Retry to mint a fresh link.

1 operation
  • POST /v1/legal-entities/{id}/attestation
attestation.issued202not retryable· nothing to do

An attestation request was sent to the sub-tenant. It is now awaiting their confirmation.

1 operation
  • POST /v1/legal-entities/{id}/attestation
attestation.language_unsupported400not retryable· change the request

The requested language is not available for attestation requests. The body lists the supported languages.

1 operation
  • POST /v1/legal-entities/{id}/attestation
attestation.no_identifier409not retryable· change the request

This sub-tenant has no Peppol identifier to attest.

1 operation
  • POST /v1/legal-entities/{id}/attestation
attestation.platform_billing_suspended422not retryable· contact support

Platform billing is suspended, so no new attestation can be issued. Existing legal entities keep receiving documents.

1 operation
  • POST /v1/legal-entities/{id}/attestation
attestation.registration_rearmed202not retryable· nothing to do

The sub-tenant already authorised production. Its network registration is retried; no new confirmation is needed.

1 operation
  • POST /v1/legal-entities/{id}/attestation
attestation.request_invalid400not retryable· change the request

The attestation request is missing a required field or carries one in the wrong shape.

1 operation
  • POST /v1/legal-entities/{id}/attestation

auth4

auth.api_key_invalid401not retryable· check your key

The API key is not valid for this environment, or has been revoked.

66 operations
  • DELETE /v1/bank-accounts/{id}
  • DELETE /v1/contacts/{id}
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • DELETE /v1/transports/{code}
  • GET /v1/bank-accounts
  • GET /v1/bank-accounts/{id}
  • GET /v1/capabilities
  • GET /v1/contacts
  • GET /v1/contacts/{id}
  • GET /v1/directory/search
  • GET /v1/directory/{params}
  • GET /v1/events
  • GET /v1/identity
  • GET /v1/invoices
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • GET /v1/legal-entities
  • GET /v1/legal-entities/{id}
  • GET /v1/received-documents
  • GET /v1/received-documents/{id}
  • GET /v1/received-documents/{id}/as/xml
  • GET /v1/received-documents/{id}/responses
  • GET /v1/transports
  • GET /v1/transports/types
  • GET /v1/transports/{code}
  • HEAD /v1/bank-accounts
  • HEAD /v1/bank-accounts/{id}
  • HEAD /v1/capabilities
  • HEAD /v1/contacts
  • HEAD /v1/contacts/{id}
  • HEAD /v1/directory/search
  • HEAD /v1/directory/{params}
  • HEAD /v1/events
  • HEAD /v1/identity
  • HEAD /v1/invoices
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • HEAD /v1/legal-entities
  • HEAD /v1/legal-entities/{id}
  • HEAD /v1/received-documents
  • HEAD /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/responses
  • HEAD /v1/transports
  • HEAD /v1/transports/types
  • HEAD /v1/transports/{code}
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • POST /v1/transports
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
  • PUT /v1/invoices/{id}
  • PUT /v1/transports/{code}
auth.credentials_missing401not retryable· check your key

Missing or malformed Authorization header. Send `Authorization: Bearer <api key>`.

66 operations
  • DELETE /v1/bank-accounts/{id}
  • DELETE /v1/contacts/{id}
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • DELETE /v1/transports/{code}
  • GET /v1/bank-accounts
  • GET /v1/bank-accounts/{id}
  • GET /v1/capabilities
  • GET /v1/contacts
  • GET /v1/contacts/{id}
  • GET /v1/directory/search
  • GET /v1/directory/{params}
  • GET /v1/events
  • GET /v1/identity
  • GET /v1/invoices
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • GET /v1/legal-entities
  • GET /v1/legal-entities/{id}
  • GET /v1/received-documents
  • GET /v1/received-documents/{id}
  • GET /v1/received-documents/{id}/as/xml
  • GET /v1/received-documents/{id}/responses
  • GET /v1/transports
  • GET /v1/transports/types
  • GET /v1/transports/{code}
  • HEAD /v1/bank-accounts
  • HEAD /v1/bank-accounts/{id}
  • HEAD /v1/capabilities
  • HEAD /v1/contacts
  • HEAD /v1/contacts/{id}
  • HEAD /v1/directory/search
  • HEAD /v1/directory/{params}
  • HEAD /v1/events
  • HEAD /v1/identity
  • HEAD /v1/invoices
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • HEAD /v1/legal-entities
  • HEAD /v1/legal-entities/{id}
  • HEAD /v1/received-documents
  • HEAD /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/responses
  • HEAD /v1/transports
  • HEAD /v1/transports/types
  • HEAD /v1/transports/{code}
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • POST /v1/transports
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
  • PUT /v1/invoices/{id}
  • PUT /v1/transports/{code}
auth.platform_exit_read_only403not retryable· change the request

Your platform contract has ended. Until the end of the exit window this key can read, export and archive legal entities, but not send or provision.

20 operations
  • DELETE /v1/bank-accounts/{id}
  • DELETE /v1/contacts/{id}
  • DELETE /v1/invoices/{id}
  • DELETE /v1/transports/{code}
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • POST /v1/transports
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
  • PUT /v1/invoices/{id}
  • PUT /v1/transports/{code}
auth.too_many_failures429retryable· retry after the interval

Too many failed authentication attempts from this address. Wait and retry.

66 operations
  • DELETE /v1/bank-accounts/{id}
  • DELETE /v1/contacts/{id}
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • DELETE /v1/transports/{code}
  • GET /v1/bank-accounts
  • GET /v1/bank-accounts/{id}
  • GET /v1/capabilities
  • GET /v1/contacts
  • GET /v1/contacts/{id}
  • GET /v1/directory/search
  • GET /v1/directory/{params}
  • GET /v1/events
  • GET /v1/identity
  • GET /v1/invoices
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • GET /v1/legal-entities
  • GET /v1/legal-entities/{id}
  • GET /v1/received-documents
  • GET /v1/received-documents/{id}
  • GET /v1/received-documents/{id}/as/xml
  • GET /v1/received-documents/{id}/responses
  • GET /v1/transports
  • GET /v1/transports/types
  • GET /v1/transports/{code}
  • HEAD /v1/bank-accounts
  • HEAD /v1/bank-accounts/{id}
  • HEAD /v1/capabilities
  • HEAD /v1/contacts
  • HEAD /v1/contacts/{id}
  • HEAD /v1/directory/search
  • HEAD /v1/directory/{params}
  • HEAD /v1/events
  • HEAD /v1/identity
  • HEAD /v1/invoices
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • HEAD /v1/legal-entities
  • HEAD /v1/legal-entities/{id}
  • HEAD /v1/received-documents
  • HEAD /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/responses
  • HEAD /v1/transports
  • HEAD /v1/transports/types
  • HEAD /v1/transports/{code}
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • POST /v1/transports
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
  • PUT /v1/invoices/{id}
  • PUT /v1/transports/{code}

authz2

authz.master_key_required403not retryable· contact support

This endpoint needs a master API key on a platform account. Request access at hello@getpeppr.dev.

6 operations
  • DELETE /v1/legal-entities/{id}
  • GET /v1/legal-entities
  • GET /v1/legal-entities/{id}
  • HEAD /v1/legal-entities
  • HEAD /v1/legal-entities/{id}
  • POST /v1/legal-entities
authz.scope_denied403not retryable· change the request

This API key type is not authorised for this operation.

11 operations
  • DELETE /v1/legal-entities/{id}
  • GET /v1/legal-entities
  • GET /v1/legal-entities/{id}
  • HEAD /v1/legal-entities
  • HEAD /v1/legal-entities/{id}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/received-documents/{id}/responses

bank_accounts7

bank_accounts.created201not retryable· nothing to do

Bank account created.

1 operation
  • POST /v1/bank-accounts
bank_accounts.deleted204not retryable· nothing to do

Bank account deleted.

1 operation
  • DELETE /v1/bank-accounts/{id}
bank_accounts.listed200not retryable· nothing to do

Bank account list returned.

2 operations
  • GET /v1/bank-accounts
  • HEAD /v1/bank-accounts
bank_accounts.name_required400not retryable· change the request

A bank account needs a name. Send `name` as a string.

1 operation
  • POST /v1/bank-accounts
bank_accounts.not_found404not retryable· change the request

No bank account matches this identifier on this account.

4 operations
  • DELETE /v1/bank-accounts/{id}
  • GET /v1/bank-accounts/{id}
  • HEAD /v1/bank-accounts/{id}
  • PUT /v1/bank-accounts/{id}
bank_accounts.read200not retryable· nothing to do

Bank account returned.

2 operations
  • GET /v1/bank-accounts/{id}
  • HEAD /v1/bank-accounts/{id}
bank_accounts.updated200not retryable· nothing to do

Bank account updated.

1 operation
  • PUT /v1/bank-accounts/{id}

capabilities2

capabilities.matrix_missing500not retryable· contact support

No capability matrix is registered for the active provider.

2 operations
  • GET /v1/capabilities
  • HEAD /v1/capabilities
capabilities.read200not retryable· nothing to do

Provider capability matrix returned.

2 operations
  • GET /v1/capabilities
  • HEAD /v1/capabilities

contacts7

contacts.created201not retryable· nothing to do

Contact created.

1 operation
  • POST /v1/contacts
contacts.deleted204not retryable· nothing to do

Contact deleted.

1 operation
  • DELETE /v1/contacts/{id}
contacts.listed200not retryable· nothing to do

Contact list returned.

2 operations
  • GET /v1/contacts
  • HEAD /v1/contacts
contacts.name_required400not retryable· change the request

A contact needs a name. Send `name` as a string.

1 operation
  • POST /v1/contacts
contacts.not_found404not retryable· change the request

No contact matches this identifier on this account.

4 operations
  • DELETE /v1/contacts/{id}
  • GET /v1/contacts/{id}
  • HEAD /v1/contacts/{id}
  • PUT /v1/contacts/{id}
contacts.read200not retryable· nothing to do

Contact returned.

2 operations
  • GET /v1/contacts/{id}
  • HEAD /v1/contacts/{id}
contacts.updated200not retryable· nothing to do

Contact updated.

1 operation
  • PUT /v1/contacts/{id}

directory8

directory.identifier_format_invalid400not retryable· change the request

The Peppol identifier is not in a recognised format.

2 operations
  • GET /v1/directory/{params}
  • HEAD /v1/directory/{params}
directory.identifier_incomplete400not retryable· change the request

The Peppol identifier needs both a scheme and an identifier.

2 operations
  • GET /v1/directory/{params}
  • HEAD /v1/directory/{params}
directory.participant_found200not retryable· nothing to do

The participant is registered on the Peppol network.

2 operations
  • GET /v1/directory/{params}
  • HEAD /v1/directory/{params}
directory.participant_found_via_provider200not retryable· nothing to do

The participant is registered, resolved through the provider rather than the registry.

2 operations
  • GET /v1/directory/{params}
  • HEAD /v1/directory/{params}
directory.participant_not_found404not retryable· change the request

No Peppol participant is registered under this identifier.

2 operations
  • GET /v1/directory/{params}
  • HEAD /v1/directory/{params}
directory.search_completed200not retryable· nothing to do

The directory search completed.

2 operations
  • GET /v1/directory/search
  • HEAD /v1/directory/search
directory.search_parameters_invalid400not retryable· change the request

The directory search parameters are missing or invalid. The response body names which.

2 operations
  • GET /v1/directory/search
  • HEAD /v1/directory/search
directory.upstream_unavailable503retryable· retry

The Peppol Directory could not complete this search just now. Retry shortly.

2 operations
  • GET /v1/directory/search
  • HEAD /v1/directory/search

events4

events.invalid_date_range400not retryable· change the request

A date query parameter is malformed. Use YYYY-MM-DD.

2 operations
  • GET /v1/events
  • HEAD /v1/events
events.invalid_query_parameter400not retryable· change the request

A query parameter was repeated or empty. Send each one exactly once.

2 operations
  • GET /v1/events
  • HEAD /v1/events
events.listed200not retryable· nothing to do

Event list returned.

2 operations
  • GET /v1/events
  • HEAD /v1/events

health2

health.degraded503retryable· retry

One or more dependencies are unavailable.

2 operations
  • GET /v1/health
  • HEAD /v1/health
health.ok200not retryable· nothing to do

All health checks passed.

2 operations
  • GET /v1/health
  • HEAD /v1/health

idempotency7

idempotency.cache_unreadable409retryable· retry

A request with this key is in progress and its result could not be read. Retry shortly.

3 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
idempotency.concurrent_request409retryable· retry

An identical request with this Idempotency-Key is still in flight. Retry shortly.

3 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
idempotency.key_blank400not retryable· change the request

The Idempotency-Key header is present but blank, so it cannot protect this request. Send a non-blank key, or omit the header.

7 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/received-documents/{id}/responses
idempotency.key_reused422not retryable· change the request

This Idempotency-Key was already used for a different request. Use a new key.

7 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/received-documents/{id}/responses
idempotency.legacy_replay_200200not retryable· nothing to do

Replayed a stored response recorded before result codes existed.

5 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/received-documents/{id}/responses
idempotency.legacy_replay_201201not retryable· nothing to do

Replayed a stored response recorded before result codes existed.

5 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/received-documents/{id}/responses
idempotency.legacy_replay_204204not retryable· nothing to do

Replayed a stored response recorded before result codes existed.

5 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/received-documents/{id}/responses

identity2

identity.read200not retryable· nothing to do

Account Peppol identity returned.

2 operations
  • GET /v1/identity
  • HEAD /v1/identity
identity.verification_required422not retryable· contact support

This account's Peppol identity is not verified, so production sending is refused.

5 operations
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/received-documents/{id}/responses

invoices56

invoices.amount_out_of_range422not retryable· change the request

An amount is outside the range this API records.

1 operation
  • POST /v1/invoices
invoices.attachment_url_not_supported422not retryable· change the request

An attachment `url` cannot be sent, even alongside `content`; the document carries the file itself.

1 operation
  • POST /v1/invoices
invoices.body_not_an_object400not retryable· change the request

The request body must be a JSON object describing one invoice.

2 operations
  • POST /v1/invoices
  • POST /v1/invoices/import
invoices.buyer_address_required422not retryable· change the request

The buyer address needs a street, a city and a postal code.

1 operation
  • POST /v1/invoices
invoices.country_rule_violation422not retryable· change the request

A national Peppol rule refuses this invoice. The body names the rule and how to fix it.

1 operation
  • POST /v1/invoices
invoices.created201not retryable· nothing to do

The invoice was accepted and submitted to the Peppol network.

1 operation
  • POST /v1/invoices
invoices.drafts_not_supported422not retryable· change the request

Draft invoices are not supported: every submission is sent immediately. Remove the _draft flag to send the invoice.

1 operation
  • POST /v1/invoices
invoices.duplicate_document409not retryable· change the request

An identical invoice was sent moments ago. The body names the earlier one.

1 operation
  • POST /v1/invoices
invoices.export_format_invalid400not retryable· change the request

The requested export format is not one this endpoint produces.

2 operations
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/invoices/{id}/as/{format}
invoices.export_format_unavailable404not retryable· change the request

The invoice exists, but its sending evidence does not contain the requested export format. The response body lists the available MIME types; a media type listed there may belong to a different XML schema than the one requested.

2 operations
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/invoices/{id}/as/{format}
invoices.export_returned200not retryable· nothing to do

The stored document selected by the requested format was returned.

2 operations
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/invoices/{id}/as/{format}
invoices.field_too_long422not retryable· change the request

A field is longer than this API records. The body names which.

1 operation
  • POST /v1/invoices
invoices.france_buyer_siren_missing400not retryable· change the request

The invoice cannot be sent under the French regime: the buyer's SIREN could not be determined from the request.

1 operation
  • POST /v1/invoices
invoices.france_cadre_invalid400not retryable· change the request

The Cadre de Facturation on this invoice is not one of the published values.

1 operation
  • POST /v1/invoices
invoices.france_credit_note_reference_invalid400not retryable· change the request

The credit note cannot be sent under the French regime: it must name the invoice it credits and that invoice's issue date (French rule BR-FR-CO-05).

1 operation
  • POST /v1/invoices
invoices.france_invoice_number_invalid400not retryable· change the request

The invoice number cannot be used under the French regime: it is too long or contains characters French rule BR-FR-01 does not allow.

1 operation
  • POST /v1/invoices
invoices.france_regime_not_eligible422not retryable· contact support

This invoice declares the French regime, but the issuing identity is not ready for it: its French directory registration or its SIREN is missing.

1 operation
  • POST /v1/invoices
invoices.invalid_base_quantity422not retryable· change the request

A line's base quantity is zero, negative or not a finite number.

1 operation
  • POST /v1/invoices
invoices.invalid_country_code422not retryable· change the request

A country code is not on the network's published list (BR-CL-14).

1 operation
  • POST /v1/invoices
invoices.invalid_line_quantity422not retryable· change the request

A line quantity is zero, negative or not a finite number.

1 operation
  • POST /v1/invoices
invoices.invalid_provider_tax_rate422not retryable· change the request

A tax rate on this invoice is not one the network accepts for the chosen category.

1 operation
  • POST /v1/invoices
invoices.invalid_vat_category422not retryable· change the request

That VAT category is not one the network recognises.

1 operation
  • POST /v1/invoices
invoices.listed200not retryable· nothing to do

The invoices were listed.

2 operations
  • GET /v1/invoices
  • HEAD /v1/invoices
invoices.mark_body_invalid400not retryable· change the request

The request body is not valid JSON.

1 operation
  • POST /v1/invoices/{id}/mark-as
invoices.mark_state_required400not retryable· change the request

The request must name the state to record, as a string.

1 operation
  • POST /v1/invoices/{id}/mark-as
invoices.mark_state_unknown400not retryable· change the request

That state is not one this endpoint records. The body lists the accepted ones.

1 operation
  • POST /v1/invoices/{id}/mark-as
invoices.marked200not retryable· nothing to do

The invoice state was recorded.

1 operation
  • POST /v1/invoices/{id}/mark-as
invoices.not_found404not retryable· change the request

No invoice is visible under this id for this account and environment.

9 operations
  • DELETE /v1/invoices/{id}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • PUT /v1/invoices/{id}
invoices.outside_scope_sender_has_tax_identifier422not retryable· change the request

This sender has a tax identifier registered, so an outside-scope invoice cannot be sent. The response body names the compatible profile.

1 operation
  • POST /v1/invoices
invoices.payment_account_required422not retryable· change the request

A credit transfer needs the payee account, and this invoice does not carry one.

1 operation
  • POST /v1/invoices
invoices.payment_mandate_required422not retryable· change the request

The chosen payment means needs a mandate this invoice does not carry.

1 operation
  • POST /v1/invoices
invoices.payment_report_provider_failed422not retryable· contact support

The provider reported that the payment report for this invoice failed. Whether the tax authority received it is not established. Contact support.

1 operation
  • POST /v1/invoices/{id}/mark-as
invoices.payment_report_unconfirmed409not retryable· contact support

The payment report for this invoice is pending reconciliation with the provider. Contact support if this persists.

1 operation
  • POST /v1/invoices/{id}/mark-as
invoices.payment_reporting_credit_note422not retryable· change the request

Payment reporting applies to invoices, not credit notes. Reporting a refund against the credited invoice is not supported yet.

1 operation
  • POST /v1/invoices/{id}/mark-as
invoices.payment_reporting_not_applicable422not retryable· change the request

Payment reporting is available for French CTC invoices only. This invoice was not sent under the French mandate profile.

1 operation
  • POST /v1/invoices/{id}/mark-as
invoices.platform_billing_not_active422not retryable· contact support

This platform account cannot send: its platform billing contract is suspended, or not live.

3 operations
  • POST /v1/invoices
  • POST /v1/invoices/send/{id}
  • POST /v1/received-documents/{id}/responses
invoices.production_access_expired422not retryable· contact support

Production access for this account has expired. Contact support to restore it.

3 operations
  • POST /v1/invoices
  • POST /v1/invoices/send/{id}
  • POST /v1/received-documents/{id}/responses
invoices.read200not retryable· nothing to do

The invoice was read.

2 operations
  • GET /v1/invoices/{id}
  • HEAD /v1/invoices/{id}
invoices.recipient_not_in_directory422not retryable· change the request

The recipient is not registered in the Peppol Directory, and strict checking was requested.

1 operation
  • POST /v1/invoices
invoices.sender_identity_incomplete422not retryable· contact support

This account has no Peppol identity registered, so it cannot send in production.

1 operation
  • POST /v1/invoices
invoices.sender_tax_country_missing422not retryable· contact support

The sender's tax country could not be resolved, and it decides which national rules apply.

1 operation
  • POST /v1/invoices
invoices.sender_tax_identifier_missing422not retryable· change the request

This sender has no tax identifier registered, so a tax-bearing invoice cannot be sent. The response body names the compatible profile.

1 operation
  • POST /v1/invoices
invoices.sender_tax_role_unclassified422not retryable· contact support

The sender's identifier scheme is not in the provider's sender-identity table, so the tax mode cannot be decided. The invoice was not sent.

1 operation
  • POST /v1/invoices
invoices.sub_tenant_vat_missing422not retryable· contact support

This sub-tenant has no VAT identifier registered, which a tax-bearing invoice requires.

1 operation
  • POST /v1/invoices
invoices.submission_record_missing500not retryable· contact support

The invoice record is unavailable. Contact support with the document id.

2 operations
  • GET /v1/invoices/{id}
  • HEAD /v1/invoices/{id}
invoices.unsupported_payment_means422not retryable· change the request

That payment means has no route on the Peppol network. The body lists the ones that do.

1 operation
  • POST /v1/invoices

invoices_import24

invoices_import.created201not retryable· nothing to do

The document was accepted and submitted to the Peppol network unchanged.

1 operation
  • POST /v1/invoices/import
invoices_import.document_too_complex422not retryable· change the request

The document's structure is too large to validate at bounded cost. Split it up.

1 operation
  • POST /v1/invoices/import
invoices_import.duplicate_document409not retryable· change the request

An identical document was sent moments ago. The body names the earlier one.

1 operation
  • POST /v1/invoices/import
invoices_import.file_required400not retryable· change the request

The request must carry a `file` field holding the base64-encoded document.

1 operation
  • POST /v1/invoices/import
invoices_import.invalid_base64400not retryable· change the request

The `file` field is not valid base64. It is never repaired before sending.

1 operation
  • POST /v1/invoices/import
invoices_import.malformed_xml422not retryable· change the request

The supplied document is not accepted as XML.

1 operation
  • POST /v1/invoices/import
invoices_import.not_ubl_document422not retryable· change the request

The supplied document is not a UBL Invoice or CreditNote.

1 operation
  • POST /v1/invoices/import
invoices_import.recipient_required400not retryable· change the request

The recipient's Peppol identifier is required: the document does not decide where it goes.

1 operation
  • POST /v1/invoices/import
invoices_import.rulebook_evaluation_failed422not retryable· change the request

The official Peppol rulebook could not evaluate this document, so it was not sent. Retrying gives the same answer; change the document.

1 operation
  • POST /v1/invoices/import
invoices_import.undecodable_document422not retryable· change the request

The document is not valid UTF-8. It is sent untouched, so it must be readable as given.

1 operation
  • POST /v1/invoices/import
invoices_import.unsupported_encoding422not retryable· change the request

The document declares an XML encoding other than UTF-8. Re-encode it and submit again.

1 operation
  • POST /v1/invoices/import
invoices_import.validation_failed422not retryable· change the request

The document breaks fatal Peppol rules and was not sent. The body names them.

1 operation
  • POST /v1/invoices/import

lookup8

lookup.cta_recorded204not retryable· nothing to do

Lookup CTA click recorded.

1 operation
  • POST /v1/peppol-lookup/cta
lookup.directory_unavailable502retryable· retry

The Peppol Directory is temporarily unavailable. Try again shortly.

2 operations
  • GET /v1/peppol-lookup/search
  • HEAD /v1/peppol-lookup/search
lookup.identifier_invalid400not retryable· change the request

The Peppol identifier is not in a recognised format.

2 operations
  • GET /v1/peppol-lookup
  • HEAD /v1/peppol-lookup
lookup.network_unavailable502retryable· retry

The Peppol network lookup is temporarily unavailable. Try again shortly.

2 operations
  • GET /v1/peppol-lookup
  • HEAD /v1/peppol-lookup
lookup.participant_found200not retryable· nothing to do

The participant is registered on the Peppol network.

2 operations
  • GET /v1/peppol-lookup
  • HEAD /v1/peppol-lookup
lookup.participant_not_registered200not retryable· nothing to do

No participant is registered under this identifier.

2 operations
  • GET /v1/peppol-lookup
  • HEAD /v1/peppol-lookup
lookup.query_invalid400not retryable· change the request

The search query is missing or outside the accepted length.

2 operations
  • GET /v1/peppol-lookup/search
  • HEAD /v1/peppol-lookup/search
lookup.search_completed200not retryable· nothing to do

The participant search completed.

2 operations
  • GET /v1/peppol-lookup/search
  • HEAD /v1/peppol-lookup/search

newsletter11

newsletter.confirmation_failed302not retryable· nothing to do

Subscription could not be confirmed. Redirecting to the error page.

3 operations
  • GET /v1/newsletter/confirm
  • HEAD /v1/newsletter/confirm
  • POST /v1/newsletter/confirm
newsletter.invalid_request400not retryable· change the request

The subscription request is not valid.

1 operation
  • POST /v1/newsletter/subscribe
newsletter.token_invalid400not retryable· change the request

This link's token is not valid or has expired.

3 operations
  • GET /v1/newsletter/unsubscribe
  • HEAD /v1/newsletter/unsubscribe
  • POST /v1/newsletter/unsubscribe
newsletter.token_missing400not retryable· change the request

This link is missing its token.

3 operations
  • GET /v1/newsletter/unsubscribe
  • HEAD /v1/newsletter/unsubscribe
  • POST /v1/newsletter/unsubscribe
newsletter.unsubscribe_failed500retryable· retry

The unsubscribe could not be recorded. Try again shortly.

1 operation
  • POST /v1/newsletter/unsubscribe
newsletter.unsubscribe_page_returned200not retryable· nothing to do

Unsubscribe confirmation page returned.

2 operations
  • GET /v1/newsletter/unsubscribe
  • HEAD /v1/newsletter/unsubscribe
newsletter.unsubscribed302not retryable· nothing to do

Unsubscribed. Redirecting to the confirmation page.

1 operation
  • POST /v1/newsletter/unsubscribe

onboarding11

onboarding.field_length_invalid400not retryable· change the request

One or more fields fall outside the length the provider accepts. The body lists them.

1 operation
  • POST /v1/onboarding/legal-entity
onboarding.iceland_kennitala_first400not retryable· change the request

An Icelandic legal entity must register its kennitala (0196) before any other identifier: Icelandic rule IS-R-002 requires it as the seller's legal identifier.

1 operation
  • POST /v1/onboarding/legal-entity
onboarding.peppol_identifier_invalid400not retryable· change the request

The Peppol identifier is not acceptable for this scheme. The body names why.

1 operation
  • POST /v1/onboarding/legal-entity
onboarding.peppol_scheme_invalid400not retryable· change the request

The Peppol scheme is missing, too long, or not a string.

1 operation
  • POST /v1/onboarding/legal-entity
onboarding.provider_not_configured500not retryable· contact support

The Peppol provider is not configured for this environment. Contact support.

1 operation
  • POST /v1/onboarding/legal-entity
onboarding.registryless_not_permitted400not retryable· change the request

This scheme has no registry behind it, so it cannot be verified and is limited to the sandbox.

1 operation
  • POST /v1/onboarding/legal-entity
onboarding.required_field_invalid400not retryable· change the request

A required field is missing or is not of the expected type. The body names which.

1 operation
  • POST /v1/onboarding/legal-entity
onboarding.scheme_not_routable400not retryable· change the request

This scheme is not on the Peppol network: a participant registered under it is reachable by nobody.

1 operation
  • POST /v1/onboarding/legal-entity

provider11

provider.authentication_failed502not retryable· contact support

getpeppr could not authenticate with the Peppol provider. Contact support.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.conflict409not retryable· change the request

The provider already holds this resource. Choose a different value or contact support.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.not_configured503not retryable· contact support

The Peppol provider is not configured for this environment. Contact support.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.not_supported501not retryable· nothing to do

The Peppol provider does not support this operation.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.rejected422not retryable· change the request

The provider refused this request. The response body may name the field to fix, or only report the refusal.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.request_invalid400not retryable· change the request

The provider rejected this request as malformed. Check the request and retry.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.resource_not_found404not retryable· change the request

The provider has no record of this resource.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.retry_later503retryable· retry

The Peppol provider could not be reached just now. Retry shortly.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.throttled429retryable· retry after the interval

The Peppol provider is throttling requests. Wait and retry.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.unavailable502retryable· retry

The Peppol provider is temporarily unavailable. Retry shortly.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}
provider.unexpected502not retryable· contact support

The Peppol provider returned an unexpected response. Quote the request id to support.

17 operations
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/directory/{params}
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • HEAD /v1/directory/{params}
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/invoices/{id}

rate_limit12

rate_limit.account_exceeded429retryable· retry after the interval

Rate limit exceeded for this account. Retry after the interval in Retry-After.

66 operations
  • DELETE /v1/bank-accounts/{id}
  • DELETE /v1/contacts/{id}
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • DELETE /v1/transports/{code}
  • GET /v1/bank-accounts
  • GET /v1/bank-accounts/{id}
  • GET /v1/capabilities
  • GET /v1/contacts
  • GET /v1/contacts/{id}
  • GET /v1/directory/search
  • GET /v1/directory/{params}
  • GET /v1/events
  • GET /v1/identity
  • GET /v1/invoices
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • GET /v1/legal-entities
  • GET /v1/legal-entities/{id}
  • GET /v1/received-documents
  • GET /v1/received-documents/{id}
  • GET /v1/received-documents/{id}/as/xml
  • GET /v1/received-documents/{id}/responses
  • GET /v1/transports
  • GET /v1/transports/types
  • GET /v1/transports/{code}
  • HEAD /v1/bank-accounts
  • HEAD /v1/bank-accounts/{id}
  • HEAD /v1/capabilities
  • HEAD /v1/contacts
  • HEAD /v1/contacts/{id}
  • HEAD /v1/directory/search
  • HEAD /v1/directory/{params}
  • HEAD /v1/events
  • HEAD /v1/identity
  • HEAD /v1/invoices
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • HEAD /v1/legal-entities
  • HEAD /v1/legal-entities/{id}
  • HEAD /v1/received-documents
  • HEAD /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/responses
  • HEAD /v1/transports
  • HEAD /v1/transports/types
  • HEAD /v1/transports/{code}
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • POST /v1/transports
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
  • PUT /v1/invoices/{id}
  • PUT /v1/transports/{code}
rate_limit.attestation_issue_exceeded429retryable· retry after the interval

Too many attestation requests. Retry after the interval in Retry-After.

1 operation
  • POST /v1/legal-entities/{id}/attestation
rate_limit.directory_exceeded429retryable· retry after the interval

Directory lookup rate limit exceeded. Retry after the interval in Retry-After.

5 operations
  • GET /v1/directory/search
  • GET /v1/directory/{params}
  • HEAD /v1/directory/search
  • HEAD /v1/directory/{params}
  • POST /v1/invoices
rate_limit.key_exceeded429retryable· retry after the interval

Rate limit exceeded for this API key. Retry after the interval in Retry-After.

66 operations
  • DELETE /v1/bank-accounts/{id}
  • DELETE /v1/contacts/{id}
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • DELETE /v1/transports/{code}
  • GET /v1/bank-accounts
  • GET /v1/bank-accounts/{id}
  • GET /v1/capabilities
  • GET /v1/contacts
  • GET /v1/contacts/{id}
  • GET /v1/directory/search
  • GET /v1/directory/{params}
  • GET /v1/events
  • GET /v1/identity
  • GET /v1/invoices
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • GET /v1/legal-entities
  • GET /v1/legal-entities/{id}
  • GET /v1/received-documents
  • GET /v1/received-documents/{id}
  • GET /v1/received-documents/{id}/as/xml
  • GET /v1/received-documents/{id}/responses
  • GET /v1/transports
  • GET /v1/transports/types
  • GET /v1/transports/{code}
  • HEAD /v1/bank-accounts
  • HEAD /v1/bank-accounts/{id}
  • HEAD /v1/capabilities
  • HEAD /v1/contacts
  • HEAD /v1/contacts/{id}
  • HEAD /v1/directory/search
  • HEAD /v1/directory/{params}
  • HEAD /v1/events
  • HEAD /v1/identity
  • HEAD /v1/invoices
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • HEAD /v1/legal-entities
  • HEAD /v1/legal-entities/{id}
  • HEAD /v1/received-documents
  • HEAD /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/responses
  • HEAD /v1/transports
  • HEAD /v1/transports/types
  • HEAD /v1/transports/{code}
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • POST /v1/transports
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
  • PUT /v1/invoices/{id}
  • PUT /v1/transports/{code}
rate_limit.onboarding_exceeded429retryable· retry after the interval

Too many onboarding attempts. Retry after the interval in Retry-After.

1 operation
  • POST /v1/onboarding/legal-entity
rate_limit.public_cta_exceeded429retryable· retry after the interval

Too many requests from this address. Wait and retry.

1 operation
  • POST /v1/peppol-lookup/cta
rate_limit.public_lookup_exceeded429retryable· retry after the interval

Too many directory lookups from this address. Wait and retry.

2 operations
  • GET /v1/peppol-lookup
  • HEAD /v1/peppol-lookup
rate_limit.public_search_exceeded429retryable· retry after the interval

Too many directory searches from this address. Wait and retry.

2 operations
  • GET /v1/peppol-lookup/search
  • HEAD /v1/peppol-lookup/search
rate_limit.unsubscribe_exceeded429retryable· retry after the interval

Too many unsubscribe requests from this address. Wait and retry.

3 operations
  • GET /v1/unsubscribe
  • HEAD /v1/unsubscribe
  • POST /v1/unsubscribe
rate_limit.validation_exceeded429retryable· retry after the interval

Validation rate limit exceeded. Retry after the interval in Retry-After.

3 operations
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl

received_documents13

received_documents.listed200not retryable· nothing to do

Received document list returned.

2 operations
  • GET /v1/received-documents
  • HEAD /v1/received-documents
received_documents.not_found404not retryable· change the request

No received document matches this identifier on this account.

7 operations
  • GET /v1/received-documents/{id}
  • GET /v1/received-documents/{id}/as/xml
  • GET /v1/received-documents/{id}/responses
  • HEAD /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/responses
  • POST /v1/received-documents/{id}/responses
received_documents.read200not retryable· nothing to do

Received document returned.

2 operations
  • GET /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}
received_documents.response_invalid400not retryable· change the request

The invoice response is invalid. Check the response code, reasons and actions.

1 operation
  • POST /v1/received-documents/{id}/responses
received_documents.response_unconfirmed409not retryable· contact support

An earlier attempt to send this invoice response got no answer and cannot be safely retried.

1 operation
  • POST /v1/received-documents/{id}/responses
received_documents.responses_listed200not retryable· nothing to do

Invoice responses returned.

2 operations
  • GET /v1/received-documents/{id}/responses
  • HEAD /v1/received-documents/{id}/responses
received_documents.xml_expired410not retryable· nothing to do

The original UBL of this received document is no longer retained.

2 operations
  • GET /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/as/xml
received_documents.xml_returned200not retryable· nothing to do

Received document UBL returned.

2 operations
  • GET /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/as/xml

request6

request.body_too_large413not retryable· change the request

Request body exceeds the maximum size accepted by this endpoint.

15 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
  • PUT /v1/invoices/{id}
request.invalid_json400not retryable· change the request

The request body is not valid JSON.

11 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/onboarding/legal-entity
  • POST /v1/received-documents/{id}/responses
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
request.method_not_allowed405not retryable· change the request

This HTTP method is not allowed on this endpoint. See the Allow header.

Answered by the API edge: every /v1 path, for a method it does not implement

request.not_found404not retryable· change the request

No API endpoint matches this host and path.

Answered by the API edge: any /v1 path no route serves

request.preflight_ok204not retryable· nothing to do

CORS preflight accepted.

Answered by the API edge: every /v1 path, on OPTIONS

request.resource_id_malformed404not retryable· change the request

This id is not in the getpeppr id format. Use an id exactly as getpeppr returned it, not a reference from your own system.

21 operations
  • DELETE /v1/bank-accounts/{id}
  • DELETE /v1/contacts/{id}
  • DELETE /v1/legal-entities/{id}
  • GET /v1/bank-accounts/{id}
  • GET /v1/contacts/{id}
  • GET /v1/legal-entities/{id}
  • GET /v1/received-documents/{id}
  • GET /v1/received-documents/{id}/as/xml
  • GET /v1/received-documents/{id}/responses
  • HEAD /v1/bank-accounts/{id}
  • HEAD /v1/contacts/{id}
  • HEAD /v1/legal-entities/{id}
  • HEAD /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/responses
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/received-documents/{id}/responses
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}

send_as4

send_as.sender_selector_ambiguous400not retryable· change the request

`sender` must carry exactly one of legalEntityId or externalSubTenantId.

2 operations
  • POST /v1/invoices
  • POST /v1/invoices/import
send_as.sub_tenant_not_found404not retryable· change the request

No sub-tenant legal entity is visible under this reference for this platform account.

2 operations
  • POST /v1/invoices
  • POST /v1/invoices/import
send_as.sub_tenant_not_sendable422not retryable· contact support

This sub-tenant's Peppol identity is not in a state that allows sending.

4 operations
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/received-documents/{id}/responses
send_as.sub_tenant_test_identity_required422not retryable· change the request

This sandbox sub-tenant's identity cannot send. Test with a separate test identity (scheme 9915 in most countries; see the docs).

4 operations
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/received-documents/{id}/responses

server1

server.unexpected_error500not retryable· contact support

An unexpected error occurred. Quote the request id when contacting support.

85 operations
  • DELETE /v1/bank-accounts/{id}
  • DELETE /v1/contacts/{id}
  • DELETE /v1/invoices/{id}
  • DELETE /v1/legal-entities/{id}
  • DELETE /v1/transports/{code}
  • GET /v1/bank-accounts
  • GET /v1/bank-accounts/{id}
  • GET /v1/capabilities
  • GET /v1/contacts
  • GET /v1/contacts/{id}
  • GET /v1/directory/search
  • GET /v1/directory/{params}
  • GET /v1/events
  • GET /v1/health
  • GET /v1/identity
  • GET /v1/invoices
  • GET /v1/invoices/{id}
  • GET /v1/invoices/{id}/as/{format}
  • GET /v1/legal-entities
  • GET /v1/legal-entities/{id}
  • GET /v1/newsletter/confirm
  • GET /v1/newsletter/unsubscribe
  • GET /v1/peppol-lookup
  • GET /v1/peppol-lookup/search
  • GET /v1/received-documents
  • GET /v1/received-documents/{id}
  • GET /v1/received-documents/{id}/as/xml
  • GET /v1/received-documents/{id}/responses
  • GET /v1/transports
  • GET /v1/transports/types
  • GET /v1/transports/{code}
  • GET /v1/unsubscribe
  • GET /v1/version
  • HEAD /v1/bank-accounts
  • HEAD /v1/bank-accounts/{id}
  • HEAD /v1/capabilities
  • HEAD /v1/contacts
  • HEAD /v1/contacts/{id}
  • HEAD /v1/directory/search
  • HEAD /v1/directory/{params}
  • HEAD /v1/events
  • HEAD /v1/health
  • HEAD /v1/identity
  • HEAD /v1/invoices
  • HEAD /v1/invoices/{id}
  • HEAD /v1/invoices/{id}/as/{format}
  • HEAD /v1/legal-entities
  • HEAD /v1/legal-entities/{id}
  • HEAD /v1/newsletter/confirm
  • HEAD /v1/newsletter/unsubscribe
  • HEAD /v1/peppol-lookup
  • HEAD /v1/peppol-lookup/search
  • HEAD /v1/received-documents
  • HEAD /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}/as/xml
  • HEAD /v1/received-documents/{id}/responses
  • HEAD /v1/transports
  • HEAD /v1/transports/types
  • HEAD /v1/transports/{code}
  • HEAD /v1/unsubscribe
  • HEAD /v1/version
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/ack
  • POST /v1/invoices/{id}/mark-as
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation
  • POST /v1/newsletter/confirm
  • POST /v1/newsletter/subscribe
  • POST /v1/newsletter/unsubscribe
  • POST /v1/onboarding/legal-entity
  • POST /v1/peppol-lookup/cta
  • POST /v1/received-documents/{id}/responses
  • POST /v1/transports
  • POST /v1/unsubscribe
  • POST /v1/validate
  • POST /v1/validate/server
  • POST /v1/validate/ubl
  • PUT /v1/bank-accounts/{id}
  • PUT /v1/contacts/{id}
  • PUT /v1/invoices/{id}
  • PUT /v1/transports/{code}

transports5

transports.listed200not retryable· nothing to do

Transport list returned.

2 operations
  • GET /v1/transports
  • HEAD /v1/transports
transports.managed_by_provider405not retryable· nothing to do

Transport configuration is managed automatically and cannot be changed through the API.

3 operations
  • DELETE /v1/transports/{code}
  • POST /v1/transports
  • PUT /v1/transports/{code}
transports.not_found404not retryable· change the request

No transport matches this code.

2 operations
  • GET /v1/transports/{code}
  • HEAD /v1/transports/{code}
transports.read200not retryable· nothing to do

Transport returned.

2 operations
  • GET /v1/transports/{code}
  • HEAD /v1/transports/{code}
transports.types_listed200not retryable· nothing to do

Transport type list returned.

2 operations
  • GET /v1/transports/types
  • HEAD /v1/transports/types

unsubscribe5

unsubscribe.failed500retryable· retry

The unsubscribe could not be recorded. Try again shortly.

1 operation
  • POST /v1/unsubscribe
unsubscribe.page_returned200not retryable· nothing to do

Unsubscribe confirmation page returned.

2 operations
  • GET /v1/unsubscribe
  • HEAD /v1/unsubscribe
unsubscribe.succeeded200not retryable· nothing to do

Unsubscribed from non-critical email.

1 operation
  • POST /v1/unsubscribe
unsubscribe.token_invalid400not retryable· change the request

This link's token is not valid or has expired.

3 operations
  • GET /v1/unsubscribe
  • HEAD /v1/unsubscribe
  • POST /v1/unsubscribe
unsubscribe.token_missing400not retryable· change the request

This link is missing its token.

3 operations
  • GET /v1/unsubscribe
  • HEAD /v1/unsubscribe
  • POST /v1/unsubscribe

validation1

validation.completed200not retryable· nothing to do

The invoice was checked. The body carries the verdict and any errors.

1 operation
  • POST /v1/validate

validation_server8

validation_server.completed200not retryable· nothing to do

The invoice was checked against the network rules. The body carries the verdict.

1 operation
  • POST /v1/validate/server
validation_server.too_many_lines400not retryable· change the request

The invoice carries more line items than the validator accepts.

1 operation
  • POST /v1/validate/server

validation_ubl11

validation_ubl.document_too_complex400not retryable· change the request

The document's structure is too large to validate at bounded cost. Split it up.

1 operation
  • POST /v1/validate/ubl
validation_ubl.file_required400not retryable· change the request

The request must carry a `file` field holding the base64-encoded document.

1 operation
  • POST /v1/validate/ubl
validation_ubl.invalid_base64400not retryable· change the request

The `file` field is not valid base64. It is never repaired before judging.

1 operation
  • POST /v1/validate/ubl
validation_ubl.malformed_xml400not retryable· change the request

The supplied document is not accepted as XML.

1 operation
  • POST /v1/validate/ubl
validation_ubl.not_ubl_document400not retryable· change the request

The supplied document is not a UBL Invoice or CreditNote.

1 operation
  • POST /v1/validate/ubl
validation_ubl.rulebook_evaluation_failed400not retryable· change the request

The official Peppol rulebook could not evaluate this document, so no verdict exists. Retrying gives the same answer; change the document.

1 operation
  • POST /v1/validate/ubl
validation_ubl.undecodable_document400not retryable· change the request

The document is not valid UTF-8. It is read untouched, so it must be readable as given.

1 operation
  • POST /v1/validate/ubl
validation_ubl.unsupported_encoding400not retryable· change the request

The document declares an XML encoding other than UTF-8. Re-encode it and submit again.

1 operation
  • POST /v1/validate/ubl
validation_ubl.verdict_returned200not retryable· nothing to do

The document was judged against the Peppol rulebooks. The body carries the verdict.

1 operation
  • POST /v1/validate/ubl

version1

version.read200not retryable· nothing to do

API version information returned.

2 operations
  • GET /v1/version
  • HEAD /v1/version

Responses getpeppr did not write

A request reaches our code through a hosting platform, and the platform answers a few of them itself. Those responses carry none of the headers above — no getpeppr request id, no result code — because our API never ran. Most carry the platform's own x-vercel-id instead, which is then the only identifier to quote. They are plain text or HTML rather than JSON, so a client that assumes a JSON body will fail to parse them.

To tell them apart, check for the marker in the third column: the status alone will not, since 405 appears on both sides. One row has no response to inspect at all — the connection is cut before anything is sent, so it surfaces in your client as a transport or protocol error rather than as a status. Treat that one by its cause, listed under “What to do”, not by inspecting a response you will never receive.

WhenResponseHow to recognise itWhat to do
A BREW or PROPFIND request. Both are refused by the edge before any of our code runs.405text/plain; charset=utf-8x-vercel-error: INVALID_REQUEST_METHODUse one of the methods the endpoint documents. The response body carries a Vercel request id — quote that, not a getpeppr request id, because none was issued.
A TRACE request.405text/plain; charset=utf-8x-vercel-error: NOT_ALLOWEDTRACE is refused by the hosting platform and cannot be enabled; use one of the methods the endpoint documents.
A path containing an invalid percent-escape, over HTTP/1.1.400text/plain; charset=utf-8no x-vercel-id and no server header, plus Connection: closePercent-encode path segments correctly before sending; the request never reached getpeppr, so retrying it unchanged cannot succeed.
The same invalid percent-escape, over HTTP/2.no response — the connection is cutHTTP/2 stream reset — PROTOCOL_ERROR, no response headersSame cause as the HTTP/1.1 case, but it surfaces as a connection error rather than a status: fix the encoding rather than treating it as a network fault worth retrying.
Traffic the Vercel firewall judges suspicious from this client address.Not guaranteed to reproduce — it depends on traffic patterns, so treat it as possible rather than as a rule.403text/html; charset=utf-8x-vercel-mitigated: challengePause before retrying. Ordinary requests from the same client are refused while this lasts, so an unchanged request failing here is not evidence that the request itself is wrong; the same request succeeded once the mitigation had cleared.
A request body of roughly 4.5 MB or more, on any route. Measured: 4 487 915 bytes still reached our runtime, 4 498 999 bytes did not.413text/plain; charset=utf-8x-vercel-error: FUNCTION_PAYLOAD_TOO_LARGEKeep the request body under the cap the endpoint documents — 1 MB, or 4 MB where a document travels in the body. Above roughly 4.5 MB the answer is the hosting platform's, not ours: it carries an `x-vercel-id` and none of the `Getpeppr-*` headers, so quote that id when you report it. To stay under the cap, send the document itself rather than a re-encoded copy: base64 adds a third to its size.

Measured against the deployed API, most recently on 2026-09-19. This list covers what we have observed and tested, not everything a platform can possibly do.