Skip to main content
Version: 1.0.1

Slovakia E-Invoice Peppol


How to get “API Key” from Portal ?​

To obtain the API key to be used in the request body of the login endpoint,

navigate to Settings > ERP Management > API Management in the Portal and use the "Generate" button.

Login and Authorization Configuration​

Technical Details​

PropertyValue
Endpoint/auth/login
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationNone (Initial access)

Request Body (JSON)​

The following fields are used to define login criteria:

FieldTypeDescription
apiKeyStringA unique key assigned specifically to the user for portal access, verifying the system identity. (it is explained in previous section “How to get API Key from portal”)
emailStringThe registered email address in the system belonging to the authorized user performing the operation.

Response Details​

Upon a successful request, a 200 OK code is returned with the following details:

FieldTypeDescription
jwt—The secure session token that must be used as a 'R-Auth' API Key in all subsequent API calls.
expirationDateDateTimeIndicates the exact time the session key will expire; the ERP system can use this data to manage automatic re-login processes.

The JWT token successfully obtained during the authentication step (auth/login) acts as a key to access the secure endpoints of the APIs. After the first successful login, the JWT token obtained from the response of a successful login is used as the R-Auth value in the authorization section of other queries. This configuration ensures that every data exchange between the ERP and the portal occurs over an authenticated and secure channel.

Technical Details​

PropertyValue
KeyEnter R-Auth in the Key field.
Value{{apiKey}} or {{jwt}} (Copy the jwt string returned from the login endpoint.)
Header SettingNavigate to the "Headers" tab of the request to be sent.

How to register your test company on Peppol?​

This guide shows how to complete your Peppol registration in the Docnova Slovakia test environment with the test webhook tool.

Peppol Slovakia test registration guide

Step 1: Open the test webhook tool​

Step 1: Open the test webhook tool

https://www.overtoken.sk/generate

Step 2: Enter the endpoint URL​

Step 2: Enter the endpoint URL

https://api-stage.docnova.ai/webhook/SK/peppol/onboarding

Step 3: Enter the webhook secret​

Step 3: Enter the webhook secret

8e37d6de6c781bde9739410d7c729fec65bbb88467683737e810a858c3888484

Step 4: Enter DIC1 (access point)​

Step 4: Enter DIC1 (access point)

01423948591

Step 5: Enter your company's tax number​

Step 5: Enter your company's tax number

Step 6: Enter your company name​

Step 6: Enter your company name

Step 7: Enter your company e-mail​

Step 7: Enter your company e-mail

Step 8: Send the webhook​

Step 8: Send the webhook

Step 9: Check your Peppol registration​

Step 9: Check your Peppol registration


You can also download the full guide as a PDF.

Open PDF Guide

1. Introduction​

This guide is structured to allow development teams to incorporate portal features into their business workflows with minimum effort and maximum compliance.

2. Authentication POST​

Purpose of Use: This endpoint is utilized by ERP systems to obtain the session key (JWT Token) required to establish a secure connection and initiate data exchange with the docnova portal.

An enterprise ERP system must trigger this endpoint to receive a valid authentication token before performing actions such as transmitting invoices or querying compliance reports via the portal. The acquired token is then provided in the "Authorization" header for all subsequent API requests. This mechanism ensures that data traffic between the ERP and the portal is conducted via a secure, time-bound key rather than transmitting sensitive user credentials for every transaction.

Endpoint Information​

PropertyValue
URL/auth/login
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationNot required (public endpoint)

Example Request​

curl --location 'https://api-stage.docnova.ai/auth/login' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--data-raw '{
"apiKey": "{{your_api_key}}",
"email": "user@example.com"
}'

Request Parameters​

FieldTypeRequiredDescription
emailStringOptionalUser's registered email address
apiKeyStringYesObtained from the portal, via the settings > ERP Management > API Management menu.

Responses​


200 - Login Successful​

Full Response (AccountInfo)

{  
"id": "b32636cd-ec05-4c48-b102-...",
"superAdmin": true,
"companies": [
{
"id": "ba876f6b-e20d-48b4-9ce8-...",
"name": "Demo Slovakia s.r.o.",
"taxNumber": "2029999999",
"website": null,
"address": "Testovacia 123",
"city": "Bratislava",
"state": null,
"country": "SK",
"portalType": "DEFAULT",
"postalCode": "81101",
"phoneNumber": null,
"credit": 5,
"iconUrl": null,
"email": "test@demo-slovakia.example",
"userCount": 1,
"vatNumber": "SK2029999999",
"siretNumber": null,
"frVatRegime": null,
"faxNumber": null,
"mailLanguage": "EN",
"subscriptionType": "6rtHLfnEgfyT7US9XKxVP0s6V4bzDF/mGGe8S/fIatQ=",
"cif": null,
"sftp": false,
"isSubCompany": false,
"participants": [],
"featureAllowed": false,
"subCompanies": [],
"stripeObj": {
"stripeCustomerId": "cus_V4PXDBMLV4t6dV",
"type": "FREE",
"renewalDate": "2026-09-14T08:43:23",
"docnovaAiProductCredits": 0,
"docnovaAiFeatureCredits": 0,
"googleAiFeatureCredits": 0,
"renewal": true
},
"authorities": "WqvBsTh6Pd8fcwTOW93xQB7b6jCQyv/530wsgy5dBU4=",
"compAuthTypes": "Pv24DAWwUcFHwNEg2oKn8vtYU6DqlUpw4VGiJ1afT1M=",
"currencyCode": "EUR",
"remainingDocumentPercentage": 0.0,
"remainingPromotionDays": null,
"trialUsed": false,
"defaultParticipantId": null
}
],
"jwt": "eyJhbGciOiJIUzUxMiJ9...",
"expirationDate": "2026-08-15T08:48:38.587+00:00",
"user": {
"id": null,
"email": "ayse.arslan@melasoft.com",
"firstName": "Ayşe",
"lastName": "Arslan",
"phoneNumber": "905419717819",
"creationTime": null,
"photoUrl": "https://graph.microsoft.com/v1.0/me/photo/$value",
"mailLang": "MS",
"isSuperAdmin": null,
"lastLoginTime": null,
"authorities": null,
"adminAuthorities": "ah+hOi4mUW5o7WqqHQW+FZZBApX8Th/...",
"featureAllowed": false
},
"mfaEnabled": true,
"secretImageUri": null,
"lastCompanyId": "ba876f6b-e20d-48b4-9ce8-cd650ccb6182",
"requiresRecaptchaV2": null,
"message": null,
"active": true,
"isAppLogin": false,
"mfaType": "EMAIL",
"refreshToken": "qI8a9ize1vax_2Yj5EYG-RB8pTLEyM7oZGfo_AHctGspBSCCKgIJtjM-...",
"refreshTokenExpiration": "2026-09-13T08:48:38.592+00:00"
}

Basic Response (JwtBasicResponse)​

{
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expirationDate": "2026-01-30T10:30:00.000Z"
}

Response Fields​


Account Information Fields​

FieldTypeDescription
idStringUser unique identifier
superAdminBooleanWhether user has super admin privileges
companiesArray<AuthorizedCompany>List of companies user is authorized to access
jwtStringJWT access token. Used in R-Auth header for API requests
expirationDateDateTimeJWT token expiration date
refreshTokenStringRefresh token for obtaining new access tokens
refreshTokenExpirationDateTimeRefresh token expiration date
userObjectUser detail information
mfaEnabledBooleanWhether multi factor authentication is enabled
mfaTypeEnumMFA type (GOOGLE, WHATSAPP)
secretImageUriStringGoogle Authenticator QR code URI
lastCompanyIdStringLast selected company ID
requiresRecaptchaV2BooleanWhether reCAPTCHA v2 verification is required
messageStringStatus message (e.g., "MFA required")
activeBooleanWhether user account is active
isAppLoginBooleanWhether this is a mobile app login

Parameter Values Reference Table​

currentCountry Values (Sample List)​

ValueDescription
SKSlovakia
GLOBALGlobal (default)

Company Information Fields​

FieldTypeDescription
idStringCompany unique identifier
nameStringCompany name
taxNumberStringTax number
vatNumberStringVAT number
emailStringCompany email address
websiteStringCompany website
addressStringAddress
cityStringCity
stateStringState or Region
countryEnumCountry code
postalCodeStringPostal code
phoneNumberStringPhone number
faxNumberStringFax number
creditIntegerAvailable credit
userCountIntegerTotal user count
portalTypeEnumPortal type
mailLanguageEnumEmail language
currencyCodeStringCurrency code
sftpBooleanWhether SFTP integration is active
isSubCompanyBooleanWhether it's a sub company
featureAllowedBooleanWhether feature access is granted
participantsArrayPeppol participant information

User Information Fields​

FieldTypeDescription
idStringUser unique identifier
emailStringUser email address
firstNameStringUser first name
lastNameStringUser last name
phoneNumberStringUser phone number
photoUrlStringUser photo URL
mailLangEnumUser email language
isSuperAdminBooleanWhether user has super admin privileges
lastLoginTimeDateTimeLast login time
featureAllowedBooleanWhether feature access is granted

Enum Values Reference Table​

mfaType Values​

ValueDescription
GOOGLEGoogle Authenticator verification
WHATSAPPWhatsApp verification

portalType Values​

ValueDescription
DEFAULTDefault portal
SKSlovakia portal

mailLanguage Values​

ValueDescription
ENEnglish

401 - Unauthorized​

{
"timestamp": "2026-01-29T10:30:00.000Z",
"status": 401,
"error": "Unauthorized",
"message": "Invalid email or password"
}

403 - MFA Required​

{
"id": "user-uuid",
"mfaEnabled": true,
"mfaType": "GOOGLE",
"message": "MFA verification required",
"jwt": null
}

429 - Too Many Requests​

{
"timestamp": "2026-01-29T10:30:00.000Z",
"status": 429,
"error": "Too Many Requests",
"message": "Too many failed login attempts. Please try again later.",
"requiresRecaptchaV2": true
}

3. Peppol - Check Participant GET​

Purpose of Use: This endpoint checks whether a given Peppol participant identifier is reachable on the Peppol network (i.e. registered in an SMP/SML lookup) before an ERP system sends an invoice to it, or before submitting the company's own Peppol registration request. It is the recommended first step before calling send-document-async for a new trading partner, so the ERP can decide whether to route the document via Peppol or fall back to e-mail/PDF delivery.

Endpoint Information​

PropertyValue
URL/peppol/check-participant
MethodGET
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/peppol/check-participant?companyId={{company_uuid}}&participantId=0245:2029999999' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company performing the lookup
participantIdStringYesPeppol participant identifier in icd:value format, e.g. 0245:2029999999 for a Slovak IČO-based identifier

Slovakia Identifier Reference​

ICDSchemeDescription
0245IČOSlovak Business Registration Number
9944VATSlovak VAT number (SK prefix)
0088GLNGlobal Location Number (alternative identifier)

Note: Confirm the exact ICD scheme to use against the counterparty's Peppol directory entry or your company's own SMP registration — Peppol's eDEC code list is maintained by OpenPeppol and may be updated over time.

Responses​

200 - Successful Response​

{
"participantId": "0245:2029999999",
"exists": true,
"checkedAt": "2026-02-11T14:30:00"
}

Response Fields​

FieldTypeDescription
participantIdStringThe participant identifier that was checked
existsBooleanWhether the identifier is currently registered/reachable on the Peppol network
checkedAtDateTimeTimestamp of the lookup

400 - Bad Request​

Trigger: participantId is missing or not in the expected icd:value format.

{
"errorMessage": "Invalid participantId format, expected icd:value",
"errorType": "INVALID_REQUEST",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-4a3b5c6d",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/check-participant"
}

401 - Unauthorized​

Trigger: The R-Auth header is missing/expired, or the user does not belong to the specified company.

{
"errorMessage": "Authorization failed!",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-5b4c6d7e",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/check-participant"
}

500 - Internal Server Error​

Trigger: The SMP/SML lookup service is unreachable, or an unexpected error occurs.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-6c5d7e8f",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/check-participant"
}

4. Send Document Async POST​

Purpose of Use: This endpoint enables ERP systems to transmit e-invoice data to the docnova portal asynchronously. It is designed to enhance system responsiveness and efficiently manage the process queue during high-volume data transfers. After generating an invoice in compliance with Slovak legal standards (Peppol BIS Billing 3.0, UBL format, aligned with EN 16931), the ERP system converts the document into base64 format and transmits it to the portal. Since this method operates asynchronously, the ERP system receives a tracking ID (trackingId) without waiting for the full processing of the document. This prevents delays in ERP-side workflows, and the final status of the document can be queried later using the provided tracking ID.

Endpoint Information​

PropertyValue
URL/invoice/send-document-async
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationJWT Token (R-Auth header) or API Key

Example Request​

curl --location 'https://api-stage.docnova.ai/invoice/send-document-async' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}' \
--data-raw '{
"apiKey": "{{your_api_key}}",
"base64Document": "{{base64_encoded_xml}}",
"base64Pdf": "{{base64_encoded_pdf}}",
"businessType": "B2B",
"compId": "{{company_uuid}}",
"invoiceType": "PEPPOL_BIS",
"receiverEmails": [
"recipient@example.com"
],
"mailTemplateId": "{{template_id}}"
}'

Request Parameters​

FieldTypeRequiredDescription
compIdString (UUID)Conditional*Company unique identifier. Required if apiKey is not provided.
apiKeyStringConditional*API key. Required if compId is not provided.
base64DocumentStringConditional**Base64-encoded XML document. Required if base64Pdf is not provided.
base64PdfStringConditional**Base64-encoded PDF document. Required if base64Document is not provided.
invoiceTypeEnumConditional***Invoice format type. Required if waybillType is not provided.
waybillTypeEnumConditional***Waybill format type. Required if invoiceType is not provided.
businessTypeEnumNoBusiness model type (B2B, B2C, B2G).
receiverEmailsArray<String>NoList of recipient email addresses.
mailTemplateIdStringNoEmail template identifier.

Note:

  • (*) At least one of compId or apiKey must be provided.
  • (**) At least one of base64Document or base64Pdf must be provided.
  • (***) At least one of invoiceType or waybillType must be provided.

businessType Values​

ValueDescription
B2BBusiness to Business
B2CBusiness to Consumer
B2GBusiness to Government

invoiceType Values​

ValueGroupDescription
PEPPOL_BISPeppolPeppol BIS 3.0 format (the only invoice format used for Slovakia)

Note: The waybillType parameter is not used for Slovakia; it only applies to other country modules.

