CrawlCheck

API reference

Compatibility policy

Every field in /api/v1/schema is tagged stable, provisional or internal in an x-stability keyword. The tag says how long you get between hearing a field will change and it changing.

LevelFieldsWhat can change within v1NoticeHow you are told
stable208Nothing within v1. Removing, renaming or retyping it needs a new major version (/api/v2), announced at least 180 days ahead.180 daysDeprecation and Sunset headers on every response that carries it, deprecated:true in the schema, an entry in x-compatibility.deprecations, release notes.
provisional287Its shape may change within v1 (renamed, restructured, removed) after at least 30 days' notice. Never silently.30 daysThe same four signals as stable, 30 days ahead.
internal10Anything, at any time. It is in the response so you can see what the record is built from, not to be built on.noneNone promised.

505 fields across 16 response formats. The table below, the JSON Schema and /openapi.json are generated from one list, so they always agree.

Rules

Adding is never breaking. New fields, new formats and new endpoints can appear at any time at any level. Ignore fields you do not know, and validate against the live schema rather than a pinned copy.

A field is never more stable than its container. Everything inside a provisional object is provisional, whatever it is tagged on its own.

Undescribed contents are provisional. An object or array whose contents the schema does not spell out is provisional until they are written down. Three exceptions are stable because a standard or conformance suite v1 fixes them: the evidence bundle’s decision and lineage leaves, and the receipt issuer’s JWK.

Breaking a stable field needs v2. v1 keeps answering for at least 180 days after /api/v2 is published. A new enum value on a stable field counts as breaking.

Signed formats do not change in place. Receipts, manifests and evidence bundles carry their own version number (v), and a verifier for one version keeps verifying it. A new layout is a new version, never an edit to the old one.

The SDK follows the same line. @crawlcheck/sdk takes a new major version when a stable field changes, and a minor version when a provisional one does.

Finding codes are part of the contract. A code is never renamed or reused. When a rule changes what it reports it takes a new revision, the record keeps the revision that decided it, and a replay uses that revision. Every code, its meaning, its current revision and its share of scans are in the rulebook (/api/rules, validated by its schema).

How a change is announced

WhereWhat you see
Response headersDeprecation: @<unix time> (RFC 9745), Sunset: <HTTP date> (RFC 8594) and Link: <https://crawlcheck.io/docs/api/compatibility>; rel="deprecation", on every v1 response that still carries the field
/api/v1/schemadeprecated: true and x-deprecation on the field; the list in x-compatibility.deprecations
/openapi.jsonThe same, so generated clients mark the field deprecated
This page and the release notesThe field, the date, the removal date and what to use instead

Deprecated now

None. No v1 field is deprecated today.

Every field

