Verify the audit trail hash chain
GET /audit-trail/verify
Scope audit_log:verify Plan Growth+
Requires the audit_log:verify scope. Needs the audit_trail plan feature.
Example
curl "https://api.autociso.io/api/v1/audit-trail/verify" \
-H "Authorization: Bearer <your-api-token>"import requests
response = requests.get(
"https://api.autociso.io/api/v1/audit-trail/verify",
headers={"Authorization": "Bearer <your-api-token>"},
)
print(response.json())const response = await fetch("https://api.autociso.io/api/v1/audit-trail/verify", {
method: "GET",
headers: { "Authorization": "Bearer <your-api-token>" },
});
console.log(await response.json());Response 200
{
"data": {
"acceptedBreakCount": 1,
"acceptedBreaks": [
{
"acceptanceSeq": 7420,
"approvedAt": "2026-09-02T12:00:00Z",
"breakClass": "concurrent_append",
"exceptionId": "6702a1f01f4e2b0012ab1203",
"seqNum": 7311
}
],
"breakCount": 0,
"breaks": [],
"breaksTruncated": false,
"brokenAt": null,
"chainedEntries": 10140,
"effectiveBoundarySeq": 7420,
"exceptionBoundarySeq": 7420,
"firstChainedSeq": 1,
"legacyEntries": 341,
"pendingEntries": 2,
"protocolV2Seq": 6200,
"scanComplete": true,
"seqGapCount": 0,
"seqGaps": [],
"totalEntries": 10483,
"valid": true,
"verifiedAt": "2026-10-13T07:30:00Z"
},
"error": null
}Returns
The data field of the standard { data, error, meta } envelope:
acceptedBreakCountinteger requiredBreaks excused by an approved exception.acceptedBreaksarray of object requiredAccepted breaks, at most 200.acceptanceSeqinteger requiredSequence number of the acceptance entry in the chain.approvedAtstring requiredWhen the exception was approved (RFC 3339).breakClassstringmanual or concurrent_append.exceptionIdstring requiredId of the approved exception.seqNuminteger requiredSequence number of the excused entry.
breakCountinteger requiredTotal chain breaks found.breaksarray of object requiredChain breaks, at most 200.detailstring requiredFixed description of the break kind at this sequence number; never contains hashes.kindstring requiredprev_link_mismatch, hash_mismatch, duplicate_seq, corrupt, seq_gap, gap_unaccounted, exception_unused, exception_invalid, exception_missing or exception_superseded.seqNuminteger requiredSequence number of the entry.
breaksTruncatedboolean requiredTrue when breaks lists only the first 200.brokenAtinteger or nullSequence number of the first break, when there is one.chainedEntriesinteger requiredChained entries scanned.effectiveBoundarySeqinteger or nullSequence number from which strict verification applies.exceptionBoundarySeqinteger or nullHighest sequence number covered by exception markers.firstChainedSeqinteger or nullSequence number of the first scanned chained entry.legacyEntriesinteger requiredEntries that predate the hash chain.pendingEntriesinteger requiredEntries recorded but not yet chained.protocolV2Seqinteger or nullSequence number where the current chain protocol starts.scanCompleteboolean requiredFalse when the scan ran out of time budget; valid is then false and the counts are partial.seqGapCountinteger requiredJumps in the sequence numbering.seqGapsarray of object requiredSequence jumps, at most 200.afterinteger requiredLast sequence number before the jump.nextinteger requiredFirst sequence number after the jump.
totalEntriesinteger requiredEntries in the audit trail.validboolean requiredTrue when the scan completed and found no unaccepted break.verifiedAtstring (date-time) requiredWhen the scan finished (UTC). Results are cached for 60 seconds per organization.
Errors
| Status | Code | Retry | Meaning |
|---|---|---|---|
| 400 | - | no | The request is invalid. |
| 401 | - | no | The token is missing, malformed, expired or revoked. |
| 402 | - | no | The organisation’s plan does not include the feature this route needs. |
| 403 | - | no | The token may not use this route. |
| 429 | - | yes | Rate limit or row budget exceeded; retry after the time in Retry-After. |
| 500 | - | no | Unexpected server error. |
| 503 | - | yes | A dependency is temporarily unavailable; retry later. |
Last reviewed: 2026-10-13
Was this page helpful?