Responses​

200 - Successful Response​

{
"trackingId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "PENDING",
"message": "Document queued for processing"
}

Response Fields​

FieldTypeDescription
trackingIdUUIDUnique process tracking identifier. This ID can be used to query the processing status.
statusEnumCurrent status of the process.
messageStringDescriptive message about the status.

status Values​

ValueDescription
PENDINGProcess queued, not yet started
PROCESSINGProcess in progress
COMPLETEDProcess completed successfully
FAILEDProcess failed
SENDING_FAILEDSending failed
PERMANENT_FAILEDPermanent failure, will not be retried

400 - Bad Request​

{
"trackingId": null,
"status": "FAILED",
"message": "Either invoiceType or waybillType must be provided"
}

401 - Unauthorized​

{
"timestamp": "2026-01-29T10:30:00.000Z",
"status": 401,
"error": "Unauthorized",
"message": "Invalid or expired token"
}

500 - Internal Server Error​

{
"trackingId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "FAILED",
"message": "An unexpected error occurred"
}

5. Send Document Async JSON POST​

Purpose of Use: This endpoint allows ERP systems to submit a Peppol BIS Billing 3.0 / EN 16931 compliant UBL invoice as a structured JSON object (ublDto), instead of sending a Base64-encoded XML file through send-document-async. This is useful for ERP systems that can map their internal invoice model directly to the UBL JSON structure without generating XML themselves.

As with the file-based variant, the call is asynchronous: the portal immediately returns a trackingId, and the final result (success, Peppol delivery, or failure) is retrieved later via GET /invoice/document-status/{trackingId}.

Endpoint Information​

PropertyValue
URL/invoice/send-document-async-json
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationJWT Token (R-Auth header) or API Key

Example Request​

curl --location 'https://api-stage.docnova.ai/invoice/send-document-async-json' \
--header 'R-Auth: {{jwt_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"apiKey": "{{your_api_key}}",
"ublDto": {
"Type": "PEPPOL_BIS",
"IsPeppolParticipant": true,
"ProfileType": "EN16931",
"CustomizationID": {
"Value": "urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0"
},
"ProfileID": {
"Value": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
},
"ID": {
"Value": "2701-1510"
},
"IssueDate": {
"Value": "2026-04-22"
},
"DueDate": {
"Value": "2026-05-22"
},
"InvoiceTypeCode": {
"Value": "380"
},
"DocumentCurrencyCode": {
"Value": "EUR"
},
"AccountingSupplierParty": {
"Party": {
"EndpointID": {
"Value": "SK2029999999",
"schemeID": "0245"
},
"PartyName": [
{ "Name": { "Value": "Demo Slovakia s.r.o." } }
],
"PostalAddress": {
"StreetName": { "Value": "Testovacia 123" },
"CityName": { "Value": "Bratislava" },
"PostalZone": { "Value": "81101" },
"Country": { "IdentificationCode": { "Value": "SK" } }
},
"PartyTaxScheme": [
{
"CompanyID": { "schemeID": "VAT", "Value": "SK2029999999" },
"TaxScheme": { "ID": { "Value": "VAT" } }
}
],
"PartyLegalEntity": [
{
"RegistrationName": { "Value": "Demo Slovakia s.r.o." },
"CompanyID": { "Value": "2029999999", "schemeID": "0245" }
}
]
}
},
"AccountingCustomerParty": {
"Party": {
"EndpointID": {
"Value": "SK1234567890",
"schemeID": "0245"
},
"PartyName": [
{ "Name": { "Value": "Partner Customer s.r.o." } }
],
"PostalAddress": {
"StreetName": { "Value": "Hlavná 1" },
"CityName": { "Value": "Košice" },
"PostalZone": { "Value": "04001" },
"Country": { "IdentificationCode": { "Value": "SK" } }
},
"PartyTaxScheme": [
{
"CompanyID": { "schemeID": "VAT", "Value": "SK1234567890" },
"TaxScheme": { "ID": { "Value": "VAT" } }
}
],
"PartyLegalEntity": [
{
"RegistrationName": { "Value": "Partner Customer s.r.o." },
"CompanyID": { "Value": "1234567890", "schemeID": "0245" }
}
]
}
},
"TaxTotal": [
{
"TaxAmount": { "currencyID": "EUR", "Value": 320.00 },
"TaxSubtotal": [
{
"TaxableAmount": { "currencyID": "EUR", "Value": 1600.00 },
"TaxAmount": { "currencyID": "EUR", "Value": 320.00 },
"TaxCategory": {
"ID": { "Value": "S" },
"Percent": { "Value": 20.00 },
"TaxScheme": { "ID": { "Value": "VAT" } }
}
}
]
}
],
"LegalMonetaryTotal": {
"LineExtensionAmount": { "currencyID": "EUR", "Value": 1600.00 },
"TaxExclusiveAmount": { "currencyID": "EUR", "Value": 1600.00 },
"TaxInclusiveAmount": { "currencyID": "EUR", "Value": 1920.00 },
"PayableAmount": { "currencyID": "EUR", "Value": 1920.00 }
},
"InvoiceLine": [
{
"ID": { "Value": "1" },
"InvoicedQuantity": { "unitCode": "C62", "Value": 1.000 },
"LineExtensionAmount": { "currencyID": "EUR", "Value": 1600.00 },
"Item": {
"Name": { "Value": "Consulting services" },
"ClassifiedTaxCategory": [
{
"ID": { "Value": "S" },
"Percent": { "Value": 20.00 },
"TaxScheme": { "ID": { "Value": "VAT" } }
}
]
},
"Price": {
"PriceAmount": { "currencyID": "EUR", "Value": 1600.00 },
"BaseQuantity": { "Value": 1 }
}
}
]
}
}'

Request Parameters​

FieldTypeRequiredDescription
apiKeyStringConditional*API key. Required if ublDto.CompanyId is not provided
ublDtoObject (UBLDto)YesUBL 2.1 / Peppol BIS compliant invoice data structure
ublDto.TypeEnumNoDocument format type. For Slovakia this is always PEPPOL_BIS
ublDto.IsPeppolParticipantBooleanNoIf true, the document is routed via the Peppol network when the recipient is reachable there
ublDto.CompanyIdUUIDConditional*Sending company's unique identifier. Required if apiKey is not provided
ublDto.ID.ValueStringNoInvoice number
ublDto.IssueDate.ValueString (ISO Date)NoInvoice issue date (YYYY-MM-DD)
ublDto.DueDate.ValueString (ISO Date)NoPayment due date (YYYY-MM-DD)
ublDto.InvoiceTypeCode.ValueStringNoUN/CEFACT code (380 = commercial invoice, 381 = credit note)
ublDto.DocumentCurrencyCode.ValueStringNoCurrency (ISO 4217). EUR for Slovakia
ublDto.AccountingSupplierPartyObjectNoSupplier party: EndpointID (Peppol participant ID), name, address, VAT, legal entity
ublDto.AccountingSupplierParty.Party.EndpointID.schemeIDStringNoPeppol participant scheme (ICD). For Slovakia IČO-based identifiers this is typically 0245
ublDto.AccountingCustomerPartyObjectNoCustomer party, same structure as the supplier
ublDto.TaxTotal[].TaxSubtotal[].TaxCategory.ID.ValueStringNoVAT category code (S = standard rate, Z = zero rate, E = exempt)
ublDto.TaxTotal[].TaxSubtotal[].TaxCategory.Percent.ValueNumberNoVAT rate. Slovakia's standard rate is 20%
ublDto.LegalMonetaryTotalObjectNoMonetary summary: LineExtensionAmount, TaxExclusiveAmount, TaxInclusiveAmount, PayableAmount
ublDto.InvoiceLine[]Array<Object>NoInvoice line items
businessTypeEnumNoB2B, B2C, or B2G
receiverEmailsArray<String>NoRecipient e-mail addresses for notification
mailTemplateIdStringNoE-mail template identifier

Note:

  • (*) At least one of apiKey or ublDto.CompanyId must be provided.
  • schemeID values follow the Peppol eDEC participant identifier code list (ICD). Confirm the exact scheme against your company's Peppol SMP registration.

Responses​

200 - Successful Response​

{
"trackingId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "PENDING",
"message": "Document process started successfully"
}

Response Fields​

FieldTypeDescription
trackingIdUUIDTracking identifier, used with GET /invoice/document-status/{trackingId}
statusEnumInitial status (typically PENDING)
messageStringInformational message

400 - Bad Request​

Scenario: Both apiKey and ublDto.CompanyId are missing.

{
"errorMessage": "apiKey or companyId field is required",
"errorType": "DOCUMENT_PROCESS_REQUIRED_FIELDS",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-0c9d1e2f",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/send-document-async-json"
}

400 - Bad Request​

Scenario: apiKey does not match any registered company.

{
"errorMessage": "Api Key Didnt Match",
"errorType": "API_ERROR",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-1d0e2f3a",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/send-document-async-json"
}

401 - Unauthorized​

Scenario: JWT in R-Auth is invalid or expired, or the user is not authorized for the company.

{
"errorMessage": "Not authorized for this action",
"errorType": "NOT_AUTHORITY",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-2e1f3a4b",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/send-document-async-json"
}

500 - Internal Server Error​

Scenario: Unexpected server error.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-3f2a4b5c",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/send-document-async-json"
}

6. Document Status GET​

Purpose of Use: The GET /invoice/document-status/{trackingId} endpoint is used to query the processing status of documents (invoices, waybills, etc.) that were submitted asynchronously.

When a document is submitted through any of the send-document-async, send-document-async-json, send-by-file-async, or send-portal-new-async endpoints, the system immediately returns a trackingId and begins processing the document in the background.

Polling stops when the status becomes COMPLETED or FAILED.

Endpoint Information​

PropertyValue
URL/invoice/document-status/{trackingId}
MethodGET
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/invoice/document-status/{trackingId}' \ 

--header 'Accept: */*' \

--header 'R-Auth: {JWT_TOKEN}'
}'

Request Parameters​

Path Parameters​

FieldTypeRequiredDescription
trackingIdUUIDYesThe tracking identifier returned from an asynchronous document submission. This is the trackingId value included in the response of send-document-async, send-document-async-json, send-by-file-async, or send-portal-new-async endpoints.

Header Parameters​

FieldTypeRequiredDescription
R-AuthString (JWT)YesUser authentication token. A JWT signed with the HS512 algorithm. The payload carries userId, companyId, authorities, and userType information.
AcceptStringNoResponse media type. Default: /

Responses​

200 - Successful Response​

{
"trackingId": "e20a112a-fcb2-4da2-9efd-...",
"companyId": "a1b2c3d4-e5f6-7890-abcd-...",
"direction": "OUTGOING",
"documentType": "PEPPOL_BIS",
"waybillType": null,
"source": "ERP",
"target": null,
"status": "COMPLETED",
"filename": "invoice_2025.xml",
"invoiceNumber": "INV-2025-001234",
"documentId": "f47ac10b-58cc-4372-a567-...",
"sendingResult": "SUCCESS",
"errorType": null,
"errors": null,
"additionalData": null,
"createdAt": "2025-06-15T10:30:00",
"statusUpdatedAt": "2025-06-15T10:30:45",
"completedAt": "2025-06-15T10:30:45"
}

Success Response Field Descriptions​

FieldTypeDescription
trackingIdUUIDUnique tracking identifier for the document processing
companyIdUUIDUnique identifier of the company the document belongs to
directionString (Enum)Document direction: INCOMING or OUTGOING
documentTypeString (Enum)Document format (e.g.,PEPPOL BIS)
waybillTypeString (Enum)Waybill type. Only populated for waybill operations
sourceString (Enum)Source platform the document was submitted from (e.g., ERP, PORTAL)
targetString (Enum) | nullTarget platform for the document
statusString (Enum)Current processing status: PENDING, PROCESSING, COMPLETED, FAILED, SENDING_FAILED, PERMANENT_FAILED
filenameStringName of the processed file
invoiceNumberString | nullInvoice number assigned to the document. Populated when processing completes
documentIdUUID | nullUnique system identifier of the created document. Populated when processing completes
sendingResultString | nullSending result (e.g., SUCCESS, SENT_TO_PEPPOL). Populated when processing completes
errorTypeString (Enum) | nullError category when an error occurs. Null for successful operations
errorsObject | nullError details. Variable type: can be List<ValidationError>, List<String>, or String
additionalDataObjectAdditional metadata for the document, if any. Generally null for Slovak Peppol documents
createdAtDateTimeTimestamp when the processing record was created (ISO 8601)
statusUpdatedAtDateTimeTimestamp when the status was last updated (ISO 8601)
completedAtDateTime | nullTimestamp when processing completed. Null while processing is ongoing

Parameter Value Reference​

DocumentProcessStatus — Possible Status Values​

ValueDescription
PENDINGDocument is queued, processing has not started yet
PROCESSINGDocument is actively being processed (conversion, validation, sending, etc.)
COMPLETEDDocument processing completed successfully
FAILEDAn error occurred during document processing (may be retried)
SENDING_FAILEDDocument was created but failed during the sending phase
PERMANENT_FAILEDDocument processing permanently failed (will not be retried)

DocumentType — Document Direction​

ValueDescription
INCOMINGIncoming document
OUTGOINGOutgoing document

DataType — Document Format​

ValueDescription
PEPPOL_BISPeppol BIS 3.0 UBL format (the only format used for Slovakia)

Note: The waybillType field is not used for Slovakia; it only applies to other country modules.

ErrorType — Error Types Specific to This Endpoint​

ValueMessage
INVOICE_PROCESS_NOT_FOUNDTracking ID not found
VALIDATION_FAILEDValidation failed!
INVOICE_NULL_COULD_NOT_SAVEInvoice is NULL and/or could not be saved!
INVOICE_CREATION_FAILEDInvoice creation failed!
INVOICE_SENDING_FAILEDInvoice sending failed: {details}

401 - Unauthorized ​

Returned when the R-Auth header is missing, contains an invalid JWT token, or the token has expired.

{
"status": 401,
"error": "Unauthorized",
"message": "Full authentication is required to access this resource"
}
DetailDescription
HTTP Status401 Unauthorized
TriggerJWT token is missing, malformed, expired, or signature verification failed
ResolutionSend a valid, non-expired JWT token in the R-Auth header

404 - Not Found​

Returned when the provided trackingId does not exist in the database.
Response Body: null (body is empty)

