Verification

Verify a credential

Verify a single credential by its public ID. Returns the frozen verification response schema.

get/verify/{publicId}

Request

  • Base URL: https://app.arkova.ai/api/v1
  • URL: https://app.arkova.ai/api/v1/verify/{publicId}
  • Auth: one of:
    • HTTP bearer
    • API key in header X-API-Key
    • none

Path parameters

publicIdstring required

The public ID of the credential (e.g., ARK-2026-TEST-001)

Response

Verification result

verifiedboolean required
status'ACTIVE' | 'REVOKED' | 'SUPERSEDED' | 'EXPIRED' | 'PENDING' | 'SUBMITTED'
issuer_namestring
recipient_identifierstring

Hashed identifier, never raw PII

credential_typestring
issued_datestring date-time nullable
expiry_datestring date-time nullable
anchor_timestampstring date-time nullable

Network Observed Time: the moment the Bitcoin network observed this anchor. Measured from the confirmed block, NOT the time the record was created in Arkova (the two differ by the confirmation interval). Semantic search retains this key with null when no observation exists; exact-id verification omits it in that case. Not asserted: anything about the content, authenticity, or legal effect of the underlying document.

bitcoin_blockinteger nullable
network_receipt_idstring nullable
merkle_proof_hashstring nullable
record_uristring uri
jurisdictionstring

Omitted when null, never returned as null

descriptionstring

Immutable credential description, omitted when not present

proof_availability'per_document' | 'root_only'

SCRUM-2575. Whether a per-document proof can actually be retrieved for this record. per_document = a per-document inclusion branch is stored and GET /verify/{publicId}/proof returns it. root_only = no per-document branch is stored; the fingerprint is committed on-chain via the referenced anchor receipt, but no self-contained offline proof bundle is available. Measured from stored proof data — never derived from status. Omitted (never null) for records that have not reached a settled on-chain state (PENDING / SUBMITTED). Additive field (Constitution 1.8); no API version change.

proof_availability_notestring

SCRUM-2575. Omitted when not applicable, never returned as null. Present exactly when proof_availability is. States what is measured, what is asserted, and what is NOT asserted for that class (Constitution 1.5) — in particular, for root_only records, that no self-contained per-document offline proof is available, and that its absence is not evidence the record is invalid.

compliance_controlsstring[] nullable

API-RICH-01 regulatory control IDs mapped to this anchor. Informational metadata only — see compliance_controls_note, which is always present alongside this field and states what these identifiers do NOT assert. OMITTED for records that are not a current anchored credential (REVOKED / EXPIRED / SUPERSEDED / not yet anchored): these identifiers describe a live compliance posture, so listing them for such a record would assert something Arkova does not hold (BUG-2026-06-24-007). Absence is not a statement that the record was never anchored — the anchor receipt fields are unaffected.

compliance_controls_notestring

SCRUM-2227. Omitted when not applicable, never returned as null. Present whenever compliance_controls is present, absent otherwise. States that control identifiers are a credential-type mapping and NOT an audit, certification, conformity assessment, or attestation — in particular that no identifier asserts qualified status under eIDAS. Additive nullable field (Constitution 1.8); no API version change.

chain_confirmationsinteger nullable

API-RICH-01 Bitcoin block confirmations at anchor time.

parent_public_idstring nullable

API-RICH-01 public ID of the parent anchor; internal UUIDs are never exposed.

version_numberinteger nullable

API-RICH-01 version in this anchor lineage; omitted when equal to 1.

revocation_tx_idstring nullable

API-RICH-01 Bitcoin transaction ID of the revocation when status is REVOKED.

revocation_block_heightinteger nullable

API-RICH-01 Bitcoin block height at which revocation was anchored.

file_mimestring nullable

API-RICH-01 source document MIME type.

file_sizeinteger nullable

API-RICH-01 source document size in bytes.

confidence_scoresobject nullable

API-RICH-02 per-field confidence scores from the latest extraction manifest.

sub_typestring nullable

API-RICH-02 fine-grained credential subtype from anchors.sub_type.

errorstring

Example response

{
  "compliance_controls": [
    "SOC2-CC6.1",
    "GDPR-5.1f",
    "FERPA-99.31"
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.