JSR Tax Advisors logoAPI
Developer APIsReference documentation

Peppol Transmission Status


After a document is created, Marmin transmits it over the Peppol network and tracks validation by the Oman Tax Authority (OTA). Transmission metadata is available on every document response and through dedicated status endpoints.

Overview

ConceptDescription
Peppol transmissionDelivery of the UBL document from sender to receiver via the Peppol Access Point network
uuidInternal Peppol network document identifier (distinct from id and seller_uuid)
meta_infoSummary object returned on create/retrieve responses
Get Peppol statusSingle current snapshot with C3 (billing) and C5 (tax reporting) legs
Retrieve Peppol status logChronological event log of transmission milestones

Message direction:

  • Sales documents (invoices, credit notes, debit notes) use sent messages.

  • Purchase documents (invoices, credit notes) use received messages.

Response meta_info object

Every document create and retrieve response may include a meta_info object:

FieldTypeRequiredDescriptionValidation
peppol_statusobject
Optional
Peppol participant/OTA processing status.Response-only; see Peppol status object below.
Peppol status object

The meta_info.peppol_status field is an object with the following attributes:

FieldTypeRequiredDescriptionValidation
participant_statusstring
Optional
Participant-level processing status.May be null in early or failed stages.
ota_statusstring
Optional
OTA submission/processing status.May be null in early or failed stages.
overall_statusstring
Optional
Overall Peppol processing status.Must be one of the status values listed below.
validation_resultsarray
Optional
Validation details/errors returned during processing.Response-only list; empty when there are no validation issues. Items use text, flag, reasonCode, location, and test.
Status values
ValueMeaning
VALIDATION_FAILEDThe received document failed validation checks.
PENDINGProcessing is in progress.
APPROVEDThe document is accepted.
REJECTEDThe document is processed but rejected.
Client processing guidance
  1. Treat overall_status as the primary state for workflow decisions.

  2. Use participant_status and ota_status as stage-specific diagnostics for UI and support logs.

  3. If overall_status is PENDING, keep the document in a processing state and re-fetch the document later.

  4. If overall_status is APPROVED, mark the Peppol flow as successful and continue normal downstream actions.

  5. If overall_status is REJECTED or VALIDATION_FAILED, stop submission-dependent actions and surface the failure to users.

  6. When validation_results is not empty, display user-friendly error summaries from text, and retain flag, reasonCode, location, and test for troubleshooting.

  7. participant_status or ota_status can be null in early or failed validation stages; do not treat null alone as success or failure.

Dedicated status endpoints

In addition to meta_info on the document object, each document type exposes:

EndpointReturns
GET /api/{document-type}/{id}/peppol-statusSingle current snapshot with C3 and C5 legs
GET /api/{document-type}/{id}/peppol-status-logsTime-ordered list of transmission events

{id} is the document's Marmin ID (same as retrieve). Both endpoints resolve the document's internal uuid under the hood.

When to use which
Use caseRecommended approach
Display status badge / drive ERP workflowRead meta_info.peppol_status.overall_status from create or retrieve
Poll until transmission completesRe-fetch the document and parse overall_status
Inspect C3/C5 transmission legsCall Get Peppol status for the current snapshot
Troubleshoot a failed transmissionCall Retrieve Peppol status log for the event timeline
Polling guidance
  • Prefer re-fetching the document (GET /api/{document-type}/{id}) and reading meta_info.peppol_status.overall_status.

  • Stop polling once overall_status reaches a terminal state (APPROVED, REJECTED, or VALIDATION_FAILED).

  • GET .../peppol-status returns {} when transmission has not started yet — this is not an error.

Get Peppol status response fields

Returns a single current snapshot (camelCase), unlike the chronological status log.

Root fields
FieldTypeDescription
documentTypestringDocument type (e.g. INVOICE).
documentUuidstringUUID of the document.
documentXMLstringBase64-encoded document XML.
idstringInternal identifier for this Peppol status record.
issuedBystringPeppol participant id of the sender (e.g. 0248:OM1100537271).
issuedTostringPeppol participant id of the receiver for the billing leg.
lastUpdatednumberUnix timestamp in milliseconds when this status was last updated.
uuidstringStatus record UUID (distinct from documentUuid).
validationResultsarrayValidation results; empty when there are no validation errors.
toC3objectBilling / PINT OM transmission leg (see below).
toC5objectTax reporting (OTA / tax data) transmission leg (see below).
`toC3` object (billing / PINT)
FieldTypeDescription
countrystring or nullCountry code for this leg (e.g. OM).
docTypeIdstringPeppol document type identifier (e.g. PINT billing URN).
documentXmlstringBase64-encoded document XML payload for this leg.
lastUpdatednumberLast update time for this leg (milliseconds).
mlsResponseobject or nullMLS response payload when applicable.
processIdstringPeppol process identifier (e.g. urn:peppol:bis:billing).
receiverIdstringReceiver participant id for this leg.
senderIdstringSender participant id for this leg.
statusstringLeg-specific status (e.g. SUBMITTED, MLS_C3_TRANSMISSION_ERROR; exact values depend on backend).
transmissionUuidstringUUID for this transmission attempt.
transmissionResponseobjectLow-level transmission result (see below).
`toC5` object (tax reporting)

Same shape as toC3 in general: country, docTypeId, documentXml, lastUpdated, mlsResponse, processId, receiverId, senderId, status, transmissionUuid, transmissionResponse. The docTypeId and processId values reflect the tax reporting profile (e.g. urn:peppol:taxreporting).

`transmissionResponse` object

Present under toC3 and toC5 when the API returns transmission metadata.

FieldTypeDescription
conversationIdstring or nullPeppol / phase conversation identifier when available.
messageIdstring or nullMessage identifier when available.
overallDurationToTransmitnumberDuration of the transmission in milliseconds.
transmissionErrorbooleanWhether a transmission error flag was set.
transmissionErrorsarray or nullDetailed errors when present.
transmissionResultstringHigh-level result (e.g. SUCCESS).
Peppol status log response fields

Returns a time-ordered list of events (snake_case). Each entry includes:

FieldTypeDescription
idstringUnique identifier for the log entry.
sent_message_idstring or nullPeppol message ID when sent.
document_uuidstringUUID of the document.
document_typestringDocument type (e.g. INVOICE).
sender_idstring or nullSender identifier.
receiver_idstring or nullReceiver identifier.
doc_type_idstring or nullDocument type identifier.
process_idstring or nullProcess identifier.
country_c1string or nullCountry code.
document_xmlstring or nullDocument XML when applicable.
messagestringHuman-readable status message.
timestampnumberUnix timestamp (milliseconds).
eventstringEvent type (e.g. DOCUMENT_CREATED, DOCUMENT_SUBMITTED, VALIDATION_SUCCESS).

Credit note documents use the same event log shape as invoices and debit notes.