DetailDescription
HTTP Status404 Not Found
Response Bodynull (body is empty)
TriggerNo DocumentProcessEntity record matches the given trackingId in the database
Internal Error TypeINVOICE_PROCESS_NOT_FOUND — "Tracking ID not found"
ResolutionVerify the trackingId value is correct. Use the value returned in the response of the async submission endpoint

500 - Internal Server Error​

Returned when an unexpected server error occurs during the status query.
Response Body: null (body is empty)

DetailDescription
HTTP Status500 Internal Server Error
Response Bodynull (body is empty)
TriggerDatabase connection failure, entity conversion error, or other unexpected runtime exceptions
ResolutionCheck server logs. Contact the support team if the issue persists

Status-Based Response Examples​

PENDING — Queued for Processing​


{
"trackingId": "e20a112a-fcb2-4da2-9efd-...",
"companyId": "a1b2c3d4-e5f6-7890-abcd-...",
"direction": null,
"documentType": "PEPPOL_BIS",
"status": "PENDING",
"documentId": null,
"invoiceNumber": null,
"sendingResult": null,
"errorType": null,
"errors": null,
"createdAt": "2025-06-15T10:30:00",
"statusUpdatedAt": "2025-06-15T10:30:00",
"completedAt": null
}

PROCESSING — Currently Processing​

{
"trackingId": "e20a112a-fcb2-4da2-9efd-...",
"companyId": "a1b2c3d4-e5f6-7890-abcd-...",
"direction": "OUTGOING",
"documentType": "PEPPOL_BIS",
"status": "PROCESSING",
"documentId": "f47ac10b-58cc-4372-a567-...",
"invoiceNumber": "INV-2025-001234",
"sendingResult": null,
"errorType": null,
"errors": null,
"createdAt": "2025-06-15T10:30:00",
"statusUpdatedAt": "2025-06-15T10:30:20",
"completedAt": null
}

FAILED — Processing Failed (Validation Error)​


{
"trackingId": "e20a112a-fcb2-4da2-9efd-...",
"companyId": "a1b2c3d4-e5f6-7890-abcd-...",
"direction": null,
"documentType": "PEPPOL_BIS",
"status": "FAILED",
"documentId": null,
"invoiceNumber": null,
"sendingResult": null,
"errorType": "VALIDATION_FAILED",
"errors": [
{
"field": "invoiceNumber",
"message": "Invoice number is required"
},
{
"field": "issueDate",
"message": "Issue date format is invalid"
}
],
"createdAt": "2025-06-15T10:30:00",
"statusUpdatedAt": "2025-06-15T10:30:15",
"completedAt": "2025-06-15T10:30:15"

}

FAILED — Processing Failed (General Error)​

{
"trackingId": "e20a112a-fcb2-4da2-9efd-...",
"companyId": "a1b2c3d4-e5f6-7890-abcd-...",
"direction": "OUTGOING",
"documentType": "PEPPOL_BIS",
"status": "FAILED",
"documentId": null,
"invoiceNumber": null,
"sendingResult": null,
"errorType": "INVOICE_NULL_COULD_NOT_SAVE",
"errors": [
"Invoice is NULL and/or could not be saved! XML parsing error at line 42"
],
"createdAt": "2025-06-15T10:30:00",
"statusUpdatedAt": "2025-06-15T10:30:12",
"completedAt": "2025-06-15T10:30:12"
}

SENDING_FAILED — Sending Failed​

{
"trackingId": "e20a112a-fcb2-4da2-9efd-...",
"companyId": "a1b2c3d4-e5f6-7890-abcd-...",
"direction": "OUTGOING",
"documentType": "PEPPOL_BIS",
"status": "SENDING_FAILED",
"documentId": "f47ac10b-58cc-4372-a567-...",
"invoiceNumber": "INV-2025-001234",
"sendingResult": null,
"errorType": "INVOICE_SENDING_FAILED",
"errors": [
"Invoice sending failed: Peppol access point unreachable"
],
"createdAt": "2025-06-15T10:30:00",
"statusUpdatedAt": "2025-06-15T10:31:00",
"completedAt": "2025-06-15T10:31:00"
}

7. Get Invoice/Document Status GET​

Purpose of Use: This endpoint is used to query the real-time processing status of an invoice/document by using the trackingId returned from an asynchronous document submission request.

After an invoice or document is submitted through an async flow, the first response may only contain a trackingId. This endpoint allows the client to follow the internal processing lifecycle of that document, including whether it is queued, processing, failed, or completed.

Once a documentId has been assigned to the document, this endpoint also returns invoice-level status information such as invoiceStatus and invoiceStatusDate. If the document has not yet been assigned a final documentId, those fields may be null, and only the process-level status fields should be used.

The request requires that the authenticated user in the R-Auth JWT has authority over the queried companyId.


Endpoint Information​

PropertyValue
URL/invoice/get-document-status-by-tracking
MethodGET
Content-TypeNone — query parameters only, no request body
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth: {{jwt_token}}

Example Request​

curl -X GET 'https://api-stage.docnova.ai/invoice/get-document-status-by-tracking?companyId={{company_uuid}}&trackingId={{tracking_uuid}}' \
-H 'accept: */*' \
-H 'R-Auth: {{jwt_token}}'

Request Parameters​

FieldTypeRequiredDescription
companyIdString(UUID)YesUnique identifier of the company that the queried tracking record belongs to. The requesting user must hold a role in this company.
trackingIdString(UUID)YesThe tracking identifier returned in the response of the document's asynchronous submission request. The document status is looked up via this identifier.

Notes

  • The R-Auth header is mandatory.
  • The user in the JWT must have a role in the company matching companyId.
  • If trackingId is not associated with companyId, for example when trying to access a record belonging to another company, a 401 Unauthorized response is returned.
  • If the tracking process is found but no documentId has been assigned yet, only the process-level status fields are returned.

Responses​


200 - Successful Response​

{
"trackingId": "{{tracking_uuid}}",
"documentId": "{{document_uuid}}",
"invoiceStatus": "SENT_TO_PEPPOL",
"invoiceStatusDate": "2026-01-15T12:00:00",
"processStatus": "COMPLETED",
"processStatusUpdatedAt": "2026-01-15T12:00:00"
}

Description: Request succeeded. If the document has not yet been assigned a documentId, the documentId, invoiceStatus, and invoiceStatusDate fields are null, and only processStatus / processStatusUpdatedAt are meaningful.

Response Fields​

FieldTypeDescription
trackingIdString(UUID)Echoes the trackingId sent in the request. Always populated.
documentIdString(UUID)Populated once the document is assigned a final ID. null if the document has not yet been assigned.
invoiceStatusString(Enum)Populated once documentId is assigned. Contains the invoice's country/channel-specific final status. null if documentId is not yet assigned.
invoiceStatusDateString(ISO8601)Timestamp of the last update to invoiceStatus. null if documentId is not yet assigned.
processStatusString(Enum)Status of the document's own processing pipeline. Always populated, even before documentId is assigned.
processStatusUpdatedAtString(ISO8601)Timestamp of the last update to processStatus. Always populated.

Parameter Values Reference Table​

processStatus Values​
ValueDescription
PENDINGProcess has not started yet; queued.
PROCESSINGDocument is currently being processed.
FAILEDProcessing failed; may be retried.
SENDING_FAILEDAn error occurred during the sending stage.
PERMANENT_FAILEDPermanent failure; will not be retried.
COMPLETEDProcess completed successfully.
invoiceStatus Values​
ValueDescription
CREATEDInvoice/document has been created.
SAVED_AS_UBLSaved in UBL format.
SENT_TO_ACCESS_POINTSent to the Access Point.
OCR_WAITINGWaiting for OCR processing.
OCR_PARSEDSuccessfully parsed by OCR.
OCR_FAILEDOCR processing failed.
OCR_PARSED_PENDING_PAYMENTOCR completed, awaiting payment.
OCR_WAITING_TOKENWaiting for a token for OCR.
CANCELEDCanceled.
PENDINGPending.
SAVED_AS_PDFSaved as PDF.
DELETEDDeleted.
COMPLETED_BY_MELA_AICompleted by Mela AI.
SENT_VIA_EMAILSent via email.
SENT_VIA_SFTPSent via SFTP.
SENT_TO_PEPPOLSent to the Peppol network.
SUCCESSOperation succeeded.
INVALID_PARAMETERSInvalid parameters.
TRANSPORT_ERRORPeppol transport error; no automatic retry.
TRANSPORT_ERROR_NO_RETRYPeppol transport error; retry disabled.
NO_SIGNAL_MESSAGE_RECEIVEDNo signal message received.
AS4_ERROR_MESSAGE_RECEIVEDAS4 error message received.
INVALID_SIGNAL_MESSAGE_RECEIVEDInvalid signal message received.
SMP_LOOKUP_FAILEDSMP lookup failed.
CREDIT_BLOCKEDPayment blocked due to credit limit.

All error responses share the following structure:

{
"errorMessage": "<human-readable message>",
"errorType": "<error type key>",
"errorTitle": "<HTTP status name>",
"status": 400,
"errorId": "{{correlation_id}}",
"timestamp": "2026-01-15T12:00:00",
"path": "/invoice/get-document-status-by-tracking"
}

400 - Bad Request​

Tracking ID Not Found

{
"errorMessage": "Tracking ID not found",
"errorType": "INVOICE_PROCESS_NOT_FOUND",
"errorTitle": "BAD_REQUEST",
"status": 400,
"errorId": "{{correlation_id}}",
"timestamp": "2026-01-15T12:00:00",
"path": "/invoice/get-document-status-by-tracking"
}

Description: An ApiError(INVOICE_PROCESS_NOT_FOUND) is thrown when the trackingId is not found in the database.

Note: Although Swagger annotation documents this case as 404, the code currently calls withStatus() on this exception, so RestExceptionHandler returns the default 400 Bad Request.

401 - Unauthorized​

{
"errorMessage": "User is not authorized for this operation",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"status": 401,
"errorId": "{{correlation_id}}",
"timestamp": "2026-01-15T12:00:00",
"path": "/invoice/get-document-status-by-tracking"
}

Trigger: The user in the R-Auth JWT has no role or authority in the given companyId, or the trackingId belongs to a different company than the given companyId.

500 - Internal Server Error​

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"status": 500,
"errorId": "{{correlation_id}}",
"timestamp": "2026-01-15T12:00:00",
"path": "/invoice/get-document-status-by-tracking"
}

Trigger: An unexpected server-side error occurs.

This may happen because of a database connectivity issue, an unhandled exception, or another server-side runtime error.

8. Search Processing History POST​

Purpose of Use: The POST /invoice/document-process/search endpoint serves as the central monitoring and querying interface for all document processing activities within the system. Every document whether it is an invoice, credit note, or waybill that enters or leaves the platform passes through an asynchronous processing pipeline. This endpoint provides full visibility into that pipeline.

Endpoint Information​

PropertyValue
URL/invoice/document-process/search
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)
Required AuthorityADMIN, INCOMING_INVOICE_DISPLAY, or OUTGOING_INVOICE_DISPLAY (at least one)

Example Request​

curl --location 'https://api-stage.docnova.ai/invoice/document-process/search?page=0&size=20&sort=createdAt,desc' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'R-Auth: <JWT_TOKEN>' \
--data '{
"companyId": "<COMPANY_UUID>",
"createdAt": {
"from": "2024-01-01",
"to": "2026-02-28"
}
}'

Request Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company to search
directionString (Enum)NoDocument direction filter (INCOMING or OUTGOING)
sourceString (Enum)NoSource system filter
filenameStringNoExact match filter by filename
statusString (Enum)NoDocument processing status filter
createdAtObject (DateRange)NoCreation date range filter
createdAt.fromString (LocalDate)NoStart date (inclusive). Format: yyyy-MM-dd. Must be past or present
createdAt.toString (LocalDate)NoEnd date (inclusive). Format: yyyy-MM-dd. Must be past or present

Query Parameters (Pagination)​

FieldTypeDefaultDescription
pageInteger0Page number (0 indexed)
sizeInteger20Number of records per page (max 100)
sortStringcreatedAt,descSort field and direction. Format: field,asc|desc

Enum Value Reference​

direction Values (Document Direction)​

ValueDescription
INCOMINGIncoming document
OUTGOINGOutgoing document

status Values (Processing Status)​

ValueDescription
PENDINGQueued and waiting for processing
PROCESSINGCurrently being processed
COMPLETEDSuccessfully completed
FAILEDProcessing failed (retriable)
SENDING_FAILEDFailed at the sending stage
PERMANENT_FAILEDPermanently failed (will not be retried)

source Values (Source and Target System)​

ValueDescription
ERPERP integration
PORTALWeb portal
PORTAL_OCRPortal upload via OCR
EMAIL_OCROCR via email
EMAILEmail
PEPPOLPeppol network
SFTPSFTP connection
HARVESTHarvest integration
SHOPIFYShopify integration
AMAZON_SPAmazon SP API
EBAYeBay integration
HUBSPOTHubSpot integration
LAZADALazada integration
STRIPEStripe integration
SERVICEInternal service

documentType Values (Document Format)​

ValueDescription
PEPPOL_BISPeppol BIS 3.0 (the only document format used for Slovakia)

Note: The waybillType field may appear in responses but is not used for Slovakia (always null); it is populated only for other country modules.

Responses​


200 - Successful Response​

{
"content": [
{
"trackingId": "a1b2c3d4-...",
"companyId": "60ccd1a7-...",
"direction": "INCOMING",
"documentType": "PEPPOL_BIS",
"waybillType": null,
"source": "ERP",
"target": "PEPPOL",
"status": "COMPLETED",
"filename": "invoice_2024_001.xml",
"invoiceNumber": "INV-2024-001",
"documentId": "f5e6d7c8-...",
"sendingResult": "OK",
"errorType": null,
"errors": null,
"additionalData": null,
"createdAt": "2024-06-15T10:30:00",
"statusUpdatedAt": "2024-06-15T10:30:45",
"completedAt": "2024-06-15T10:31:00"
}
],
"totalElements": 150,
"totalPages": 8,
"number": 0,
"size": 20
}

Response Fields​

