{"openapi":"3.1.0","info":{"title":"phoss Peppol Access Point API","description":"HTTP API exposed by the phoss Peppol Access Point — inbound reporting, outbound submission, MLS, and Peppol Reporting.","contact":{"name":"Philip Helger","url":"https://github.com/phax/phoss-ap","email":"philip@helger.com"},"license":{"name":"Apache License, Version 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0"},"version":"0.12.0"},"servers":[{"url":"http://ap.dev.edics.pro","description":"Generated server url"}],"tags":[{"name":"Inbound","description":"Inbound transaction reporting and status queries"},{"name":"Management","description":"Operational endpoints (not protected by the API token; restrict at a reverse proxy if needed)."},{"name":"MLS","description":"Message Level Status — missing responses and SLA reports per Peppol Network Policy"},{"name":"Outbound","description":"Outbound document submission and transmission status"},{"name":"Operations","description":"Operational APIs for transaction history auditing, payload inspection, and manual re-forwarding."},{"name":"Peppol Reporting","description":"Create and send Peppol TSR and EUSR reports. Requires a configured Peppol Reporting backend."}],"paths":{"/api/outbound/submit/{senderID}/{receiverID}/{docTypeID}/{processID}/{c1CountryCode}":{"post":{"tags":["Outbound"],"summary":"Submit a raw document for outbound sending","description":"Submits a raw business document (e.g., UBL Invoice XML) for outbound transmission. The AP creates the SBDH envelope from the path/query parameters. Returns a Phase4PeppolSendingReport as JSON.","operationId":"submitRawDocument","parameters":[{"name":"senderID","in":"path","description":"Peppol Participant ID of the sender (C1)","required":true,"schema":{"type":"string"},"example":"iso6523-actorid-upis::0088:senderbackend"},{"name":"receiverID","in":"path","description":"Peppol Participant ID of the receiver (C4)","required":true,"schema":{"type":"string"},"example":"iso6523-actorid-upis::0088:receiverbackend"},{"name":"docTypeID","in":"path","description":"Peppol Document Type Identifier","required":true,"schema":{"type":"string"},"example":"busdox-docid-qns::urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:peppol:pint:billing-1@jp:peppol-1::2.1"},{"name":"processID","in":"path","description":"Peppol Process Identifier","required":true,"schema":{"type":"string"},"example":"cenbii-procid-ubl::urn:peppol:pint:billing-1@jp-1"},{"name":"c1CountryCode","in":"path","description":"ISO 3166-1 alpha-2 country code of the sender (C1)","required":true,"schema":{"type":"string"},"example":"AT"},{"name":"sbdhInstanceID","in":"query","description":"Custom SBDH Instance Identifier. A random UUID-based identifier is generated when omitted.","required":false,"schema":{"type":"string"}},{"name":"mlsTo","in":"query","description":"Alternative Peppol Participant ID to receive MLS responses","required":false,"schema":{"type":"string"}},{"name":"sbdhStandard","in":"query","description":"SBDH Standard override for non-XML payloads (e.g., urn:peppol:doctype:pdf+xml). Auto-derived from the document type when omitted, but mandatory for document types with a non-XML syntax specific ID.","required":false,"schema":{"type":"string"}},{"name":"sbdhTypeVersion","in":"query","description":"SBDH TypeVersion override (e.g., 0). Auto-derived from the document type when omitted, but mandatory for document types with a non-XML syntax specific ID.","required":false,"schema":{"type":"string"}},{"name":"sbdhType","in":"query","description":"SBDH Type override (e.g., factur-x). Auto-derived from the document type when omitted, but mandatory for document types with a non-XML syntax specific ID.","required":false,"schema":{"type":"string"}},{"name":"payloadMimeType","in":"query","description":"MIME type for binary payloads (e.g., application/pdf). When set, the payload is wrapped in <BinaryContent>; otherwise treated as XML. Mandatory for document types with a non-XML syntax specific ID.","required":false,"schema":{"type":"string"}},{"name":"custom1","in":"query","description":"Optional custom field 1 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}},{"name":"custom2","in":"query","description":"Optional custom field 2 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}},{"name":"custom3","in":"query","description":"Optional custom field 3 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Document accepted and sent successfully","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Invalid Peppol identifier (sender, receiver, document type or process), or missing SBDH parameters for a non-XML document type","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API token"},"404":{"description":"Sending is disabled in the configuration"},"422":{"description":"Sending failed — see the report body for details","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"ApiToken":[]}]}},"/api/outbound/submit-sbd":{"post":{"tags":["Outbound"],"summary":"Submit a pre-built SBD for outbound sending","description":"Submits a complete Standard Business Document (with SBDH already present). All Peppol metadata (sender, receiver, document type, process, C1 country code) is extracted from the SBDH.","operationId":"submitPrebuiltSBD","parameters":[{"name":"mlsTo","in":"query","description":"Alternative Peppol Participant ID to receive MLS responses","required":false,"schema":{"type":"string"}},{"name":"custom1","in":"query","description":"Optional custom field 1 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}},{"name":"custom2","in":"query","description":"Optional custom field 2 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}},{"name":"custom3","in":"query","description":"Optional custom field 3 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"SBD accepted and sent successfully","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Failed to submit the outbound SBD transaction","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API token"},"404":{"description":"Sending is disabled in the configuration"},"422":{"description":"Sending failed — see the report body for details","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"ApiToken":[]}]}},"/api/outbound/submit-s3":{"post":{"tags":["Outbound"],"summary":"Submit a document referenced from S3","description":"Submits a document for outbound sending by referencing an S3 object instead of inlining the payload. The Sender Backend uploads the document to S3 first, then calls this endpoint. Requires 'outbound.s3.enabled=true'. Since v0.1.1.","operationId":"submitFromS3","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutboundS3SubmitRequest"}}},"required":true},"responses":{"200":{"description":"Document fetched, accepted and sent successfully","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Outbound S3 disabled, missing required fields, invalid identifiers, missing SBDH parameters for a non-XML document type, or S3 fetch failed","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API token"},"404":{"description":"Sending is disabled in the configuration"},"422":{"description":"Sending failed — see the report body for details","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"ApiToken":[]}]}},"/api/outbound/submit-auto/{senderID}/{receiverID}/{c1CountryCode}":{"post":{"tags":["Outbound"],"summary":"Submit a document with auto-detected document type","description":"Submits a raw business document for outbound sending using the DDD (Document Details Determinator) library to determine the document type and process identifiers from the XML automatically. Does not support binary payloads or SBDH overrides. Since v0.2.0.","operationId":"submitAutoDetect","parameters":[{"name":"senderID","in":"path","description":"Peppol Participant ID of the sender (C1)","required":true,"schema":{"type":"string"},"example":"iso6523-actorid-upis::0088:senderbackend"},{"name":"receiverID","in":"path","description":"Peppol Participant ID of the receiver (C4)","required":true,"schema":{"type":"string"},"example":"iso6523-actorid-upis::0088:receiverbackend"},{"name":"c1CountryCode","in":"path","description":"ISO 3166-1 alpha-2 country code of the sender (C1)","required":true,"schema":{"type":"string"},"example":"AT"},{"name":"sbdhInstanceID","in":"query","description":"Custom SBDH Instance Identifier. A random UUID-based identifier is generated when omitted.","required":false,"schema":{"type":"string"}},{"name":"mlsTo","in":"query","description":"Alternative Peppol Participant ID to receive MLS responses","required":false,"schema":{"type":"string"}},{"name":"custom1","in":"query","description":"Optional custom field 1 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}},{"name":"custom2","in":"query","description":"Optional custom field 2 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}},{"name":"custom3","in":"query","description":"Optional custom field 3 (max 255 characters). Stored with the transaction and returned by the status APIs.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Document accepted and sent successfully","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Empty body, invalid XML, unrecognised document type, or invalid participant ID","content":{"application/json":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API token"},"404":{"description":"Sending is disabled in the configuration"},"422":{"description":"Sending failed — see the report body for details","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"ApiToken":[]}]}},"/api/ops/inbound/{sbdhInstanceID}/reverify-and-forward":{"post":{"tags":["Operations"],"summary":"Re-verify and forward an inbound transaction","description":"Re-evaluates all registered inbound document verifiers against the stored payload and forwards the document, if they all accept it. This is the manual trigger for documents in status 'verification_deferred'; transactions in any other status are rejected with 409.","operationId":"reverifyAndForwardInbound","parameters":[{"name":"sbdhInstanceID","in":"path","description":"SBDH Instance ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Transaction re-verified and forwarded","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InboundTransactionResponse"}}}},"404":{"description":"Transaction not found"},"409":{"description":"Transaction is not in status 'verification_deferred'"},"500":{"description":"Re-verification or forwarding failed"}},"security":[{"ApiToken":[]}]}},"/api/ops/inbound/{sbdhInstanceID}/replay":{"post":{"tags":["Operations"],"summary":"Replay an inbound transaction","description":"Forces a re-forwarding of an existing inbound transaction.","operationId":"replayInbound","parameters":[{"name":"sbdhInstanceID","in":"path","description":"SBDH Instance ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Transaction replay initiated","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InboundTransactionResponse"}}}},"404":{"description":"Transaction not found"}},"security":[{"ApiToken":[]}]}},"/api/inbound/report":{"post":{"tags":["Inbound"],"summary":"Report C4 country code for an inbound transaction","description":"Triggers the creation of a Peppol Reporting record for a previously received inbound message. Called by the Receiver Backend after it has successfully processed the document. Stores the C4 country code on the transaction and updates the reporting status to 'reported'.","operationId":"reportInbound","parameters":[{"name":"sbdhInstanceID","in":"query","description":"Peppol SBDH Instance Identifier of the inbound message","required":true,"schema":{"type":"string"},"example":"550e8400-e29b-41d4-a716-446655440000"},{"name":"c4CountryCode","in":"query","description":"ISO 3166-1 alpha-2 country code of the final receiver (C4)","required":true,"schema":{"type":"string"},"example":"AT"}],"responses":{"200":{"description":"Country code stored and reporting record created","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReportResponse"}}}},"400":{"description":"The transaction already has a C4 country code stored"},"401":{"description":"Missing or invalid API token"},"404":{"description":"No inbound transaction with the given SBDH Instance ID"}},"security":[{"ApiToken":[]}]}},"/management/status":{"get":{"tags":["Management"],"summary":"Status, version and configuration overview","description":"Returns non-sensitive configuration values, version information and runtime metadata. When 'management.status.enabled=false' a minimal disabled indicator is returned instead.","operationId":"getStatus","responses":{"200":{"description":"Status JSON document","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/api/reporting/do-peppol-reporting/{year}/{month}":{"get":{"tags":["Peppol Reporting"],"summary":"Create, validate, store and send TSR + EUSR","description":"Performs the full Peppol Reporting flow for the given year/month: creates both reports, validates them, stores them and sends them to the dedicated receiver.","operationId":"createValidateStoreAndSend","parameters":[{"name":"year","in":"path","description":"Calendar year. Must be >= 2024.","required":true,"schema":{"type":"integer","format":"int32"},"example":2026},{"name":"month","in":"path","description":"Calendar month (1-12).","required":true,"schema":{"type":"integer","format":"int32"},"example":3}],"responses":{"200":{"description":"Reports created, stored and sent successfully","content":{"application/xml":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API token"},"500":{"description":"Error creating or sending Peppol Reports","content":{"application/xml":{"schema":{"type":"string"}}}}},"security":[{"ApiToken":[]}]}},"/api/reporting/create-tsr/{year}/{month}":{"get":{"tags":["Peppol Reporting"],"summary":"Create Transaction Statistics Report (TSR)","description":"Creates a TSR for the given year/month and returns it as XML.","operationId":"createPeppolReportingTSR","parameters":[{"name":"year","in":"path","description":"Calendar year. Must be >= 2024.","required":true,"schema":{"type":"integer","format":"int32"},"example":2026},{"name":"month","in":"path","description":"Calendar month (1-12).","required":true,"schema":{"type":"integer","format":"int32"},"example":3}],"responses":{"200":{"description":"TSR XML document","content":{"application/xml":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API token"},"500":{"description":"Failed to read Peppol Reporting backend data","content":{"application/xml":{"schema":{"type":"string"}}}}},"security":[{"ApiToken":[]}]}},"/api/reporting/create-eusr/{year}/{month}":{"get":{"tags":["Peppol Reporting"],"summary":"Create End User Statistics Report (EUSR)","description":"Creates an EUSR for the given year/month and returns it as XML.","operationId":"createPeppolReportingEUSR","parameters":[{"name":"year","in":"path","description":"Calendar year. Must be >= 2024.","required":true,"schema":{"type":"integer","format":"int32"},"example":2026},{"name":"month","in":"path","description":"Calendar month (1-12).","required":true,"schema":{"type":"integer","format":"int32"},"example":3}],"responses":{"200":{"description":"EUSR XML document","content":{"application/xml":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API token"},"500":{"description":"Failed to read Peppol Reporting backend data","content":{"application/xml":{"schema":{"type":"string"}}}}},"security":[{"ApiToken":[]}]}},"/api/outbound/status/{sbdhInstanceID}":{"get":{"tags":["Outbound"],"summary":"Query outbound transaction status","description":"Returns the current status of a specific outbound transaction. By default only the active outbound_transaction table is searched. Pass includeArchive=true to also consider archived transactions.","operationId":"getStatus_1","parameters":[{"name":"sbdhInstanceID","in":"path","description":"Peppol SBDH Instance Identifier of the outbound message","required":true,"schema":{"type":"string"},"example":"550e8400-e29b-41d4-a716-446655440000"},{"name":"includeArchive","in":"query","description":"When true, the archive table is consulted if the transaction is not in the active table. Since 0.9.0.","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Transaction found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/OutboundTransactionResponse"}}}},"401":{"description":"Missing or invalid API token"},"404":{"description":"No outbound transaction with the given SBDH Instance ID"}},"security":[{"ApiToken":[]}]}},"/api/outbound/in-transmission":{"get":{"tags":["Outbound"],"summary":"List outbound transactions in transmission","description":"Returns all outbound transactions that are not yet in a final state — includes status pending, sending, failed (awaiting retry). Excludes rejected, sent, permanently_failed.","operationId":"getInTransmission","responses":{"200":{"description":"List of outbound transactions","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OutboundTransactionResponse"}}}}},"401":{"description":"Missing or invalid API token"}},"security":[{"ApiToken":[]}]}},"/api/ops/outbound/{sbdhInstanceID}/payload":{"get":{"tags":["Operations"],"summary":"Get the payload of an outbound transaction","description":"Returns the raw byte content of the document.","operationId":"getOutboundPayload","parameters":[{"name":"sbdhInstanceID","in":"path","description":"SBDH Instance ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Payload content","content":{"application/octet-stream":{"schema":{"type":"string","format":"byte"}}}},"404":{"description":"Transaction or payload not found"}},"security":[{"ApiToken":[]}]}},"/api/ops/outbound/size":{"get":{"tags":["Operations"],"summary":"Get total count of active outbound transactions","description":"Returns the count of active (non-archived) outbound transactions.","operationId":"getOutboundSize","responses":{"200":{"description":"Transaction count","content":{"*/*":{"schema":{"type":"integer","format":"int64"}}}}},"security":[{"ApiToken":[]}]}},"/api/ops/outbound/history":{"get":{"tags":["Operations"],"summary":"Get historical outbound transactions","description":"Returns a paginated list of historical outbound transactions.","operationId":"getOutboundHistory","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}}],"responses":{"200":{"description":"List of transactions","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OutboundTransactionResponse"}}}}}},"security":[{"ApiToken":[]}]}},"/api/ops/inbound/{sbdhInstanceID}/payload":{"get":{"tags":["Operations"],"summary":"Get the payload of an inbound transaction","description":"Returns the raw byte content of the document.","operationId":"getInboundPayload","parameters":[{"name":"sbdhInstanceID","in":"path","description":"SBDH Instance ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Payload content","content":{"application/octet-stream":{"schema":{"type":"string","format":"byte"}}}},"404":{"description":"Transaction or payload not found"}},"security":[{"ApiToken":[]}]}},"/api/ops/inbound/size":{"get":{"tags":["Operations"],"summary":"Get total count of active inbound transactions","description":"Returns the count of active (non-archived) inbound transactions.","operationId":"getInboundSize","responses":{"200":{"description":"Transaction count","content":{"*/*":{"schema":{"type":"integer","format":"int64"}}}}},"security":[{"ApiToken":[]}]}},"/api/ops/inbound/history":{"get":{"tags":["Operations"],"summary":"Get historical inbound transactions","description":"Returns a paginated list of historical inbound transactions.","operationId":"getInboundHistory","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50}}],"responses":{"200":{"description":"List of transactions","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InboundTransactionResponse"}}}}}},"security":[{"ApiToken":[]}]}},"/api/mls/sla/mls2":{"get":{"tags":["MLS"],"summary":"MLS-2 SLA report (sending side)","description":"Measures M3 - M1: time between successfully sending the business document (M1) and receiving the MLS response from C3 (M3). Per Peppol Network Policy: 99.5% must be within 25 minutes.","operationId":"getMls2Sla","responses":{"200":{"description":"MLS-2 SLA report","content":{"*/*":{"schema":{"$ref":"#/components/schemas/MlsSlaReportResponse"}}}},"401":{"description":"Missing or invalid API token"}},"security":[{"ApiToken":[]}]}},"/api/mls/sla/mls1":{"get":{"tags":["MLS"],"summary":"MLS-1 SLA report (receiving side)","description":"Measures M2 - M1: time between receiving the original business document (M1) and successfully sending back the MLS response (M2). Per Peppol Network Policy: 99.5% must be within 20 minutes.","operationId":"getMls1Sla","responses":{"200":{"description":"MLS-1 SLA report","content":{"*/*":{"schema":{"$ref":"#/components/schemas/MlsSlaReportResponse"}}}},"401":{"description":"Missing or invalid API token"}},"security":[{"ApiToken":[]}]}},"/api/mls/missing":{"get":{"tags":["MLS"],"summary":"List inbound transactions missing an MLS response","description":"Returns all inbound business document transactions for which no MLS response has been sent yet (mls_response_code IS NULL). Excludes incoming MLS messages themselves.","operationId":"getMissingMls","responses":{"200":{"description":"List of inbound transactions without an MLS response","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InboundTransactionResponse"}}}}},"401":{"description":"Missing or invalid API token"}},"security":[{"ApiToken":[]}]}},"/api/inbound/status/{sbdhInstanceID}":{"get":{"tags":["Inbound"],"summary":"Query inbound transaction status","description":"Returns the current status of a specific inbound transaction. By default only the active inbound_transaction table is searched. Pass includeArchive=true to also consider archived transactions.","operationId":"getStatus_2","parameters":[{"name":"sbdhInstanceID","in":"path","description":"Peppol SBDH Instance Identifier of the inbound message","required":true,"schema":{"type":"string"},"example":"550e8400-e29b-41d4-a716-446655440000"},{"name":"includeArchive","in":"query","description":"When true, the archive table is consulted if the transaction is not in the active table. Since 0.9.0.","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Transaction found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InboundTransactionResponse"}}}},"401":{"description":"Missing or invalid API token"},"404":{"description":"No inbound transaction with the given SBDH Instance ID"}},"security":[{"ApiToken":[]}]}},"/api/inbound/missing-c4-country-code":{"get":{"tags":["Inbound"],"summary":"List inbound transactions missing C4 country code","description":"Returns all forwarded inbound transactions for which the C4 country code has not yet been determined. Only includes transactions in status forwarded where reporting is still pending. Since v0.1.3.","operationId":"getMissingC4CountryCode","responses":{"200":{"description":"List of inbound transactions without a C4 country code","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InboundTransactionResponse"}}}}},"401":{"description":"Missing or invalid API token"}},"security":[{"ApiToken":[]}]}},"/api/inbound/missing-c4-country-code/{sbdhInstanceID}":{"get":{"tags":["Inbound"],"summary":"Check a specific transaction for missing C4 country code","description":"Checks whether a specific inbound transaction is still missing a C4 country code. Since v0.1.3.","operationId":"getMissingC4CountryCodeForTransaction","parameters":[{"name":"sbdhInstanceID","in":"path","description":"Peppol SBDH Instance Identifier of the inbound message","required":true,"schema":{"type":"string"},"example":"550e8400-e29b-41d4-a716-446655440000"}],"responses":{"200":{"description":"The C4 country code is still missing — returns the full transaction details","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InboundTransactionResponse"}}}},"204":{"description":"The transaction exists and the C4 country code is already set"},"401":{"description":"Missing or invalid API token"},"404":{"description":"No inbound transaction with the given SBDH Instance ID"}},"security":[{"ApiToken":[]}]}},"/api/inbound/in-processing":{"get":{"tags":["Inbound"],"summary":"List inbound transactions in processing","description":"Returns all inbound transactions that are not yet in a final state — includes status received, forwarding, forward_failed (awaiting retry). Excludes rejected, forwarded, permanently_failed.","operationId":"getInProcessing","responses":{"200":{"description":"List of inbound transactions","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InboundTransactionResponse"}}}}},"401":{"description":"Missing or invalid API token"}},"security":[{"ApiToken":[]}]}}},"components":{"schemas":{"OutboundS3SubmitRequest":{"type":"object","description":"Request body for /api/outbound/submit-s3 — Peppol identifiers plus an S3 reference. The Sender Backend uploads the document to S3 first, then calls the AP with this payload.","properties":{"senderID":{"type":"string","description":"Peppol Participant ID of the sender (C1)","example":"iso6523-actorid-upis::0088:senderbackend"},"receiverID":{"type":"string","description":"Peppol Participant ID of the receiver (C4)","example":"iso6523-actorid-upis::0088:receiverbackend"},"docTypeID":{"type":"string","description":"Peppol Document Type Identifier","example":"busdox-docid-qns::urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:peppol:pint:billing-1@jp:peppol-1::2.1"},"processID":{"type":"string","description":"Peppol Process Identifier","example":"cenbii-procid-ubl::urn:peppol:pint:billing-1@jp-1"},"c1CountryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code of the sender (C1)","example":"AT"},"s3Bucket":{"type":"string","description":"S3 bucket where the document was uploaded. Defaults to the configured 'outbound.s3.bucket' when omitted.","example":"sender-documents"},"s3Key":{"type":"string","description":"S3 object key of the uploaded document","example":"outbound/2026/invoice-12345.xml"},"sbdhInstanceID":{"type":"string","description":"Custom SBDH Instance Identifier. A random UUID-based identifier is generated when omitted.","example":"550e8400-e29b-41d4-a716-446655440000"},"mlsTo":{"type":"string","description":"Alternative Peppol Participant ID to receive MLS responses"},"sbdhStandard":{"type":"string","description":"SBDH Standard override for non-XML payloads (e.g., urn:peppol:doctype:pdf+xml). Auto-derived from the document type when omitted, but mandatory for document types with a non-XML syntax specific ID."},"sbdhTypeVersion":{"type":"string","description":"SBDH TypeVersion override (e.g., '0'). Auto-derived from the document type when omitted, but mandatory for document types with a non-XML syntax specific ID."},"sbdhType":{"type":"string","description":"SBDH Type override (e.g., 'factur-x'). Auto-derived from the document type when omitted, but mandatory for document types with a non-XML syntax specific ID."},"payloadMimeType":{"type":"string","description":"MIME type for binary payloads (e.g., 'application/pdf'). When set the payload is wrapped in <BinaryContent>; otherwise treated as XML. Mandatory for document types with a non-XML syntax specific ID.","example":"application/pdf"},"custom1":{"type":"string","description":"Optional custom field 1 (max 255 characters). Stored with the transaction and returned by the status APIs."},"custom2":{"type":"string","description":"Optional custom field 2 (max 255 characters). Stored with the transaction and returned by the status APIs."},"custom3":{"type":"string","description":"Optional custom field 3 (max 255 characters). Stored with the transaction and returned by the status APIs."}},"required":["c1CountryCode","docTypeID","processID","receiverID","s3Key","senderID"]},"InboundTransactionResponse":{"type":"object","description":"Inbound (received) Peppol transaction — current state, identifiers, forwarding outcome and MLS response status.","properties":{"id":{"type":"string","description":"Internal transaction ID assigned by the AP"},"senderID":{"type":"string","description":"Peppol Participant ID of the sender","example":"iso6523-actorid-upis::0088:senderbackend"},"receiverID":{"type":"string","description":"Peppol Participant ID of the receiver","example":"iso6523-actorid-upis::0088:receiverbackend"},"docTypeID":{"type":"string","description":"Peppol Document Type Identifier"},"processID":{"type":"string","description":"Peppol Process Identifier"},"as4MessageID":{"type":"string","description":"AS4 Message ID from the inbound message"},"sbdhInstanceID":{"type":"string","description":"Peppol SBDH Instance Identifier","example":"550e8400-e29b-41d4-a716-446655440000"},"c2SeatID":{"type":"string","description":"Peppol Seat ID of the sending AP (C2). Since v0.10.2."},"c3SeatID":{"type":"string","description":"Peppol Seat ID of the receiving AP (C3). Since v0.10.2."},"status":{"type":"string","description":"Current transaction status","enum":["received","rejected","verification_deferred","forwarding","forwarded","forward_failed","permanently_failed"]},"attemptCount":{"type":"integer","format":"int32","description":"Total number of forwarding attempts"},"receivedDT":{"type":"string","description":"When the message was received (ISO-8601, UTC)","example":"2026-03-27T14:30:00Z"},"completedDT":{"type":["string","null"],"description":"When the transaction was successfully completed; null if not yet completed","example":"2026-03-27T14:30:05Z"},"reportingStatus":{"type":"string","description":"Whether Peppol Reporting has been triggered","enum":["pending","reported"]},"nextRetryDT":{"type":["string","null"],"description":"Planned date/time of the next forwarding retry; null unless status is forward_failed"},"errorDetails":{"type":["string","null"],"description":"Summary error from the last failed forwarding attempt; null on success"},"c4CountryCode":{"type":["string","null"],"description":"ISO 3166-1 alpha-2 country code of the final receiver (C4); null if not yet reported. Since v0.1.3.","example":"AT"},"mlsResponseCode":{"type":["string","null"],"description":"MLS response code sent or to be sent; null if not yet determined","enum":["RE","AP","AB"]},"verificationResult":{"type":["string","null"],"description":"Verdict of the inbound document verification; null if no verification was performed (yet). Independent of the status, so it also survives a forwarding. Since v0.12.0.","enum":["passed","rejected","unverified"]},"verificationDetails":{"type":["string","null"],"description":"Findings of the verification as a JSON array of VerificationIssue objects; null if the verifier provided none. On a passed verification these are warnings. Since v0.12.0."},"duplicateAS4":{"type":"boolean"},"duplicateSBDH":{"type":"boolean"}}},"ReportResponse":{"type":"object","description":"Outcome of a reporting API operation — internal transaction ID, status keyword and a human-readable message.","properties":{"transactionID":{"type":"string","description":"Internal transaction ID affected by the operation"},"status":{"type":"string","description":"Status keyword describing the outcome","example":"updated"},"message":{"type":"string","description":"Human-readable message describing what happened","example":"C4 country code set to 'AT'"}}},"OutboundTransactionResponse":{"type":"object","description":"Outbound (sent) Peppol transaction — current state, identifiers, transmission progress and MLS response status.","properties":{"id":{"type":"string","description":"Internal transaction ID assigned by the AP"},"transactionType":{"type":"string","description":"Kind of transaction","enum":["business_document","mls_response"]},"senderID":{"type":"string","description":"Peppol Participant ID of the sender","example":"iso6523-actorid-upis::0088:senderbackend"},"receiverID":{"type":"string","description":"Peppol Participant ID of the receiver","example":"iso6523-actorid-upis::0088:receiverbackend"},"docTypeID":{"type":"string","description":"Peppol Document Type Identifier"},"processID":{"type":"string","description":"Peppol Process Identifier"},"sbdhInstanceID":{"type":"string","description":"Peppol SBDH Instance Identifier","example":"550e8400-e29b-41d4-a716-446655440000"},"status":{"type":"string","description":"Current transaction status","enum":["pending","rejected","sending","sent","failed","permanently_failed"]},"attemptCount":{"type":"integer","format":"int32","description":"Total number of sending attempts so far"},"createdDT":{"type":"string","description":"When the transaction was created (ISO-8601, UTC)","example":"2026-03-27T14:30:00Z"},"completedDT":{"type":["string","null"],"description":"When the transaction was successfully completed; null if not yet completed","example":"2026-03-27T14:30:05Z"},"reportingStatus":{"type":"string","description":"Whether Peppol Reporting has been triggered","enum":["pending","reported"]},"nextRetryDT":{"type":["string","null"],"description":"Planned date/time of the next sending retry; null unless status is failed"},"errorDetails":{"type":["string","null"],"description":"Summary error from the last failed sending attempt; null on success"},"mlsStatus":{"type":["string","null"],"description":"MLS response reception status (only for business_document)","enum":["pending","received_ap","received_ab","received_re","not_applicable"]},"custom1":{"type":["string","null"],"description":"First optional custom field (max 255 characters); null if not set"},"custom2":{"type":["string","null"],"description":"Second optional custom field (max 255 characters); null if not set"},"custom3":{"type":["string","null"],"description":"Third optional custom field (max 255 characters); null if not set"}}},"MlsSlaEntryResponse":{"type":"object","description":"Single MLS SLA measurement — one observed business document with the durations between its M1 and M2/M3 timestamps.","properties":{"sbdhInstanceID":{"type":"string","description":"SBDH Instance Identifier of the original business document","example":"550e8400-e29b-41d4-a716-446655440000"},"m1":{"type":"string","description":"M1 timestamp — AS4 timestamp of the received (MLS-1) or sent (MLS-2) business document, ISO-8601 UTC","example":"2026-03-27T14:30:00Z"},"m2OrM3":{"type":"string","description":"M2 (MLS-1: AS4 timestamp of the sent MLS response) or M3 (MLS-2: AS4 timestamp of the received MLS response), ISO-8601 UTC","example":"2026-03-27T14:35:42Z"},"durationSeconds":{"type":"integer","format":"int64","description":"Duration in seconds (M2 - M1 for MLS-1, M3 - M1 for MLS-2)","example":342},"withinSla":{"type":"boolean","description":"Whether this measurement falls within the SLA threshold"}}},"MlsSlaReportResponse":{"type":"object","description":"MLS SLA compliance report — aggregated statistics plus the underlying individual measurements. Used for both MLS-1 (receiving side, 20-minute threshold) and MLS-2 (sending side, 25-minute threshold) per Peppol Network Policy.","properties":{"totalCount":{"type":"integer","format":"int32","description":"Total number of measured transactions","example":1240},"withinSlaCount":{"type":"integer","format":"int32","description":"Number of measurements within the SLA threshold","example":1238},"compliancePercent":{"type":"number","format":"double","description":"Actual compliance percentage","example":99.84},"targetPercent":{"type":"number","format":"double","description":"Required target percentage per Peppol Network Policy","example":99.5},"thresholdSeconds":{"type":"integer","format":"int64","description":"SLA threshold in seconds (1200 for MLS-1, 1500 for MLS-2)","example":1200},"meetingSla":{"type":"boolean","description":"Whether the target is currently met"},"entries":{"type":"array","description":"Individual SLA measurement entries","items":{"$ref":"#/components/schemas/MlsSlaEntryResponse"}}}}},"securitySchemes":{"ApiToken":{"type":"apiKey","description":"API token configured via the 'phase4.api.requiredtoken' property. Required for all /api/** endpoints; not required for /management/**.","name":"X-Token","in":"header"}}}}