PublicReportV1 stable 75 fields · 48 stable · 23 provisional · 4 internal
FieldTypeLevel
schemastringstable
versionconst "1.0"stable
idstring | nullstable
domainstring | nullstable
pathstring | nullstable
scanned_hoststring | nullstable
scanned_atstring | nullstable
score_versionnumber | nullstable
gradestring | nullstable
overallnumber | nullstable
grade_detailobjectstable
grade_detail.cappedbooleanstable
grade_detail.capstring | nullstable
grade_detail.cap_reasonstring | nullstable
sectionsarraystable
sections.idstring | nullstable
sections.titlestring | nullstable
sections.scorenumber | nullstable
findingsarraystable
findings.codestring | nullstable
findings.pathstring | nullstable
findings.severitynumber | nullstable
findings.titlestring | nullstable
findings.detailstring | nullstable
findings.meaningstring | nullstable
findings.evidencestring | nullstable
findings.fidstring | nullstable
findings.decision_idstring | nullstable
findings.graphstring | nullstable
findings.lockedbooleanstable
findings.fingerprintstring | nullstable
findings.stateenumprovisional
findings.first_seenstring | nullprovisional
findings.scans_seennumber | nullprovisional
findings.recurrencesnumber | nullprovisional
findings.valid_timeobject | nullprovisional
findings_withheldstring | nullstable
findings_summaryobject | nullstable
findings_summary.totalnumber | nullstable
findings_summary.seriousnumber | nullstable
findings_summary.by_severityobject | nullprovisional
provenanceobject | nullprovisional
root_causesarray | nullprovisional
fix_impactarray | nullprovisional
score_ledgerobject | nullprovisional
confidenceobject | nullprovisional
bitemporalobject | nullprovisional
non_observationsarray | nullprovisional
non_observations.subjectstring | nullprovisional
non_observations.statestring | nullprovisional
non_observations.reasonstring | nullprovisional
non_observations.attemptedboolean | nullprovisional
fact_lineageobject | nullprovisional
checksarraystable
checks.pathstring | nullstable
checks.statusnumber | nullstable
checks.bytesnumber | nullstable
agentviewarrayprovisional
agentview.labelstring | nullprovisional
agentview.statusnumber | nullprovisional
agentview.wordsnumber | nullprovisional
napobject | nullinternal
headroomobject | nullinternal
headroom.gainnumber | nullinternal
headroom.failingnumber | nullinternal
historyarraystable
history.atstring | nullstable
history.overallnumber | nullstable
history.score_versionnumber | nullstable
proofobjectstable
proof.digeststring | nullstable
proof.algorithmstring | nullstable
proof.anchoredstring | nullstable
proof.verifystring | nullstable
linksobjectprovisional
MachineRecordV1 provisional 15 fields · 2 stable · 13 provisional · 0 internal
FieldTypeLevel
kindconst "crawlcheck-machine-record"stable
versionstringstable
subjectobjectprovisional
observationobjectprovisional
findingsarrayprovisional
freshnessobjectprovisional
fix_impactarray | object | nullprovisional
score_ledgerobject | nullprovisional
confidenceobjectprovisional
contradictionsobjectprovisional
findings_summaryobject | nullprovisional
findings_withheldstring | nullprovisional
capabilitiesobjectprovisional
evidenceobjectprovisional
accessobjectprovisional
ErrorV1 stable 4 fields · 4 stable · 0 provisional · 0 internal
FieldTypeLevel
errorobjectstable
error.codestringstable
error.statusintegerstable
error.messagestringstable
EvidenceBundleV1 stable 63 fields · 53 stable · 8 provisional · 2 internal
FieldTypeLevel
kindconst "crawlcheck-evidence-bundle"stable
versionintegerstable
generated_atstringstable
reportobjectstable
report.idstring | nullstable
report.domainstring | nullstable
report.pathstring | nullstable
report.scanned_atstring | nullstable
report.score_versionnumber | nullstable
report.archivedbooleanstable
verifierobjectstable
verifier.urlstringstable
verifier.sha256stringstable
verifier.runstringstable
verifier.pagestringstable
provesarrayprovisional
does_not_provearrayprovisional
manifestobject | nullstable
manifest.sha256stringstable
manifest.bodystring | nullstable
manifest.body_missingstring | nullstable
manifest.signatureobject | nullstable
manifest.signature.algstring | nullstable
manifest.signature.kidstring | nullstable
manifest.signature.messagestring | nullstable
manifest.signature.sigstring | nullstable
manifest.signature.signed_atstring | nullstable
manifest.keyobject | nullstable
manifest.key.jwkobjectstable
manifest.key.jwk.ktyconst "OKP"stable
manifest.key.jwk.crvconst "Ed25519"stable
manifest.key.jwk.xstringstable
manifest.key.kidstringstable
manifest.key.published_instringstable
manifest.key_missingstring | nullstable
recordobject | nullstable
record.digeststring | nullstable
record.subjectstring | nullstable
record.subject_withheldstring | nullstable
record.recipestring | nullinternal
record.decision_leavesarray | nullstable
record.lineage_leavesarray | nullstable
record.leaves_withheldstring | nullstable
sealobject | nullstable
seal.stateenumstable
seal.daystring | nullstable
seal.rootstring | nullstable
seal.patharraystable
seal.path.sideenumstable
seal.path.hashstringstable
seal.leaves_that_daynumber | nullstable
seal.sealed_atstring | nullstable
seal.calendarsarraystable
seal.ots_base64string | nullstable
seal.bitcoin_blocknumber | nullstable
seal.recipestring | nullinternal
seal.whystring | nullstable
publish_guardobjectprovisional
publish_guard.checkedarrayprovisional
publish_guard.withheldarrayprovisional
publish_guard.withheld.sectionstringprovisional
publish_guard.withheld.matchedarrayprovisional
disclosurestringprovisional
RemediationReceiptV1 stable 53 fields · 47 stable · 4 provisional · 2 internal
FieldTypeLevel
receipt_idstringstable
kindconst "crawlcheck-remediation-receipt"stable
vconst 1stable
issued_atstringstable
issuerobjectstable
issuer.observerstring | nullstable
issuer.version_idstring | nullstable
issuer.version_tagstring | nullstable
issuer.keyobjectstable
issuer.key.kidstringstable
issuer.key.jwkobjectstable
issuer.key.published_instring | nullstable
subjectobjectstable
subject.domainstringstable
beforeReceiptSideV1stable
afterReceiptSideV1stable
declared_fixobjectstable
declared_fix.kindstringstable
declared_fix.declared_bystring | nullstable
declared_fix.declared_atstring | nullstable
declared_fix.plugin_versionstring | nullstable
declared_fix.fixesarray | nullstable
declared_fix.notestring | nullstable
deployedobjectstable
deployed.atstring | nullstable
deployed.basisstring | nullstable
verificationobjectstable
verification.verdictenumstable
verification.summarystring | nullstable
verification.comparablebooleanstable
verification.findingsobjectprovisional
verification.rowsobjectprovisional
verification.filesarraystable
verification.files.pathstringstable
verification.files.statestringstable
verification.files.before_sha256string | nullstable
verification.files.after_sha256string | nullstable
verification.files.before_statusnumber | nullstable
verification.files.after_statusnumber | nullstable
verification.rollback_neededbooleanstable
verification.rollback_stepsarrayprovisional
verification.methodstring | nullinternal
linksobjectprovisional
signatureobjectstable
signature.vnumber | nullstable
signature.algconst "Ed25519"stable
signature.kidstringstable
signature.overstring | nullstable
signature.receipt_sha256stringstable
signature.messagestringstable
signature.sigstringstable
signature.signed_atstring | nullstable
signature.canonicalstring | nullinternal
TraceV1 provisional 34 fields · 0 stable · 34 provisional · 0 internal
FieldTypeLevel
idstring | nullprovisional
domainstring | nullprovisional
scanned_atstring | nullprovisional
tracedbooleanprovisional
whystring | nullprovisional
trace_idstringprovisional
root_span_idstringprovisional
traceparentstringprovisional
parentobject | nullprovisional
parent.span_idstringprovisional
parent.sourcestring | nullprovisional
parent.previous_trace_idstring | nullprovisional
scan_idstring | nullprovisional
started_atstring | nullprovisional
total_msnumber | nullprovisional
droppedintegerprovisional
recorded_throughanyprovisional
spansarrayprovisional
errorsarrayprovisional
errors.error_idstring | nullprovisional
errors.stagestring | nullprovisional
errors.span_idstring | nullprovisional
errors.errorstring | nullprovisional
findingsarrayprovisional
findings.codestring | nullprovisional
findings.decision_idstring | nullprovisional
findings.span_idstring | nullprovisional
findings.parent_span_idstring | nullprovisional
findings.parent_stagestring | nullprovisional
findings.readsnumber | nullprovisional
coverageobjectprovisional
slowestarrayprovisional
decisions_with_spansnumber | nullprovisional
notestring | nullprovisional
SpanV1 provisional 17 fields · 0 stable · 17 provisional · 0 internal
FieldTypeLevel
span_idstringprovisional
parent_span_idstringprovisional
stagestringprovisional
kindenumprovisional
start_msnumberprovisional
dur_msnumber | nullprovisional
statusenumprovisional
error_idstring | nullprovisional
codestring | nullprovisional
pathstring | nullprovisional
decision_idstring | nullprovisional
readsarrayprovisional
reads.experience_idstring | nullprovisional
reads.fetched_instring | nullprovisional
reads.stagestring | nullprovisional
reads.fetched_after_rulebooleanprovisional
parent_basisstring | nullprovisional
DisputeResolutionV1 provisional 76 fields · 0 stable · 76 provisional · 0 internal
FieldTypeLevel
resolution_idstringprovisional
kindconst "crawlcheck-dispute-resolution"provisional
vconst 1provisional
schemastring | nullprovisional
dispute_idstringprovisional
issued_atstringprovisional
issuerobjectprovisional
issuer.observerstring | nullprovisional
issuer.version_idstring | nullprovisional
issuer.version_tagstring | nullprovisional
issuer.keyobjectprovisional
issuer.key.kidstringprovisional
issuer.key.jwkobjectprovisional
issuer.key.published_instringprovisional
subjectobjectprovisional
subject.domainstringprovisional
subject.recordobjectprovisional
subject.findingobjectprovisional
subject.finding.codestringprovisional
subject.finding.pathstring | nullprovisional
subject.finding.fidstring | nullprovisional
subject.finding.decision_idstring | nullprovisional
subject.finding.titlestring | nullprovisional
subject.finding.severitynumber | nullprovisional
subject.finding.rule_revisionnumber | nullprovisional
disputeobjectprovisional
dispute.filed_atstringprovisional
dispute.groundenumprovisional
dispute.ground_textstring | nullprovisional
dispute.statementstringprovisional
dispute.ownershipobject | nullprovisional
dispute.ownership.methodstringprovisional
dispute.ownership.atstringprovisional
dispute.ownership.urlstring | nullprovisional
dispute.ownership.sha256string | nullprovisional
remeasurementobjectprovisional
remeasurement.replayobjectprovisional
remeasurement.replay.reproducesboolean | nullprovisional
remeasurement.replay.rulestring | nullprovisional
remeasurement.replay.readanyprovisional
remeasurement.replay.whystring | nullprovisional
remeasurement.replay.rule_revisionnumber | nullprovisional
remeasurement.replay.overstring | nullprovisional
remeasurement.observersarrayprovisional
remeasurement.observers.roleenumprovisional
remeasurement.observers.observer_idstringprovisional
remeasurement.observers.network_classstring | nullprovisional
remeasurement.observers.networkstring | nullprovisional
remeasurement.observers.atstring | nullprovisional
remeasurement.observers.finding_presentboolean | nullprovisional
remeasurement.observers.inputs_agreeboolean | nullprovisional
remeasurement.observers.methodstring | nullprovisional
remeasurement.observers.readingstring | nullprovisional
remeasurement.observers.sideobject | nullprovisional
remeasurement.observers.observationobject | nullprovisional
remeasurement.deadlinestring | nullprovisional
remeasurement.independent_wait_hoursnumber | nullprovisional
decisionobjectprovisional
decision.verdictenumprovisional
decision.verdict_textstring | nullprovisional
decision.effectenumprovisional
decision.effect_textstring | nullprovisional
decision.rulestring | nullprovisional
decision.tablestring | nullprovisional
decision.derived_bystring | nullprovisional
linksobjectprovisional
signatureobjectprovisional
signature.vconst 1provisional
signature.algconst "Ed25519"provisional
signature.kidstringprovisional
signature.overconst "resolution_sha256"provisional
signature.resolution_sha256stringprovisional
signature.messagestringprovisional
signature.sigstringprovisional
signature.signed_atstringprovisional
signature.canonicalstringprovisional
RulebookV1 provisional 22 fields · 0 stable · 22 provisional · 0 internal
FieldTypeLevel
okbooleanprovisional
kindconst "crawlcheck-rulebook"provisional
vconst 1provisional
generated_atstringprovisional
score_versionnumber | nullprovisional
schemastring | nullprovisional
countsobjectprovisional
counts.rulesintegerprovisional
counts.by_kindobjectprovisional
counts.by_familyobjectprovisional
counts.revisedintegerprovisional
counts.scoredintegerprovisional
scans_countedinteger | nullprovisional
severity_scalearrayprovisional
severity_scale.levelstringprovisional
methodobjectprovisional
method.revisionsstring | nullprovisional
method.sharestring | nullprovisional
method.gradestring | nullprovisional
rulesarrayprovisional
filterobject | nullprovisional
filter.codestring | nullprovisional
RuleV1 provisional 30 fields · 0 stable · 30 provisional · 0 internal
FieldTypeLevel
codestringprovisional
kindenumprovisional
familyobjectprovisional
family.idstringprovisional
family.labelstringprovisional
titlestring | nullprovisional
meaningstring | nullprovisional
severityobjectprovisional
severity.levelstring | nullprovisional
scoredbooleanprovisional
measured_onstring | nullprovisional
revisionobjectprovisional
revision.currentintegerprovisional
revision.revised_atstring | nullprovisional
fixobjectprovisional
fix.advicestring | nullprovisional
fix.effortstring | nullprovisional
fix.endpointstring | nullprovisional
share_of_scansobjectprovisional
share_of_scans.pctnumber | nullprovisional
share_of_scans.scansinteger | nullprovisional
share_of_scans.of_scansinteger | nullprovisional
share_of_scans.basisstringprovisional
linksobjectprovisional
links.selfstring | nullprovisional
links.apistring | nullprovisional
links.glossaryarrayprovisional
links.workflowstring | nullprovisional
links.lineagestring | nullprovisional
links.explain_templatestring | nullprovisional
FixOutcomesV1 provisional 48 fields · 0 stable · 48 provisional · 0 internal
FieldTypeLevel
okbooleanprovisional
kindconst "crawlcheck-fix-outcomes"provisional
vconst 1provisional
generated_atstringprovisional
cachedbooleanprovisional
receiptobjectprovisional
receipt.idstringprovisional
receipt.domainstringprovisional
receipt.verdictstring | nullprovisional
receipt.findings_clearedarrayprovisional
receipt.urlstringprovisional
receipt.anchorobjectprovisional
receipt.anchor.atstringprovisional
receipt.anchor.daystringprovisional
receipt.anchor.basisstringprovisional
windowobjectprovisional
window.daysintegerprovisional
window.beforeobjectprovisional
window.before.fromstring | nullprovisional
window.before.tostring | nullprovisional
window.afterobjectprovisional
window.after.fromstring | nullprovisional
window.after.tostring | nullprovisional
window.after.days_elapsedintegerprovisional
window.after.completebooleanprovisional
connectedintegerprovisional
usableintegerprovisional
seriesarrayprovisional
series.keystringprovisional
series.labelstringprovisional
series.sourcestringprovisional
series.modeenumprovisional
series.connectedbooleanprovisional
series.notestringprovisional
series.how_to_connectstring | nullprovisional
series.before | nullprovisional
series.after | nullprovisional
series.delta_per_daynumber | nullprovisional
series.pctnumber | nullprovisional
series.usablebooleanprovisional
series.whystringprovisional
not_measuredarrayprovisional
not_measured.keystringprovisional
not_measured.whystringprovisional
summarystringprovisional
readingstringprovisional
not_proofstringprovisional
how_to_citestringprovisional
OutcomeSideV1 provisional 6 fields · 0 stable · 6 provisional · 0 internal
FieldTypeLevel
fromstring | nullprovisional
tostring | nullprovisional
daysintegerprovisional
measuredintegerprovisional
sumnumberprovisional
per_daynumber | nullprovisional
ReceiptSideV1 stable 10 fields · 10 stable · 0 provisional · 0 internal
FieldTypeLevel
report_idstring | nullstable
scanned_atstring | nullstable
gradestring | nullstable
scorenumber | nullstable
score_versionnumber | nullstable
refusedbooleanstable
findingsnumber | nullstable
manifest_sha256string | nullstable
decision_rootstring | nullstable
trace_idstring | nullstable
MachineExperienceRecordV1 stable 28 fields · 23 stable · 4 provisional · 1 internal
FieldTypeLevel
venumstable
scanned_atstring | nullstable
recorded_atstringstable
observerobjectstable
observer.version_idstring | nullstable
observer.version_tagstring | nullstable
observer.score_versioninteger | nullstable
observer.meg_vintegerstable
observer.vantageobjectprovisional
observer.vantage.kindstringprovisional
observer.vantage.colostring | nullprovisional
identity_basisstringstable
representationstringstable
stored_meansstringstable
request_profilesobjectprovisional
experiencesarraystable
rootsobjectstable
roots.vintegerstable
roots.recipestringinternal
roots.experiencesobjectstable
roots.experiences.nintegerstable
roots.experiences.rootstringstable
roots.decisionsobjectstable
roots.decisions.nintegerstable
roots.decisions.rootstringstable
roots.lineageobjectstable
roots.lineage.nintegerstable
roots.lineage.rootstringstable
ExperienceV1 stable 14 fields · 12 stable · 2 provisional · 0 internal
FieldTypeLevel
experience_idstringstable
roleenumstable
identitystringstable
urlstringstable
final_urlstring | nullstable
statusinteger | nullstable
content_typestring | nullstable
bytesintegerstable
sha256string | nullstable
storedenumstable
request_profilestring | nullstable
observed_atstring | nullstable
errorstring | nullprovisional
viastring | nullprovisional
ManifestSignatureV1 stable 10 fields · 9 stable · 0 provisional · 1 internal
FieldTypeLevel
vintegerstable
algconst "Ed25519"stable
kidstringstable
key_storagestring | nullinternal
overconst "manifest_sha256"stable
messagestringstable
sigstringstable
signed_atstringstable
key_directorystringstable
verifystringstable

Something you rely on is provisional or internal and you want it promoted? Write to hello@crawlcheck.io. Promotion is one-way: a field never moves from stable back to provisional.