FieldTypeDescription
contentArray<Object>Page content (document processing records)
content[].trackingIdUUIDProcessing tracking identifier
content[].companyIdUUIDCompany identifier
content[].directionString (Enum)Document direction (INCOMING / OUTGOING)
content[].documentTypeString (Enum)Document format (see documentType enum table)
content[].waybillTypeString (Enum) | nullWaybill type (only for waybill documents)
content[].sourceString (Enum)Source system of the document
content[].targetString (Enum) | nullTarget system for the document
content[].statusString (Enum)Current processing status
content[].filenameStringOriginal filename
content[].invoiceNumberString | nullInvoice number
content[].documentIdUUID | nullAssociated document identifier
content[].sendingResultString | nullSending result message
content[].errorTypeString (Enum) | nullError type code (on failed processes)
content[].errorsObject | nullError details (validation errors, message list, or text)
content[].additionalDataObject | nullCountry or document type specific metadata
content[].createdAtString (DateTime)Creation timestamp. Format: yyyy-MM-ddTHH:mm:ss
content[].statusUpdatedAtString (DateTime)Last status update timestamp
content[].completedAtString (DateTime) | nullCompletion timestamp (only when COMPLETED)
totalElementsLongTotal number of matching records
totalPagesIntegerTotal number of pages
numberIntegerCurrent page number (0-indexed)
sizeIntegerNumber of records per page

400 - Bad Request​

Trigger: When the companyId field is sent as null in the request body (@NotNull validation) or when required fields are missing.
Scenario: Sending a request without providing companyId.

{
"errorMessage": "Document process required fields: companyId",
"errorType": "DOCUMENT_PROCESS_REQUIRED_FIELDS",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-8f2a1b3c",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/document-process/search"
}

400 - Bad Request ​

Trigger: When the request body JSON format is malformed, an invalid enum value is sent, or the date format is incorrect.

Scenario: Sending a value like "UNKNOWN_STATUS" that is not defined in the enum for the status field, or sending an invalid date like "2024-13-45" for the createdAt.from field.

{
"errorMessage": "Invalid request. Cannot deserialize value of type `DocumentProcessStatus` from String \"UNKNOWN_STATUS\"",
"errorType": "INVALID_REQUEST",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-4d5e6f7a",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/document-process/search"
}

401 - Unauthorized​

Trigger: When the R-Auth header is not provided or the JWT token signature is invalid. This error is caught at the Spring Security filter chain and does not reach the RestExceptionHandler.

Scenario: Sending a request without the header or with a corrupted/tampered token.

{
"error": "Unauthorized",
"message": "Full authentication is required to access this resource",
"status": 401
}

401 - Unauthorized​

Trigger: When the JWT token is valid but the user does not have any of the ADMIN, INCOMING_INVOICE_DISPLAY, or OUTGOING_INVOICE_DISPLAY authorities on the specified companyId. Thrown by AuthorizationService.checkAnyAuthorityByCompanyAndUser().

Scenario: Performing a search with a companyId for which the user has no access permissions.

{ 

"errorMessage": "User is not authorized for this operation",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-9a8b7c6d",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/document-process/search"
}

404 - Not Found​

Trigger: When the provided companyId value is not found in the database. A NotFoundException is thrown by CompanyService.

Scenario: Sending a UUID as companyId that has been deleted or never existed.

{
"errorMessage": "Company not found!",
"errorType": "COMPANY_NOT_FOUND",
"errorTitle": "NOT_FOUND",
"errorId": "corr-1b2c3d4e",
"status": 404,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/document-process/search"
}

498 - Token Expired​

Trigger: When the JWT token has expired. Returned by CustomAuthenticationEntryPoint at the Spring Security filter level.

Scenario: Sending a request with an expired JWT token.

{
"errorMessage": "Your session has expired. Please login again.",
"errorType": "TOKEN_EXPIRED",
"errorTitle": "UNAUTHORIZED",
"status": null,
"timestamp": null,
"path": null
}

Note: Since this response is generated at the Security filter level, the timestamp, path, and status fields are not populated by enrichResponse and return null. A custom HTTP status code of 498 is used.

500 - Internal Server Error​

Trigger: When an unexpected error occurs on the server side (database connection failure, NullPointerException, etc.). Caught by the RestExceptionHandler catch-all handler.

Scenario: Database access failure, unexpected runtime exception.

{
"errorMessage": "An unexpected error occurred",
"errorType": "SERVER_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-5e6f7a8b",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/document-process/search"
}

Response Structure Reference (ExceptionResponse)​

FieldTypeDescriptionInclusion Condition
errorMessageStringHuman readable error descriptionAlways
errorTypeStringMachine readable error code (ErrorType enum name)Always
errorTitleString (HttpStatus)HTTP status description (BAD_REQUEST, UNAUTHORIZED, etc.)Always
errorIdStringCorrelation ID (for log tracing)If present in ThreadContext
statusIntegerHTTP status code (numeric)Always
timestampString (DateTime)Timestamp when the error occurredBy RestExceptionHandler
pathStringURI of the requestBy RestExceptionHandler
dataStringAdditional data informationIf present (@JsonInclude NON_NULL)
detailsMap<String, Object>Additional detail informationIf present (@JsonInclude NON_NULL)
validationErrorsArray<ValidationError>Field level validation errorsIf present (@JsonInclude NON_NULL)

Note: The ExceptionResponse class uses @JsonInclude(JsonInclude.Include.NON_NULL). Therefore, fields with null values are excluded from the JSON response.

9. Retrieve Doc by ID and Type GET​

Purpose of Use: The GET /invoice/get-document/{documentId}/{documentTypes} endpoint allows downloading a previously stored invoice or document in a specific format such as PDF, XML, or JSON.

The client provides the document UUID (documentId) and the desired output format (documentTypes). The API returns the document content as Base64 encoded data. This is mainly used in ERP integrations to programmatically fetch, view, archive, or store invoice documents.

When the requested format is pdf, the API returns the printable or viewable PDF file content as Base64 encoded data.

Endpoint Information​

