Skip to content

Result codes

The 216 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. 65 of 216 have one — treat its absence as normal, not as an error.

216 codes

attestation5

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.no_identifier409not retryable· change the request

This sub-tenant has no Peppol identifier to attest.

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

auth3

auth.api_key_invalid401not retryable· check your key

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

63 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/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/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/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>`.

63 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/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/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/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.too_many_failures429retryable· retry after the interval

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

63 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/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/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/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.

4 operations
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/legal-entities
  • POST /v1/legal-entities/{id}/attestation

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}

directory7

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

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.

6 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
idempotency.key_reused422not retryable· change the request

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

6 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
idempotency.legacy_replay_200200not retryable· nothing to do

Replayed a stored response recorded before result codes existed.

4 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
idempotency.legacy_replay_201201not retryable· nothing to do

Replayed a stored response recorded before result codes existed.

4 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
idempotency.legacy_replay_204204not retryable· nothing to do

Replayed a stored response recorded before result codes existed.

4 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import

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.

4 operations
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/invoices/send/{id}
  • POST /v1/invoices/{id}/mark-as

invoices37

invoices.amount_out_of_range422not retryable· change the request

An amount is outside the range this API records.

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.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_returned200not retryable· nothing to do

The invoice document was returned in the requested format.

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.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_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.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.platform_billing_not_active422not retryable· contact support

This platform account has no live billing contract, so it cannot send.

2 operations
  • POST /v1/invoices
  • POST /v1/invoices/send/{id}
invoices.production_access_expired422not retryable· contact support

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

2 operations
  • POST /v1/invoices
  • POST /v1/invoices/send/{id}
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.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_import23

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.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

lookup7

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.

4 operations
  • GET /v1/peppol-lookup
  • GET /v1/peppol-lookup/search
  • HEAD /v1/peppol-lookup
  • 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.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

newsletter10

newsletter.confirmation_failed302not retryable· nothing to do

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

2 operations
  • GET /v1/newsletter/confirm
  • HEAD /v1/newsletter/confirm
newsletter.confirmation_succeeded302not retryable· nothing to do

Subscription confirmed. Redirecting to the confirmation page.

2 operations
  • GET /v1/newsletter/confirm
  • HEAD /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

onboarding10

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.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.

16 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
  • PUT /v1/invoices/{id}
provider.conflict409not retryable· change the request

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

16 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
  • PUT /v1/invoices/{id}
provider.not_configured503not retryable· contact support

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

16 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
  • PUT /v1/invoices/{id}
provider.not_supported501not retryable· nothing to do

The Peppol provider does not support this operation.

16 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
  • PUT /v1/invoices/{id}
provider.rejected422not retryable· change the request

The provider rejected this document. The response body names what to correct.

16 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
  • PUT /v1/invoices/{id}
provider.request_invalid400not retryable· change the request

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

16 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
  • PUT /v1/invoices/{id}
provider.resource_not_found404not retryable· change the request

The provider has no record of this resource.

16 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
  • PUT /v1/invoices/{id}
provider.retry_later503retryable· retry

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

16 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
  • PUT /v1/invoices/{id}
provider.throttled429retryable· retry after the interval

The Peppol provider is throttling requests. Wait and retry.

16 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
  • PUT /v1/invoices/{id}
provider.unavailable502retryable· retry

The Peppol provider is temporarily unavailable. Retry shortly.

16 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
  • PUT /v1/invoices/{id}
provider.unexpected502not retryable· contact support

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

16 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
  • 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.

63 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/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/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/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.

60 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/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/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/transports
  • 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_documents5

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.

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

Received document returned.

2 operations
  • GET /v1/received-documents/{id}
  • HEAD /v1/received-documents/{id}
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

request5

request.body_too_large413not retryable· change the request

Request body exceeds the maximum size accepted by this endpoint.

14 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/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.

10 operations
  • POST /v1/bank-accounts
  • POST /v1/contacts
  • POST /v1/invoices
  • POST /v1/invoices/import
  • POST /v1/onboarding/legal-entity
  • 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

send_as3

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.

2 operations
  • POST /v1/invoices
  • POST /v1/invoices/import

server1

server.unexpected_error500not retryable· contact support

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

81 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/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/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/subscribe
  • POST /v1/newsletter/unsubscribe
  • POST /v1/onboarding/legal-entity
  • POST /v1/peppol-lookup/cta
  • 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_ubl10

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.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 request id, no result code — because our API never ran. 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.

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