Skip to main content
Version: 1.0.1

Audit Trail


Retrieve the full activity history of one archive row: every capture, view, download, legal hold, integrity check, and retention event, each entry linked to the previous one by a hash chain so a gap or an edit is detectable.

Endpoint​

PropertyValue
URLGET /germany/archive/{companyId}/audit/{archiveId}
MethodGET
AuthR-Auth: <company-jwt>
Base URLStage Environment https://api-stage.docnova.ai/
Production Environment https://api.docnova.ai/

Example Request​

curl --location '{{baseUrl}}/germany/archive/{{companyId}}/audit/{{archiveId}}' \
--header 'R-Auth: {{companyJwt}}'

Path parameters​

ParameterTypeRequiredDescription
companyIdUUIDYesCompany UUID
archiveIdUUIDYesArchive row UUID, from Archive listing

Response​

{
"archiveId": "7c3fbe0a-8a3a-4e4c-9a1a-1f1f2d3c4b5a",
"chainValid": true,
"events": [
{
"seq": 1,
"eventType": "ENQUEUED",
"eventAt": "2026-06-01T10:00:00",
"actor": "SYSTEM",
"detail": "sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"entryHash": "b2f5c1a9..."
},
{
"seq": 2,
"eventType": "ARCHIVED",
"eventAt": "2026-06-01T10:05:00",
"actor": "SYSTEM",
"detail": null,
"entryHash": "4ad9e3f0..."
},
{
"seq": 3,
"eventType": "ACCESS_VIEW",
"eventAt": "2026-06-02T09:12:00",
"actor": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"detail": "GET /germany/archive/.../audit/...",
"entryHash": "7f10a8e2..."
}
]
}

Response fields​

FieldDescription
archiveIdArchive row UUID
chainValidtrue if the hash chain of every event below is intact
events[].seqSequence number of the event within the row, starting at 1
events[].eventTypeWhat happened. See Event type values
events[].eventAtWhen the event occurred
events[].actorUser ID, or SYSTEM for an automated event
events[].detailFree-text detail, when available
events[].entryHashHash of this entry, chained to the previous one

Error responses​

HTTPerrorTypeMeaning
400GERMANY_ARCHIVE_NOT_AVAILABLEThe company is not archived under the German GoBD rules
403AUTHORIZATION_FAILEDCaller may not view this row's invoice direction, or has no view rights at all
403GERMANY_AUDITOR_ACCESS_EXPIREDCaller's time-limited auditor access (Z1) has ended
404—No archive row with this archiveId for this company

Event type values​

ValueDescription
ENQUEUEDThe document was queued for archiving
ARCHIVEDThe copy was written to the archive bucket
ARCHIVE_FAILEDArchiving failed and will be retried
ACCESS_VIEWThe row was shown to a user
ACCESS_DOWNLOADThe archived file was downloaded
PACKAGE_INCLUDEDThe archived copy was included in an audit package
LEGAL_HOLD_SETA legal hold was set on the row
LEGAL_HOLD_RELEASEDA legal hold was released from the row
LEGAL_HOLD_SYNCEDThe row's legal hold state was applied to or released from the archived object in the storage bucket
INTEGRITY_VERIFIEDA verification re-hash matched the recorded checksum
INTEGRITY_VIOLATIONA verification re-hash did not match the recorded checksum
ARCHIVE_FILE_MISSINGThe archived copy could not be read from the archive bucket
EDIT_BLOCKEDA refused attempt to change the archived document
DELETE_BLOCKEDA refused attempt to delete the archived document
RETENTION_EXPIREDThe row's retention period ended without a legal hold
DELETION_APPROVEDAn administrator approved deletion of an expired row; nothing is deleted by this event alone
SAME_CONTENT_RECAPTUREDThe same bytes were received or sent again for an already-archived original
ORIGINAL_UNPROVABLEThe row was sealed as UNPROVABLE because its original bytes could not be proven
CAPTURED_UNPROCESSABLEA received file that could not be processed was archived as received
BASELINE_MIGRATEDGenesis event appended to a row that existed before the audit trail feature; events before this one are not covered by the hash chain