PropertyValue
URL/invoice/get-document//{documentTypes}
MethodGET
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/invoice/get-document/{documentId}/pdf' \
--header 'Accept: */*' \
--header 'R-Auth: {auth-token}'
}'

Request Parameters​

Path Parameters​

Field NameTypeRequiredDescription
documentIdString (UUID)YesUnique identifier of the document. Must be in UUID v4 format. Example: 550e8400-e29b-41d4-a716-...
documentTypesString (Enum)YesRequested document format type. Multiple types can be separated by hyphen -. Example: PDF, XML

Header Parameters​

Field NameTypeRequiredDescription
R-AuthString (JWT)YesAuthentication token. JWT signed with HS512 algorithm.
AcceptStringNoAccepted response media type. Default: /

documentTypes Parameter Values​

ValueFormat TypeDescription
PDFFormatType.PDFReturns Base64-encoded PDF representation of the invoice
XMLFormatType.XMLReturns Base64-encoded UBL XML content of the invoice
JSONFormatType.JSONReturns Base64-encoded UBL DTO JSON content of the invoice
PDF-XMLMultiple formatsMultiple formats can be requested simultaneously using hyphen separator
XML-PDF-JSONMultiple formatsAll three formats can be requested at once

Note: JSON format is only supported for invoices processed by OCR (OCR_PARSED) or completed by MelAI (COMPLETED_BY_MELAI_AI).

Responses​

200 - Successful Response​

{
"documents": [
{
"file_type": "PDF",
"data": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC..."
}
]
}

Successful Response Field Descriptions​

Field NameTypeDescription
documentsList<Document>List of documents in requested formats. Contains one Document object per format.
documents[].file_typeString (Enum)Document format type. Possible values: PDF, XML, JSON
documents[].dataString (Base64)Base64-encoded content of the document. When decoded for PDF, produces a valid PDF file.

Multi-Format Response Example​

{
"documents": [
{
"file_type": "XML",
"data": "PD94bWwgdmVy... (base64)"
},
{
"file_type": "PDF",
"data": "JVBERi0xLjQK... (base64)"
}
]
}

400 - Bad Request​

Returned when an invalid documentTypes value is provided.


{

"errorMessage": "Unsupported document type: DOCX",
"errorType": "INVALID_ARGUMENT",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-def456",
"status": 400,
"timestamp": "2026-02-11T14:31:00",
"path": "/invoice/get-document/af6e8982-b791-4704-bc06-.../docx"
}

FieldDescription
errorMessageSpecifies the unsupported document type and which type was invalid.
errorTypeINVALID_ARGUMENT An invalid parameter was provided.
status400

400 - Bad Request​

Returned when the document's OCR processing has not yet completed (waiting state).

{
"errorMessage": "Invoice is waiting for MelaAIParser. Please try again later",
"errorType": "INVALID_ARGUMENT",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-ghi789",
"status": 400,
"timestamp": "2026-02-11T14:32:00",
"path": "/invoice/get-document/af6e8982-b791-4704-bc06-.../json"
}

FieldDescription
errorMessageIndicates the invoice has not been processed by MelaAI yet and should be retried later.
errorTypeINVALID_ARGUMENT The invoice is not in a processable state currently.
status400

401 - Unauthorized​

Returned when an invalid or missing R-Auth token is provided.


{
"errorMessage": "Authentication is required. Please complete the authentication process.",
"errorType": "AUTHENTICATION_REQUIRED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-abc123",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/get-document/af6e8982-b791-4704-bc06-.../pdf"
}

FieldDescription
errorMessageIndicates that the authentication process must be completed.
errorTypeAUTHENTICATION_REQUIRED Token is missing, expired, or invalid.
status401

404 - Not Found​

Returned when no document matches the provided UUID. Specifically occurs when JSON format is requested and the invoice is not found.

{
"errorMessage": "af6e8982-b791-4704-bc06-d4655faa4b4c Invoice not found!",
"errorType": "NOT_FOUND_INVOICE",
"errorTitle": "NOT_FOUND",
"errorId": "corr-jkl012",
"status": 404,
"timestamp": "2026-02-11T14:33:00",
"path": "/invoice/get-document/af6e8982-b791-4704-bc06-.../json"
}

FieldDescription
errorMessageReturns a not found message along with the document UUID.
errorTypeNOT_FOUND_INVOICE No matching invoice record exists in the database.
status404

500 - Internal Server Error​

Returned when an unexpected error occurs (e.g., file cannot be retrieved from S3, PDF conversion fails).

{ 

"errorMessage": "Internal server error",
"errorType": "SERVER_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-mno345",
"status": 500,
"timestamp": "2026-02-11T14:34:00",
"path": "/invoice/get-document/af6e8982-b791-4704-bc06-.../pdf"
}
FieldDescription
errorMessageGeneric server error message.
errorTypeSERVER_ERROR An unexpected error occurred.
status500

Common Error Response Field Descriptions​

Field NameTypeDescription
errorMessageStringHuman readable description of the error
errorTypeStringProgrammatic classification code of the error
errorTitleString (HttpStatus)Text representation of the HTTP status code
errorIdStringRequest correlation ID (for log tracking)
statusIntegerHTTP status code (numeric)
timestampString (ISO 8601)Timestamp when the error occurred
pathStringEndpoint path where the error occurred
detailsMap<String, Object>Additional error details (if available)
validationErrorsList<ValidationError>List of validation errors (if available)

10. Search Document with Filter POST​

Purpose of Use: The POST /invoice/search-documents endpoint is used to search for invoices and documents belonging to a specific company using various filtering criteria.

This API enables users to list documents associated with their company by applying filters such as date range, document direction (incoming or outgoing), invoice status, and document format (PEPPOL BIS). Results are returned with pagination support, and each page includes the total document count, tax exclusive total amount, and tax inclusive total amount.

Endpoint Information​

PropertyValue
URL/invoice/search-documents
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'api-stage.docnova.ai/invoice/search-documents' \  
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'R-Auth: eyJhbGciOiJIUzUxMiJ9....' \
--data '{
"companyId": "cfffb7b0-608d-49e3-8aa2-8a81109680e2",
"documentType": "OUTGOING",
"endDate": "2026-06-14",
"page": 1,
"status": "SAVED_AS_UBL",
"size": 20,
"startDate": "2026-01-25",
"type": "PEPPOL_BIS"
}'

Request Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company to search documents for
documentTypeString (Enum)NoDocument direction filter. Used to filter incoming or outgoing documents
statusString (Enum)NoInvoice status filter. Returns invoices in a specific status
typeString (Enum)NoDocument format type filter. Filters by invoice format
startDateString (ISO Date)NoSearch start date. Format: YYYY-MM-DD
endDateString (ISO Date)NoSearch end date. Format: YYYY-MM-DD
tinStringNoTax Identification Number filter
uitStringNoUIT identifier filter
referenceDocumentStringNoSearch by reference document number
pageIntegerNoPage number (0-based). Default: 0
sizeIntegerNoNumber of records per page. Default: 50

Parameter Values​

documentType Values​

ValueDescription
INCOMINGIncoming documents (invoices sent by suppliers)
OUTGOINGOutgoing documents (invoices sent to customers)

type Values​

ValueGroupDescription
PEPPOL_BISUBLPeppol BIS 3.0 format (the format used for Slovakia)
PDFPDFUnstructured invoices (paper, images, etc.)

Note: Due to a current platform limitation, the type filter only actively filters results for a specific subset of document formats that does not include PEPPOL_BIS. Sending type: "PEPPOL_BIS" on this endpoint will not narrow the result set — all of the company's documents are returned regardless of the value sent. Use the documentType (direction) and status filters instead to narrow Slovak Peppol document searches.

status Values​

CategoryValueDescription
GeneralCREATEDInvoice created
PENDINGAwaiting processing
CANCELEDCancelled
DELETEDDeleted
SENT_VIA_EMAILSent via email
SavedSAVED_AS_UBLSaved as UBL
SAVED_AS_PDFSaved as PDF
OCROCR_WAITINGOCR processing pending
OCR_PARSEDOCR completed successfully
OCR_FAILEDOCR processing failed
OCR_PARSED_PENDING_PAYMENTOCR completed, payment pending
OCR_WAITING_TOKENOCR waiting for token
COMPLETED_BY_MELA_AICompleted by Mela AI
PeppolSENT_TO_PEPPOLSent to Peppol network
SENT_TO_ACCESS_POINTSent to Access Point
SUCCESSSuccessfully delivered
TRANSPORT_ERRORTransport error
INVALID_PARAMETERSInvalid parameters
NO_SIGNAL_MESSAGE_RECEIVEDNo signal message received
AS4_ERROR_MESSAGE_RECEIVEDAS4 error message received
INVALID_SIGNAL_MESSAGE_RECEIVEDInvalid signal message received
INCOMING_RESPONSE_ACKNOWLEDGEDIncoming response acknowledged (MLR/MLS)
INCOMING_RESPONSE_REJECTEDIncoming response rejected
INCOMING_RESPONSE_ACCEPTEDIncoming response accepted
OUTGOING_RESPONSE_ACKNOWLEDGEDOutgoing response acknowledged (MLR/MLS)
OUTGOING_RESPONSE_REJECTEDOutgoing response rejected
OUTGOING_RESPONSE_ACCEPTEDOutgoing response accepted
OtherCREDIT_BLOCKEDCredit blocked (returns masked data)

Responses​

200 - Successful Response​

{  
"totalCount": 1,
"currencyTotals": [
{
"currency": "EUR",
"totalAmount": 419283.43,
"netAmount": 354187.94,
"taxAmount": 65095.49,
"payableAmount": 416194.42
}
],
"invoiceList": [
{
"id": "c62739c4-ea6a-4aeb-86b0-...",
"companyId": "cfffb7b0-608d-49e3-8aa2-...",
"customerName": "partner",
"supplierName": "Demo Slovakia s.r.o.",
"supplierId": "5342382",
"supplierVat": "SK2029999999",
"status": "SAVED_AS_UBL",
"invoiceNumber": "2701-1509",
"taxExclusiveAmount": 1600.0,
"taxInclusiveAmount": 1760.0,
"lineExtensionAmount": 1600.0,
"payableAmount": 1760.0,
"currency": "EUR",
"issueDate": "2026-03-14",
"dueDate": "2026-05-02",
"supplierCountryCode": "SK",
"supplierEndpoint": "iso6523-actorid-upis::9930:de610083641",
"customerId": "5625652",
"customerVat": "DE5665661",
"customerEndpoint": "iso6523-actorid-upis::9930:DE456982314",
"customerCountryCode": "DE",
"typeCode": "380",
"documentType": "OUTGOING",
"type": "PEPPOL_BIS",
"source": "PORTAL",
"sendViaPeppol": true,
"paymentDetails": {
"paymentStatus": "LATE",
"paidAmount": 0.0,
"totalAmount": 1760.0,
"remainingAmount": 1760.0,
"paymentDate": null
},
"profileType": "EN16931",
"isActive": true,
"isRead": false
}
]
}

Successful Response Field Descriptions​

Top-Level Fields​

FieldTypeDescription
totalCountLongTotal number of documents matching the filters
netTotalDoubleTax-exclusive total amount (excludes CREDIT_BLOCKED)
totalDoubleTax-inclusive total amount (excludes CREDIT_BLOCKED)
invoiceListArray<Invoice>List of invoice objects

Invoice Object Fields​

FieldTypeDescription
idString (UUID)Unique identifier of the invoice
companyIdString (UUID)Company ID the invoice belongs to
userIdString (UUID)User ID who created the invoice
customerNameStringCustomer (buyer) name
supplierNameStringSupplier (seller) name
supplierIdStringSupplier ID
supplierVatStringSupplier VAT number
statusString (Enum)Current invoice status
invoiceNumberStringInvoice number
taxExclusiveAmountDoubleTax-exclusive amount
taxInclusiveAmountDoubleTax-inclusive amount
lineExtensionAmountDoubleLine items total amount
payableAmountDoubleAmount payable
allowanceTotalAmountDoubleTotal allowance/discount amount
currencyStringCurrency code (ISO 4217: EUR, USD, TRY, etc.)
createdTimeString (DateTime)Creation timestamp (UTC)
localCreatedTimeString (DateTime)Creation timestamp (local time)
issueDateString (Date)Invoice issue date
deliveryDateString (Date)Delivery date
dueDateString (Date)Due date
supplierCountryCodeStringSupplier country code (ISO 3166-1 alpha-2)
supplierEndpointStringSupplier Peppol endpoint
customerIdStringCustomer ID
customerVatStringCustomer VAT number
customerEndpointStringCustomer Peppol endpoint
customerCountryCodeStringCustomer country code
typeCodeStringInvoice type code (e.g., 380=Invoice, 381=Credit Note)
documentTypeString (Enum)Document direction: INCOMING or OUTGOING
errorMessageStringError message (if any)
lastUpdatedTimeString (DateTime)Last update timestamp (UTC)
localLastUpdatedTimeString (DateTime)Last update timestamp (local time)
typeString (Enum)Document format type (DataType)
sourceString (Enum)Invoice source (PORTAL, ERP, PEPPOL, EMAIL, etc.)
sendViaPeppolBooleanWhether sent via Peppol
statusTimeString (DateTime)Status change timestamp (UTC)
localStatusTimeString (DateTime)Status change timestamp (local time)
fileNameStringFile name
ocrParserString (Enum)OCR parser type
paymentDetailsObjectPayment details (null for certain statuses)
profileTypeString (Enum)ZUGFeRD profile type: BASIC, EN16931, EXTENDED
isActiveBooleanWhether the invoice is active
countrySpecificDataObjectCountry-specific additional data

Note: Invoices with CREDIT_BLOCKED status are masked — only id, companyId, documentType, type,invoiceNumber ,supplierName,supplierVat , status and isActive fields are returned; all other fields are null.

400 - Bad Request​

Returned when an invalid parameter value is provided (e.g., incorrect enum value, malformed UUID format).

{
"errorMessage": "Invalid value 'INVALID_STATUS' for parameter 'status'",
"errorType": "ILLEGAL_ARGUMENT",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-abc123-def456",
"status": 400,
"timestamp": "2026-01-15T10:30:00",
"path": "/invoice/search-documents"
}

Error Response Fields​

FieldTypeDescription
errorMessageStringHuman-readable error description
errorTypeStringError type code
errorTitleStringHTTP status name
errorIdStringCorrelation ID (for log tracing)
statusIntegerHTTP status code
timestampString (DateTime)Error occurrence time
pathStringRequest path

401 - Unauthorized​

Returned when an invalid, expired, or missing JWT token is provided.

{
"errorMessage": "Not authorized for this action",
"errorType": "NOT_AUTHORITY",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-abc123-def456",
"status": 401,
"timestamp": "2026-01-15T10:30:00",
"path": "/invoice/search-documents"
}

Unauthorized Error Response Fields​

FieldTypeDescription
errorMessageStringAuthorization error description
errorTypeStringFixed value: NOT_AUTHORITY
errorTitleStringHTTP status name: UNAUTHORIZED
errorIdStringCorrelation ID
statusInteger401
timestampString (DateTime)Error occurrence time
pathStringRequest path

500 - Internal Server Error​

Returned in case of database connection errors, unexpected runtime exceptions, or other server-side failures.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-abc123-def456",
"status": 500,
"timestamp": "2026-01-15T10:30:00",
"path": "/invoice/search-documents"
}

Server Error Response Fields​

FieldTypeDescription
errorMessageStringGeneral error message
errorTypeStringRUNTIME_ERROR, IO_ERROR, or SERVER_ERROR
errorTitleStringHTTP status name: INTERNAL_SERVER_ERROR
errorIdStringCorrelation ID (for log tracing)
statusInteger500
timestampString (DateTime)Error occurrence time
pathStringRequest path

11. Get Invoice Details GET​

Purpose of Use:
The GET /invoice/get-invoice/{invoiceId} endpoint allows retrieving the full structured details of a single invoice, including header data, party details, tax breakdown, and all invoice line items, in one consistent JSON structure regardless of the invoice's underlying document format, such as UBL, CII, Factur-X, etc.

Endpoint Information​

PropertyValue
URL/invoice/get-invoice/{invoiceId}
MethodGET
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header, JWT token

Example Request​

curl -X GET 'https://api-stage.docnova.ai/invoice/get-invoice/{invoiceId}' \
--header 'R-Auth: {your JWT}'

Request Parameters​

Field NameTypeRequiredDescription
invoiceIdString (UUID)YesUnique identifier of the invoice. Must be in UUID v4 format. Obtained from the id field in the search-documents response.
R-AuthString (JWT)YesAuthentication token. JWT signed with HS512 algorithm.

Responses​


200 - Successful Response​

Returns an object with two top-level fields: invoice, the full invoice data, and paymentDetails, the payment status summary.

​{
"invoice": {
"Type": "PEPPOL_BIS",
"StandardBusinessDocumentHeader": null,
"LeitwegId": null,
"IsPeppolParticipant": false,
"CompanyId": null,
"DraftUuid": null,
"OcrUuid": null,
"InvoiceUuid": null,
"PartnerUuid": null,
"ExternalInvoiceId": null,
"Format": null,
"ProfileType": "EN16931",
"BusinessModelType": null,
"UBLExtensions": null,
"UBLVersionID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "2.1"
},
"CustomizationID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0"
},
"ProfileID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
},
"ProfileExecutionID": null,
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "2701-15893"
},
"CopyIndicator": null,
"UUID": null,
"IssueDate": {
"Value": "2026-08-14"
},
"IssueTime": null,
"DueDate": {
"Value": "2026-08-20"
},
"InvoiceTypeCode": {
"listID": null,
"listAgencyID": null,
"listAgencyName": null,
"listName": null,
"listVersionID": null,
"name": null,
"Value": "380"
},
"Note": [
{
"languageID": null,
"Value": "Thank you for your order."
}
],
"TaxPointDate": {
"Value": "2026-08-14"
},
"DocumentCurrencyCode": {
"listID": null,
"listAgencyID": null,
"listAgencyName": null,
"listName": null,
"listVersionID": null,
"name": null,
"Value": "EUR"
},
"TaxCurrencyCode": null,
"PricingCurrencyCode": null,
"PaymentCurrencyCode": null,
"PaymentAlternativeCurrencyCode": null,
"AccountingCostCode": null,
"AccountingCost": {
"languageID": null,
"Value": "68"
},
"LineCountNumeric": null,
"BuyerReference": {
"languageID": null,
"Value": "buyer reference"
},
"InvoicePeriod": null,
"DiscrepancyResponse": null,
"OrderReference": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "purchase order"
},
"SalesOrderID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "sales order reference"
},
"CopyIndicator": null,
"UUID": null,
"IssueDate": null,
"IssueTime": null,
"CustomerReference": null,
"DocumentReference": null
},
"BillingReference": null,
"DespatchDocumentReference": null,
"ReceiptDocumentReference": null,
"StatementDocumentReference": null,
"OriginatorDocumentReference": null,
"ContractDocumentReference": null,
"AdditionalDocumentReference": [
{
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "docnova-document.pdf"
},
"CopyIndicator": null,
"UUID": null,
"IssueDate": null,
"DocumentTypeCode": null,
"DocumentType": null,
"XPath": null,
"DocumentStatusCode": null,
"DocumentDescription": null,
"Attachment": {
"EmbeddedDocumentBinaryObject": {
"mimeCode": "application/pdf",
"encodingCode": null,
"characterSetCode": null,
"filename": "docnova-document.pdf",
"Value": "JVBERi0xLjcKJeLjz9MKOCAwIG9iago8PC9..."
},
"ExternalReference": null
},
"ResultOfVerification": null
}
],
"ProjectReference": null,
"Signature": null,
"AccountingSupplierParty": {
"CustomerAssignedAccountID": null,
"AdditionalAccountID": null,
"Party": {
"WebsiteURI": null,
"LogoReferenceID": null,
"EndpointID": {
"schemeID": "0245",
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "2029999999"
},
"IndustryClassificationCode": null,
"PartyIdentification": [
{
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "5342382"
}
}
],
"PartyName": [
{
"Name": {
"languageID": null,
"Value": "Demo Slovakia s.r.o."
}
}
],
"Language": null,
"PostalAddress": {
"ID": null,
"AddressTypeCode": null,
"AddressFormatCode": null,
"Postbox": null,
"Floor": null,
"Room": null,
"StreetName": {
"languageID": null,
"Value": "Testovacia 123, Bratislava, Slovakia"
},
"AdditionalStreetName": null,
"BuildingName": null,
"BuildingNumber": null,
"InhouseMail": null,
"Department": null,
"MarkAttention": null,
"MarkCare": null,
"PlotIdentification": null,
"CitySubdivisionName": null,
"CityName": {
"languageID": null,
"Value": "Bratislava"
},
"PostalZone": {
"languageID": null,
"Value": "10115"
},
"CountrySubentity": null,
"CountrySubentityCode": null,
"Region": null,
"District": null,
"AddressLine": [
{
"Line": {
"languageID": null,
"Value": "Testovacia 123, Bratislava, Slovakia"
}
}
],
"Country": {
"Name": null,
"IdentificationCode": {
"listID": null,
"listAgencyID": null,
"listAgencyName": null,
"listName": null,
"listVersionID": null,
"Value": "SK"
}
}
},
"PhysicalLocation": null,
"PartyTaxScheme": [
{
"RegistrationName": null,
"CompanyID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "SK2029999999"
},
"ExemptionReasonCode": null,
"ExemptionReason": null,
"RegistrationAddress": null,
"TaxScheme": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "VAT"
},
"Name": null,
"TaxTypeCode": null,
"CurrencyCode": null,
"JurisdictionRegionAddress": null
}
}
],
"PartyLegalEntity": [
{
"RegistrationName": {
"languageID": null,
"Value": "Demo Slovakia s.r.o."
},
"CompanyID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "SK2029999999"
},
"CompanyLegalForm": null,
"RegistrationAddress": null
}
],
"Contact": {
"ID": null,
"Name": {
"languageID": null,
"Value": "Demo Slovakia s.r.o."
},
"Telephone": {
"languageID": null,
"Value": "+49301234567"
},
"Telefax": null,
"ElectronicMail": {
"languageID": null,
"Value": "demo@yopmail.com"
},
"Note": null,
"OtherCommunication": null
},
"Person": null
},
"DespatchContact": null,
"AccountingContact": null,
"SellerContact": null
},
"AccountingCustomerParty": {
"CustomerAssignedAccountID": null,
"SupplierAssignedAccountID": null,
"AdditionalAccountID": null,
"Party": {
"WebsiteURI": null,
"LogoReferenceID": null,
"EndpointID": {
"schemeID": "9930",
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "DE610083641"
},
"IndustryClassificationCode": null,
"PartyIdentification": [
{
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "DE123658956"
}
}
],
"PartyName": [
{
"Name": {
"languageID": null,
"Value": "ABC Innovations GmBH"
}
}
],
"Language": null,
"PostalAddress": {
"ID": null,
"AddressTypeCode": null,
"AddressFormatCode": null,
"Postbox": null,
"Floor": null,
"Room": null,
"StreetName": {
"languageID": null,
"Value": "address"
},
"AdditionalStreetName": null,
"BuildingName": null,
"BuildingNumber": null,
"InhouseMail": null,
"Department": null,
"MarkAttention": null,
"MarkCare": null,
"PlotIdentification": null,
"CitySubdivisionName": null,
"CityName": {
"languageID": null,
"Value": "Berlin"
},
"PostalZone": {
"languageID": null,
"Value": "1093"
},
"CountrySubentity": null,
"CountrySubentityCode": null,
"Region": null,
"District": null,
"AddressLine": [
{
"Line": {
"languageID": null,
"Value": "address"
}
}
],
"Country": {
"Name": null,
"IdentificationCode": {
"listID": null,
"listAgencyID": null,
"listAgencyName": null,
"listName": null,
"listVersionID": null,
"Value": "DE"
}
}
},
"PhysicalLocation": null,
"PartyTaxScheme": [
{
"RegistrationName": null,
"CompanyID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "DE123658956"
},
"ExemptionReasonCode": null,
"ExemptionReason": null,
"RegistrationAddress": null,
"TaxScheme": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "VAT"
},
"Name": null,
"TaxTypeCode": null,
"CurrencyCode": null,
"JurisdictionRegionAddress": null
}
}
],
"PartyLegalEntity": [
{
"RegistrationName": {
"languageID": null,
"Value": "DataCore Innovations AG-ebru"
},
"CompanyID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "DE123658956"
},
"CompanyLegalForm": null,
"RegistrationAddress": null
}
],
"Contact": {
"ID": null,
"Name": {
"languageID": null,
"Value": "partner name"
},
"Telephone": {
"languageID": null,
"Value": "5544332"
},
"Telefax": null,
"ElectronicMail": {
"languageID": null,
"Value": "partner@yopmail.com"
},
"Note": null,
"OtherCommunication": null
},
"Person": null
},
"DeliveryContact": null,
"AccountingContact": null,
"BuyerContact": null
},
"PayeeParty": null,
"BuyerCustomerParty": null,
"SellerSupplierParty": null,
"TaxRepresentativeParty": null,
"Delivery": [
{
"ID": null,
"Quantity": null,
"MinimumQuantity": null,
"MaximumQuantity": null,
"ActualDeliveryDate": {
"Value": "2026-01-30"
},
"LatestDeliveryDate": null,
"LatestDeliveryTime": null,
"TrackingID": null,
"DeliveryLocation": {
"ID": null,
"Description": null,
"Conditions": null,
"CountrySubentity": null,
"CountrySubentityCode": null,
"ValidityPeriod": null,
"Address": {
"ID": null,
"AddressTypeCode": null,
"AddressFormatCode": null,
"Postbox": null,
"Floor": null,
"Room": null,
"StreetName": {
"languageID": null,
"Value": "address"
},
"AdditionalStreetName": null,
"BuildingName": null,
"BuildingNumber": null,
"InhouseMail": null,
"Department": null,
"MarkAttention": null,
"MarkCare": null,
"PlotIdentification": null,
"CitySubdivisionName": null,
"CityName": {
"languageID": null,
"Value": "berlin"
},
"PostalZone": {
"languageID": null,
"Value": "10309"
},
"CountrySubentity": null,
"CountrySubentityCode": null,
"Region": null,
"District": null,
"AddressLine": [
{
"Line": {
"languageID": null,
"Value": "address"
}
}
],
"Country": {
"Name": null,
"IdentificationCode": {
"listID": null,
"listAgencyID": null,
"listAgencyName": null,
"listName": null,
"listVersionID": null,
"Value": "DE"
}
}
}
},
"RequestedDeliveryPeriod": null,
"PromisedDeliveryPeriod": null,
"EstimatedDeliveryPeriod": null,
"DeliveryParty": {
"WebsiteURI": null,
"LogoReferenceID": null,
"EndpointID": null,
"IndustryClassificationCode": null,
"PartyIdentification": null,
"PartyName": [
{
"Name": {
"languageID": null,
"Value": "Delivery Recipient Name"
}
}
],
"Language": null,
"PostalAddress": null,
"PhysicalLocation": null,
"PartyTaxScheme": null,
"PartyLegalEntity": null,
"Contact": null,
"Person": null
},
"Despatch": null,
"DeliveryTerms": null,
"Shipment": null
}
],
"DeliveryTerms": null,
"PaymentMeans": [
{
"ID": null,
"PaymentMeansCode": {
"listID": null,
"listAgencyID": null,
"listAgencyName": null,
"listName": null,
"listVersionID": null,
"name": null,
"Value": "30"
},
"PaymentDueDate": null,
"PaymentChannelCode": null,
"InstructionID": null,
"InstructionNote": null,
"PaymentID": null,
"CardAccount": null,
"PayerFinancialAccount": null,
"PayeeFinancialAccount": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "SK8975000000000012345671"
},
"Name": {
"languageID": null,
"Value": "Account holder name"
},
"AccountTypeCode": null,
"CurrencyCode": null,
"PaymentNote": null,
"FinancialInstitutionBranch": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "BICnumber"
},
"Name": null,
"FinancialInstitution": null,
"Address": null
}
},
"CreditAccount": null,
"PaymentMandate": null
}
],
"PaymentTerms": null,
"PrepaidPayment": null,
"AllowanceCharge": null,
"TaxExchangeRate": null,
"PricingExchangeRate": null,
"PaymentExchangeRate": null,
"PaymentAlternativeExchangeRate": null,
"TaxTotal": [
{
"TaxAmount": {
"currencyID": "EUR",
"Value": 12.92
},
"RoundingAmount": null,
"TaxEvidenceIndicator": null,
"TaxIncludedIndicator": null,
"TaxSubtotal": [
{
"TaxableAmount": {
"currencyID": "EUR",
"Value": 68.00
},
"TaxAmount": {
"currencyID": "EUR",
"Value": 12.92
},
"CalculationSequenceNumeric": null,
"TransactionCurrencyTaxAmount": null,
"Percent": null,
"BaseUnitMeasure": null,
"PerUnitAmount": null,
"TaxCategory": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "S"
},
"Name": null,
"Percent": {
"format": null,
"Value": 19
},
"BaseUnitMeasure": null,
"PerUnitAmount": null,
"TaxExemptionReasonCode": null,
"TaxExemptionReason": null,
"TaxScheme": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "VAT"
},
"Name": null,
"TaxTypeCode": null,
"CurrencyCode": null,
"JurisdictionRegionAddress": null
}
}
}
]
}
],
"LegalMonetaryTotal": {
"LineExtensionAmount": {
"currencyID": "EUR",
"Value": 68
},
"TaxExclusiveAmount": {
"currencyID": "EUR",
"Value": 68
},
"TaxInclusiveAmount": {
"currencyID": "EUR",
"Value": 80.92
},
"AllowanceTotalAmount": null,
"ChargeTotalAmount": null,
"PrepaidAmount": null,
"PayableRoundingAmount": null,
"PayableAmount": {
"currencyID": "EUR",
"Value": 80.92
}
},
"InvoiceLine": [
{
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "1"
},
"UUID": null,
"Note": null,
"InvoicedQuantity": {
"unitCode": "XBA",
"Value": 2
},
"LineExtensionAmount": {
"currencyID": "EUR",
"Value": 68
},
"TaxPointDate": null,
"AccountingCostCode": null,
"AccountingCost": null,
"FreeOfChargeIndicator": null,
"InvoicePeriod": null,
"OrderLineReference": null,
"DespatchLineReference": null,
"ReceiptLineReference": null,
"BillingReference": null,
"PricingReference": null,
"DocumentReference": [
{
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "1"
},
"CopyIndicator": null,
"UUID": null,
"IssueDate": null,
"DocumentTypeCode": {
"listID": null,
"listAgencyID": null,
"listAgencyName": null,
"listName": null,
"listVersionID": null,
"name": null,
"Value": "130"
},
"DocumentType": null,
"XPath": null,
"DocumentStatusCode": null,
"DocumentDescription": null,
"Attachment": null,
"ResultOfVerification": null
}
],
"OriginatorParty": null,
"Delivery": null,
"AllowanceCharge": null,
"TaxTotal": null,
"Item": {
"Description": null,
"PackQuantity": null,
"PackSizeNumeric": null,
"CatalogueIndicator": null,
"Name": {
"languageID": null,
"Value": "product"
},
"HazardousRiskIndicator": null,
"AdditionalInformation": null,
"Keyword": null,
"BrandName": null,
"ModelName": null,
"BuyersItemIdentification": null,
"SellersItemIdentification": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "1"
}
},
"ManufacturersItemIdentification": null,
"StandardItemIdentification": null,
"CatalogueItemIdentification": null,
"AdditionalItemIdentification": null,
"CatalogueDocumentReference": null,
"ItemSpecificationDocumentReference": null,
"OriginCountry": null,
"CommodityClassification": null,
"TransactionConditions": null,
"HazardousItem": null,
"ClassifiedTaxCategory": [
{
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "S"
},
"Name": null,
"Percent": {
"format": null,
"Value": 19
},
"BaseUnitMeasure": null,
"PerUnitAmount": null,
"TaxExemptionReasonCode": null,
"TaxExemptionReason": null,
"TaxScheme": {
"ID": {
"schemeID": null,
"schemeName": null,
"schemeAgencyID": null,
"schemeAgencyName": null,
"schemeVersionID": null,
"Value": "VAT"
},
"Name": null,
"TaxTypeCode": null,
"CurrencyCode": null,
"JurisdictionRegionAddress": null
}
}
],
"AdditionalItemProperty": null,
"ManufacturerParty": null,
"InformationContentProviderParty": null,
"OriginAddress": null,
"ItemInstance": null
},
"Price": {
"PriceAmount": {
"currencyID": "EUR",
"Value": 34
},
"BaseQuantity": null,
"PriceChangeReason": null,
"PriceTypeCode": null,
"PriceType": null,
"OrderableUnitFactorRate": null,
"ValidityPeriod": null,
"PriceList": null,
"AllowanceCharge": null
},
"ItemPriceExtension": null,
"CatalogItemId": null
}
]
},
"paymentDetails": {
"paymentStatus": "SENT",
"paidAmount": 0.0,
"totalAmount": 80.92,
"remainingAmount": 80.92,
"paymentDate": null
}
}

Response Fields​

FieldTypeDescription
invoiceobjectFull structured invoice data.
invoice.TypestringUnderlying invoice document type. PEPPOL_BIS for Slovak documents.
invoice.ProfileTypestringInvoice profile type, e.g. EN16931.
invoice.ID.ValuestringBusiness invoice number.
invoice.IssueDate.ValuedateInvoice issue date.
invoice.DueDate.ValuedateInvoice due date.
invoice.InvoiceTypeCode.ValuestringInvoice type code, e.g. 380.
invoice.DocumentCurrencyCode.ValuestringInvoice currency, e.g. EUR.
invoice.AccountingSupplierPartyobjectSupplier party details.
invoice.AccountingCustomerPartyobjectCustomer party details.
invoice.TaxTotalarrayTax total and tax breakdown information.
invoice.LegalMonetaryTotalobjectInvoice monetary totals.
invoice.InvoiceLinearrayInvoice line items.
paymentDetailsobjectPayment status summary.
paymentDetails.paymentStatusstringCurrent payment status.
paymentDetails.paidAmountnumberAmount already paid.
paymentDetails.totalAmountnumberTotal invoice amount.
paymentDetails.remainingAmountnumberRemaining unpaid amount.
paymentDetails.paymentDatedatetimePayment date, if available.

401 - Unauthorized​

{
"errorMessage": "User is not authorized for this operation",
"errorType": "NOT_AUTHORITY",
"status": 401,
"timestamp": "2026-07-29T12:00:00",
"path": "/invoice/get-invoice/{invoiceId}"
}

404 - Not Found​

Returned when no invoice exists with the given invoiceId.

{
"errorMessage": "{invoiceId} Invoice not found!",
"errorType": "NOT_FOUND_INVOICE",
"status": 404,
"timestamp": "2026-07-29T12:00:00",
"path": "/invoice/get-invoice/{invoiceId}"
}

500 - Internal Server Error​

Returned when invoiceId is not a valid UUID.

{
"errorMessage": "Invalid UUID string: {invoiceId}",
"errorType": "RUNTIME_ERROR",
"status": 500,
"timestamp": "2026-07-29T12:00:00",
"path": "/invoice/get-invoice/{invoiceId}"
}

12. Generate PDF POST​

Purpose of Use: This endpoint accepts a base64-encoded UBL/XML invoice and converts it to PDF format, returning the raw PDF byte array. Supported format types include PEPPOL BIS, XRECHNUNG, UAE PINT, ZUGFeRD, KSEF, and other country-specific e-invoice standards. The optional country code and VAT number fields are used in SAP-ERP integrations for country-specific or company-specific XSLT template selection.

Endpoint Information​

PropertyValue
URL/invoice/generate/pdf
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthenticationR-Auth header (JWT Bearer Token)

Example Request​

curl --location 'https://api-stage.docnova.ai/invoice/generate/pdf' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'R-Auth: eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJNTU0iLCJzdWIiOiJwNjR9.IpGPX...' \
--data '{
"base64XML": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KC...",
"country": "SK",
"type": "PEPPOL_BIS",
"vatNumber": "SK2029999999"
}

Request Parameters​

Field NameTypeRequiredDescription
base64XMLStringYesBase64-encoded invoice XML data. Must be a valid Peppol BIS 3.0 UBL 2.1 XML for Slovak documents.
typeEnum (DataType)YesInvoice format type. Specifies the standard of the provided XML. Valid values are listed in the table below.
countryEnum (Country)NoCountry code of the invoice (ISO 3166-1 alpha-2). When used together with vatNumber, company matching is performed to add logo and language settings to the PDF.
vatNumberStringNoVAT number of the invoicing company. When used together with country, it matches against the company record in the system.

Valid Values for type Parameter​

ValueDescriptionXSLT Group
PEPPOL_BISPEPPOL BIS 3.0 standard (the format used for Slovakia)XRECHNUNG
PDFUnstructured invoice (paper invoices, images, etc.)ZUGFERD

country Parameter​

Country CodeCountryPDF Language
SKSlovakiaSlovak (SK)
All others—English (EN)

Responses​

200 - Successful Response​

PropertyValue
HTTP Status200
Content-Typeapplication/octet-stream
BodyBinary PDF data (byte array)
%PDF-1.7
%����
1 0 obj
<<
/Pages 2 0 R
/Type /Catalog
/Names 21 0 R
/Metadata 27 0 R
>>
endobj
5 0 obj
<<

400 - Bad Request​

Trigger Condition: When the XML data is invalid, Base64 cannot be decoded, XSLT transformation fails, or any error occurs during iText PDF generation.

{
"errorMessage": "PDF convert error: [detail message]",
"errorType": "PDF_CONVERT_ERROR",
"errorTitle": "BAD_REQUEST",
"errorId": "a1b2c3d4-e5f6-7890-abcd-...",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/generate/pdf"
}

Possible Detail Messages:

  • PDF convert error: PDF conversion failed due to an unexpected error — XSLT template not found or unexpected error during HTML-to-PDF conversion
  • PDF convert error: Illegal base64 character — The base64XML field is not in valid Base64 format
  • PDF convert error: [XSLT transformation error]` — XML structure does not match the expected format

400 - Bad Request — Invalid Parameter​

Trigger Condition: When an invalid enum value is sent for the type field or required fields are missing.

{
"errorMessage": "Invalid argument! Argument: type",
"errorType": "INVALID_ARGUMENT",
"errorTitle": "BAD_REQUEST",
"errorId": "a1b2c3d4-e5f6-7890-abcd-...",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/generate/pdf"
}

400 - Bad Request — Invalid PDF Type​

Trigger Condition: When the submitted type value is an unsupported format for PDF conversion.

{
"errorMessage": "Invalid PDF type",
"errorType": "INVALID_PDF_TYPE",
"errorTitle": "BAD_REQUEST",
"errorId": "a1b2c3d4-e5f6-7890-abcd-...",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/generate/pdf"
}

400 - Bad Request — Empty XML Data​

Trigger Condition: When the base64XML field is sent as null or empty.

{
"errorMessage": "Data XML cannot be NULL!",
"errorType": "NULL_DATA_XML",
"errorTitle": "BAD_REQUEST",
"errorId": "a1b2c3d4-e5f6-7890-abcd-...",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/generate/pdf"
}

401 - Unauthorized​

Trigger Condition: When the R-Auth header is missing, the JWT token has expired, or an invalid token is provided.

{
"errorMessage": "Not authorized for this action",
"errorType": "NOT_AUTHORITY",
"errorTitle": "UNAUTHORIZED",
"errorId": "a1b2c3d4-e5f6-7890-abcd-...",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/generate/pdf"
}

500 - Internal Server Error​

Trigger Condition: When an unexpected server error occurs (XSLT file cannot be loaded, insufficient memory, etc.).

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "a1b2c3d4-e5f6-7890-abcd-...",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/generate/pdf"
}

Error Codes and Response Details​

The following errors are specific to this endpoint. All error responses follow the ExceptionResponse format:

Error Response Structure​

Field NameTypeDescription
errorMessageStringDetailed description of the error
errorTypeStringError type identifier
errorTitleStringHTTP status name (BAD_REQUEST, INTERNAL_SERVER_ERROR, etc.)
errorIdStringCorrelation ID (for log tracing)
statusIntegerHTTP status code (400, 500, etc.)
timestampString (ISO 8601)Time when the error occurred
pathStringRequested URL path

13. Peppol - Invoice MLS List GET​

Purpose of Use: This endpoint retrieves the list of Message Level Status (MLS) records associated with a specific invoice. MLS represents transaction-level responses received against invoices sent over the Peppol network.

Each MLS record contains the response type (acceptance, acknowledgement, rejection), the received timestamp, direction (incoming/outgoing), MLS type, and any error lines if present. Access requires the authenticated user to belong to the specified company.

Endpoint Information​

PropertyValue
URL/peppol/invoice-mls-list
MethodGET
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/peppol/invoice-mls-list?companyId={{company_uuid}}&invoiceId={{invoice_uuid}}' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesThe unique identifier of the company used for authorization. The authenticated user must belong to this company
invoiceIdUUIDYesThe unique identifier of the invoice whose MLS records are to be retrieved

Responses​

200 - Successful Response​

Returns the list of MLS records for the specified invoice. The list may be empty if no MLS records exist for the invoice.

[
{
"responseType": "ACCEPTANCE",
"receivedTime": "2026-02-10T10:30:00",
"direction": "INCOMING",
"mlsType": "INVOICE_RESPONSE",
"errorLines": []
},
{
"responseType": "REJECTION",
"receivedTime": "2026-02-09T08:45:00",
"direction": "OUTGOING",
"mlsType": "INVOICE_RESPONSE",
"errorLines": [
{
"errorField": "TaxAmount",
"responseCode": "REJECTION",
"description": "Tax amount does not match invoice total",
"statusReasonCode": "BUSINESS_RULE_FATAL"
}
]
}
]

Response Fields​

FieldTypeDescription
responseTypeEnumMLS response type: ACCEPTANCE, ACKNOWLEDGING, or REJECTION
receivedTimeDateTimeTimestamp when the MLS message was received or sent
directionEnumMessage direction: INCOMING or OUTGOING
mlsTypeEnumMLS type: INVOICE_RESPONSE, TDD_RESPONSE, or TDD_REPORT
errorLinesArray<Object>List of error lines. May be populated when responseType is REJECTION
errorLines[].errorFieldStringThe name of the field where the error occurred
errorLines[].responseCodeEnumMLS response code for this error line
errorLines[].descriptionStringFree-text description explaining the error detail
errorLines[].statusReasonCodeEnumBUSINESS_RULE_FATAL, BUSINESS_RULE_WARNING, DELIVERY_FAILURE, or SYNTAX_VIOLATION

401 - Unauthorized​

Trigger: The authenticated user does not belong to the specified company, or the R-Auth header is invalid or expired.

{
"errorMessage": "Authorization failed",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-1f0a2b3c",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/invoice-mls-list"
}

500 - Internal Server Error​

Trigger: An unexpected server error occurs.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-2a1b3c4d",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/invoice-mls-list"
}

14. Peppol - Get TDD Detail GET​

Purpose of Use: This endpoint retrieves the Tax Data Document (TDD) detail information associated with the specified company and invoice ID.

A TDD is a tax reporting record generated alongside a Peppol document to support additional government/tax authority reporting obligations. The response includes the document's status, type, scope, and financial summary. If no TDD has been submitted for the given invoice, the response body will be null.

Endpoint Information​

PropertyValue
URL/peppol/get-tdd
MethodGET
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/peppol/get-tdd?companyId={{company_uuid}}&invoiceId={{invoice_uuid}}' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company for which the TDD is being queried
invoiceIdUUIDYesUnique identifier of the invoice associated with the TDD

Responses​

200 - Successful Response​

Returns TDD detail information on success. The response body may be null if no TDD has been submitted for the given invoice.

{
"createdDate": "2026-02-10T10:00:00",
"updateDate": "2026-02-10T10:05:00",
"documentType": "SUBMIT",
"documentScope": "DOMESTIC",
"role": "SENDER",
"totalAmount": 320.00,
"taxExclusiveAmount": 1600.00,
"status": "TDD_SEND"
}

Response Fields​

FieldTypeDescription
createdDateDateTimeDate and time the TDD record was created
updateDateDateTimeDate and time the TDD record was last updated
documentTypeEnumTDD document type: SUBMIT, RESUBMIT, WITHDRAW, or FAILED
documentScopeEnumTDD document scope: DOMESTIC, INTERNATIONAL_PEPPOL, or INTERNATIONAL_NON_PEPPOL
roleEnumRole of the reporting party: SENDER or RECEIVER
totalAmountNumberTotal tax amount (tax inclusive minus tax exclusive)
taxExclusiveAmountNumberTotal invoice amount excluding tax
statusEnumCurrent TDD status: TDD_SEND, TDD_FAILED, or MLS_RECEIVED_FOR_TDD

Parameter Value Reference​

documentType Values​

ValueDescription
SUBMITInitial submission
RESUBMITRe-submission of an existing TDD
WITHDRAWWithdrawal of a previously submitted TDD
FAILEDFailed submission

documentScope Values​

ValueDescription
DOMESTICDomestic transaction — both supplier and customer are in Slovakia
INTERNATIONAL_PEPPOLCross-border transaction carried over the Peppol network
INTERNATIONAL_NON_PEPPOLCross-border transaction outside Peppol

role Values​

ValueDescription
SENDERThe party sending the invoice
RECEIVERThe party receiving the invoice

status Values​

ValueDescription
TDD_SENDTDD was successfully submitted
TDD_FAILEDTDD submission failed
MLS_RECEIVED_FOR_TDDA Message Level Status (MLS) response was received for this TDD

401 - Unauthorized​

Trigger: An invalid or expired R-Auth token is provided, or the authenticated user does not belong to the specified company.

{
"errorMessage": "Authorization failed!",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-7b6c8d9e",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/get-tdd"
}

500 - Internal Server Error​

Trigger: An unexpected server error occurs.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-8c7d9e0f",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/get-tdd"
}

15. Peppol - TDD MLS List GET​

Purpose of Use: This endpoint retrieves all MLS (Message Level Status) responses associated with a specific TDD (Tax Data Document) record.

Users can retrieve the MLS responses for a given company (companyId) and TDD record (tddId) to review the communication status and any potential error lines. Only users belonging to the specified company are authorized to access this endpoint.

Endpoint Information​

PropertyValue
URL/peppol/tdd-mls-list
MethodGET
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/peppol/tdd-mls-list?companyId={{company_uuid}}&tddId={{tdd_uuid}}' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesThe unique identifier of the company whose MLS list is being queried. The requesting user must be a member of this company
tddIdUUIDYesThe unique identifier of the TDD record for which MLS responses are to be listed

Responses​

200 - Successful Response​

Returns a list of MLS responses for the specified TDD record. Returns an empty array if no MLS responses exist for the TDD.

[
{
"responseType": "ACCEPTANCE",
"receivedTime": "2026-02-10T12:00:00",
"direction": "INCOMING",
"mlsType": "TDD_RESPONSE",
"errorLines": []
},
{
"responseType": "REJECTION",
"receivedTime": "2026-02-09T09:30:00",
"direction": "OUTGOING",
"mlsType": "TDD_REPORT",
"errorLines": [
{
"errorField": "InvoiceTypeCode",
"responseCode": "REJECTION",
"description": "Syntax error in InvoiceTypeCode field",
"statusReasonCode": "SYNTAX_VIOLATION"
}
]
}
]

Response Fields​

FieldTypeDescription
responseTypeEnumThe type of MLS response: ACCEPTANCE, ACKNOWLEDGING, or REJECTION
receivedTimeDateTimeThe date and time when the MLS response was received or sent
directionEnumThe direction of the MLS response: INCOMING or OUTGOING
mlsTypeEnumThe type of MLS message: INVOICE_RESPONSE, TDD_RESPONSE, or TDD_REPORT
errorLinesArray<Object>List of error detail lines. Returns an empty array when no errors are present

401 - Unauthorized​

Trigger: The user does not belong to the specified company or the R-Auth token is invalid.

{
"errorMessage": "Authorization failed",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-3b2c4d5e",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd-mls-list"
}

500 - Internal Server Error​

Trigger: An unexpected server error occurs.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-4c3d5e6f",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd-mls-list"
}

16. Peppol - Retry Failed TDD POST​

Purpose of Use: This endpoint is used to re-submit a Tax Data Document (TDD) record that is currently in TDD_FAILED or TDD_REJECTED status.

During the operation, the related invoice or invalid document is located and the TDD is reprocessed with the RESUBMIT type. Both regular invoices (invoiceId) and invalid Peppol documents (invalidInvoiceId) are supported; at least one of the parameters must be provided.

Endpoint Information​

PropertyValue
URL/peppol/tdd/retry-failed
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location --request POST 'https://api-stage.docnova.ai/peppol/tdd/retry-failed?companyId={{company_uuid}}&invoiceId={{invoice_uuid}}' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company performing the operation
invoiceIdUUIDConditional*Unique identifier of the invoice to be retried
invalidInvoiceIdUUIDConditional*Unique identifier of the invalid Peppol document to be retried

Note: (*) At least one of invoiceId or invalidInvoiceId must be provided. If both are omitted, a 400 Bad Request error is returned.

Responses​

200 - Successful Response​

The retry operation was successfully initiated. The server returns HTTP 200 OK with an empty response body.

400 - Bad Request​

Trigger: When both invoiceId and invalidInvoiceId are omitted, or when the TDD record's status is not TDD_FAILED or TDD_REJECTED.

{
"errorMessage": "Status not allowed for this operation",
"errorType": "STATUS_NOT_ALLOWED",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-5d4e6f7a",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/retry-failed"
}

401 - Unauthorized​

Trigger: The authenticated user is not a member of the specified company.

{
"errorMessage": "Authorization failed!",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-6e5f7a8b",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/retry-failed"
}

404 - Not Found​

Trigger: No TDD record is found matching the provided invoiceId or invalidInvoiceId.

{
"errorMessage": "Document not found",
"errorType": "DOCUMENT_NOT_FOUND",
"errorTitle": "NOT_FOUND",
"errorId": "corr-7f6a8b9c",
"status": 404,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/retry-failed"
}

500 - Internal Server Error​

Trigger: An unexpected server error occurs.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-8a7b9c0d",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/retry-failed"
}

17. Peppol - Withdraw TDD POST​

Purpose of Use: This endpoint initiates the withdrawal of a previously submitted Tax Data Document (TDD). The target TDD is identified via an invoice ID or an invalid document ID.

The document must not be in TDD_FAILED or WITHDRAW_SEND status. On success, the endpoint returns HTTP 200 with no response body.

Endpoint Information​

PropertyValue
URL/peppol/tdd/withdraw
MethodPOST
Content-TypeNot Required
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location --request POST 'https://api-stage.docnova.ai/peppol/tdd/withdraw?companyId={{company_uuid}}&invoiceId={{invoice_uuid}}' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company performing the operation
invoiceIdUUIDConditional*Unique identifier of the invoice linked to the TDD to be withdrawn
invalidInvoiceIdUUIDConditional*Unique identifier of the invalid document linked to the TDD to be withdrawn

Note: (*) At least one of invoiceId or invalidInvoiceId must be provided. If both are omitted, a 400 error is returned.

TDD Withdrawal Status Reference​

ValueDescription
TDD_SENDTDD submitted, eligible for withdrawal
TDD_APPROVEDTDD approved, eligible for withdrawal
TDD_ACKNOWLEDGEDTDD acknowledged, eligible for withdrawal
TDD_REJECTEDTDD rejected, eligible for withdrawal
WITHDRAW_FAILEDPrevious withdrawal failed, can be retried
TDD_FAILEDNOT eligible — withdrawal attempt returns 400
WITHDRAW_SENDNOT eligible — withdrawal attempt returns 400

Responses​

200 - Successful Response​

TDD withdrawal was successfully initiated. No response body is returned.

400 - Bad Request​

Trigger: Both invoiceId and invalidInvoiceId are omitted, or the TDD's current status does not allow withdrawal (TDD_FAILED or WITHDRAW_SEND).

{
"errorMessage": "Status not allowed for this operation",
"errorType": "STATUS_NOT_ALLOWED",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-9b8c0d1e",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/withdraw"
}

401 - Unauthorized​

Trigger: An invalid or expired JWT token is used, or the user does not belong to the specified company.

{
"errorMessage": "Access denied",
"errorType": "NOT_AUTHORITY",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-0c9d1e2f",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/withdraw"
}

404 - Not Found​

Trigger: No TDD entity is found matching the given invoiceId or invalidInvoiceId.

{
"errorMessage": "Document not found",
"errorType": "DOCUMENT_NOT_FOUND",
"errorTitle": "NOT_FOUND",
"errorId": "corr-1d0e2f3a",
"status": 404,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/withdraw"
}

422 - Unprocessable Entity​

Trigger: A file processing error occurs while withdrawing a TDD linked to an invalid document.

{
"errorMessage": "File processing error occurred",
"errorType": "FILE_PROCESSING_ERROR",
"errorTitle": "UNPROCESSABLE_ENTITY",
"errorId": "corr-2e1f3a4b",
"status": 422,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/withdraw"
}

500 - Internal Server Error​

Trigger: An unexpected server error occurs.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-3f2a4b5c",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/tdd/withdraw"
}

18. Peppol - Invalid Documents List GET​

Purpose of Use: This endpoint returns a paginated list of invalid Peppol documents belonging to a specific company. Invalid documents are incoming Peppol documents that could not be processed due to validation errors, format errors, or processing failures.

Results are returned in descending order by creation time (newest first). The companyId parameter is required, and authentication must be performed via a JWT token in the R-Auth header.

Endpoint Information​

PropertyValue
URL/peppol/invalid-documents
MethodGET
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/peppol/invalid-documents?companyId={{company_uuid}}&pageNumber=0&pageSize=20' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company whose invalid documents are being queried
pageNumberIntegerNoPage number (starts from 0). Default: 0
pageSizeIntegerNoNumber of records per page. Default: 20

Responses​

200 - Successful Response​

{
"content": [
{
"id": "d2c3b4a5-6e7f-8091-a2b3-...",
"companyId": "ba876f6b-e20d-48b4-9ce8-...",
"trackingId": "TRK-20260210-001",
"instanceIdentifier": "urn:uuid:d2c3b4a5-6e7f-8091-a2b3-...",
"invoiceNumber": "INV-2026-0042",
"typeCode": "380",
"currency": "EUR",
"issueDate": "2026-02-10",
"dueDate": "2026-03-10",
"deliveryDate": "2026-02-11",
"supplierEndpoint": "iso6523-actorid-upis::0245:1234567890",
"supplierName": "Partner Supplier s.r.o.",
"supplierCountryCode": "SK",
"supplierVAT": "SK1234567890",
"supplierId": "1234567890",
"customerEndpoint": "iso6523-actorid-upis::0245:2029999999",
"customerName": "Demo Slovakia s.r.o.",
"customerCountryCode": "SK",
"customerVAT": "SK2029999999",
"customerId": "2029999999",
"lineExtensionAmount": 1600.00,
"taxExclusiveAmount": 1600.00,
"taxInclusiveAmount": 1920.00,
"allowanceTotalAmount": 0.00,
"payableAmount": 1920.00,
"documentType": "INCOMING",
"dataType": "PEPPOL_BIS",
"errorType": "VALIDATION_ERROR",
"errorMessage": "Schema validation failed for document",
"validationErrors": "[{\"field\":\"TaxTotal\",\"message\":\"TaxTotal amount mismatch\"}]",
"receivedTime": "2026-02-10T10:30:00",
"createdTime": "2026-02-10T10:30:05",
"status": null,
"governmentStatus": null
}
],
"totalElements": 1,
"totalPages": 1,
"size": 20,
"number": 0,
"numberOfElements": 1,
"first": true,
"last": true,
"empty": false
}

Response Fields​

FieldTypeDescription
totalElementsLongTotal number of records
totalPagesIntegerTotal number of pages
sizeIntegerNumber of records per page
numberIntegerCurrent page number (starts from 0)
numberOfElementsIntegerNumber of records on this page
firstBooleanWhether this is the first page
lastBooleanWhether this is the last page
emptyBooleanWhether the page is empty
contentArray<Object>List of invalid Peppol documents
content[].idUUIDUnique identifier of the invalid document record
content[].trackingIdStringDocument tracking identifier
content[].invoiceNumberStringInvoice number
content[].typeCodeStringDocument type code (e.g. 380 = Invoice, 381 = Credit Note)
content[].currencyStringCurrency code (ISO 4217). EUR for Slovakia
content[].documentTypeEnumDocument direction: INCOMING or OUTGOING
content[].dataTypeEnumDocument data format. PEPPOL_BIS for Slovak Peppol documents
content[].supplierVAT / content[].customerVATStringVAT numbers (SK prefix for Slovak parties)
content[].errorTypeStringText describing the error type
content[].errorMessageStringHuman-readable error description
content[].validationErrorsStringJSON string array of validation errors (if any)
content[].receivedTimeDateTimeTime the document was received by the system
content[].createdTimeDateTimeTime the record was created
content[].governmentStatusEnumGovernment/tax authority processing status, where applicable (may be null)

401 - Unauthorized​

Trigger: The authenticated user does not belong to the specified company.

{
"errorMessage": "Authorization failed!",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-9d8e0f1a",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/invalid-documents"
}

500 - Internal Server Error​

Trigger: An unexpected server error occurs.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-0e9f1a2b",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/invalid-documents"
}

19. Delete Invoice (ERP) DELETE​

Purpose of Use: This endpoint allows an ERP system to permanently delete a single invoice/document that was created on the Docnova Slovakia portal but has not yet been sent to the counterparty or to the Peppol network. It is typically used to clean up a document that was generated by mistake (wrong data, duplicate submission, test record) before it leaves the ERP ↔ portal boundary.

Only documents whose current status indicates that no transmission has occurred yet (e.g. CREATED, SAVED_AS_UBL, SAVED_AS_PDF) are eligible for deletion. Once a document reaches a sent status such as SENT_TO_PEPPOL, SENT_VIA_EMAIL, or SUCCESS, it can no longer be deleted through this endpoint — this is a deliberate safeguard, since Slovak e-invoices (Peppol BIS Billing 3.0 / EN 16931) must not disappear from the audit trail once transmitted.

Endpoint Information​

PropertyValue
URL/invoice/erp/{documentId}
MethodDELETE
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location --request DELETE 'https://api-stage.docnova.ai/invoice/erp/{documentId}?companyId={{company_uuid}}' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Path Parameters​

FieldTypeRequiredDescription
documentIdUUIDYesUnique identifier of the invoice/document to delete. This is the documentId returned in the response of send-document-async, send-document-async-json, or shown as id in search-documents.

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company that owns the document. Used for the ownership/authorization check.

Responses​

200 - Successful Response​

{
"documentId": "c62739c4-ea6a-4aeb-86b0-...",
"status": "DELETED",
"message": "Document deleted successfully"
}

Response Fields​

FieldTypeDescription
documentIdUUIDIdentifier of the deleted document
statusString (Enum)Final status of the document after deletion. Always DELETED on success
messageStringHuman readable confirmation message

400 - Bad Request​

Trigger: The document has already left the not sent state (e.g. its status is SENT_TO_PEPPOL, SENT_VIA_EMAIL, or SUCCESS) and can no longer be deleted.

{
"errorMessage": "Document has already been sent and cannot be deleted",
"errorType": "DOCUMENT_ALREADY_SENT",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-2a1b3c4d",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/erp/{documentId}"
}

401 - Unauthorized​

Trigger: The R-Auth header is missing, the JWT token is invalid/expired, or the user does not belong to the company that owns the document.

{
"errorMessage": "User is not authorized for this operation",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-3b2c4d5e",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/erp/{documentId}"
}

404 - Not Found​

Trigger: No document matching the given documentId exists for the given companyId.

{
"errorMessage": "Document not found",
"errorType": "DOCUMENT_NOT_FOUND",
"errorTitle": "NOT_FOUND",
"errorId": "corr-4c3d5e6f",
"status": 404,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/erp/{documentId}"
}

500 - Internal Server Error​

Trigger: An unexpected error occurs on the server side.

{
"errorMessage": "An unexpected error occurred",
"errorType": "SERVER_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-5d4e6f7a",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/erp/{documentId}"
}

20. Delete Invoices (ERP, Bulk) POST​

Purpose of Use: This endpoint allows an ERP system to delete several invoices/documents in a single call, instead of calling DELETE /invoice/erp/{documentId} one by one. It is typically used after a batch import error, to clean up a set of test/duplicate documents created on the Docnova Slovakia portal before any of them has been transmitted.

Each documentId in the request is evaluated independently against the same "not sent" rule described in the single-delete endpoint above: a document already in a sent status (SENT_TO_PEPPOL, SENT_VIA_EMAIL, SUCCESS, etc.) is skipped rather than failing the whole request.

Endpoint Information​

PropertyValue
URL/invoice/erp/delete
MethodPOST
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/invoice/erp/delete' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}' \
--data-raw '{
"companyId": "{{company_uuid}}",
"documentIds": [
"c62739c4-ea6a-4aeb-86b0-...",
"d47a1f08-3b52-4c9e-9f21-..."
]
}'

Request Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company that owns the documents
documentIdsArray<UUID>YesList of document identifiers to delete. Must contain at least one element

Responses​

200 - Successful Response​

{
"deletedIds": [
"c62739c4-ea6a-4aeb-86b0-..."
],
"skippedIds": [
{
"documentId": "d47a1f08-3b52-4c9e-9f21-...",
"reason": "Document has already been sent and cannot be deleted"
}
],
"deletedCount": 1,
"skippedCount": 1
}

Response Fields​

FieldTypeDescription
deletedIdsArray<UUID>Identifiers of documents that were successfully deleted
skippedIdsArray<Object>Identifiers that were not deleted, with the reason why
skippedIds[].documentIdUUIDIdentifier of the skipped document
skippedIds[].reasonStringWhy the document was not deleted (already sent, not found, etc.)
deletedCountIntegerNumber of documents successfully deleted
skippedCountIntegerNumber of documents skipped

400 - Bad Request​

Trigger: documentIds is missing or sent as an empty array.

{
"errorMessage": "Document process required fields: documentIds",
"errorType": "DOCUMENT_PROCESS_REQUIRED_FIELDS",
"errorTitle": "BAD_REQUEST",
"errorId": "corr-6e5f7a8b",
"status": 400,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/erp/delete"
}

401 - Unauthorized​

Trigger: The R-Auth header is missing, invalid, expired, or the user does not belong to the specified companyId.

{
"errorMessage": "User is not authorized for this operation",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-7f6a8b9c",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/erp/delete"
}

404 - Not Found​

Trigger: The provided companyId does not exist.

{
"errorMessage": "Company not found!",
"errorType": "COMPANY_NOT_FOUND",
"errorTitle": "NOT_FOUND",
"errorId": "corr-8a7b9c0d",
"status": 404,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/erp/delete"
}

500 - Internal Server Error​

Trigger: An unexpected error occurs on the server side.

{
"errorMessage": "An unexpected error occurred",
"errorType": "SERVER_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-9b8c0d1e",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/invoice/erp/delete"
}

21. Peppol - Get Register Request Status GET​

Purpose of Use: This endpoint checks the current status of a Peppol registration request previously submitted for a company — for example, the registration completed through the test webhook onboarding flow described earlier in this guide (How to register your test company on Peppol?), or a registration submitted programmatically. ERP systems can poll this endpoint until the registration reaches a final state before starting to send Peppol documents.

Endpoint Information​

PropertyValue
URL/peppol/get-register-request-status
MethodGET
Content-Typeapplication/json
Base URL
Stage Environment URLhttps://api-stage.docnova.ai/
Production Environment URLhttps://api.docnova.ai/
AuthorizationR-Auth header (JWT token)

Example Request​

curl --location 'https://api-stage.docnova.ai/peppol/get-register-request-status?companyId={{company_uuid}}' \
--header 'Accept: */*' \
--header 'R-Auth: {{jwt_token}}'

Request Parameters​

Query Parameters​

FieldTypeRequiredDescription
companyIdUUIDYesUnique identifier of the company whose registration status is being queried
requestIdUUIDNoA specific registration request to check. When omitted, the most recent request for the company is returned

Responses​

200 - Successful Response​

{
"requestId": "f5e6d7c8-1234-5678-9abc-...",
"companyId": "ba876f6b-e20d-48b4-9ce8-...",
"participantId": "0245:2029999999",
"status": "APPROVED",
"updatedAt": "2026-02-10T09:15:00"
}

Response Fields​

FieldTypeDescription
requestIdUUIDRegistration request identifier
companyIdUUIDCompany that submitted the request
participantIdStringPeppol participant identifier being registered
statusEnumCurrent status. See status Values below
updatedAtDateTimeLast updated timestamp

status Values​

ValueDescription
APPROVEDRegistration completed; the participant identifier is live on the Peppol network
IN_PROCESSRegistration is pending manual review
REJECTEDRegistration was rejected (e.g. duplicate or invalid business identifier)

401 - Unauthorized​

Trigger: The R-Auth header is missing/expired, or the user does not belong to the specified company.

{
"errorMessage": "Authorization failed!",
"errorType": "AUTHORIZATION_FAILED",
"errorTitle": "UNAUTHORIZED",
"errorId": "corr-4e3f5a6b",
"status": 401,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/get-register-request-status"
}

404 - Not Found​

Trigger: No registration request is found for the given companyId (and requestId, if provided).

{
"errorMessage": "Register request not found",
"errorType": "REGISTER_REQUEST_NOT_FOUND",
"errorTitle": "NOT_FOUND",
"errorId": "corr-5f4a6b7c",
"status": 404,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/get-register-request-status"
}

500 - Internal Server Error​

Trigger: An unexpected error occurs on the server side.

{
"errorMessage": "An unexpected error occurred",
"errorType": "RUNTIME_ERROR",
"errorTitle": "INTERNAL_SERVER_ERROR",
"errorId": "corr-6a5b7c8d",
"status": 500,
"timestamp": "2026-02-11T14:30:00",
"path": "/peppol/get-register-request-status"
}