Skip to content

Proof format

The canonical full-proof response is ProofBundle from GET /v1/bundle/{hash}:

ProofBundle {
  signed_attestation: SignedAttestation,
  batch_inclusion: BatchInclusion | null,
  cross_anchors: CrossAnchor[],
  external_anchors: ExternalAnchorProof[]
}

signed_attestation is required. batch_inclusion is null until the attestation is batched. The arrays default to empty.

Nested fields

BatchInclusion has batch and merkle_proof. AttestationBatch has id, network_id, merkle_root, period_start, period_end, and attestation_count. MerkleProof has leaf, siblings, leaf_index, tree_size, and root.

CrossAnchor has batch, witnessing_network, witness_attestation, and timestamp. The peer's signed attestation commits to the batch Merkle root.

ExternalAnchorProof has provider, timestamp, provider-specific JSON proof, and optional anchored_data. Provider values are internet_archive, trillian, dns_txt, and blockchain.

Signed-attestation union

Ed25519 multi-signatures use:

{"signatures":[{"witness_id":"w1","signature":"<hex>"}]}

BLS aggregation uses:

{"signature":"<hex>","signers":["w1","w2"]}

The union is discriminated by key presence. Do not send both shapes or only one of signature and signers. The shape must match the network scheme. Fixed byte arrays and signatures are lowercase hex strings in the documented wire format. See OpenAPI for required properties and the complete schemas.

An external-anchor record's presence is not provider verification. The verify-proof path verifies the home signature, optional batch linkage, and available cross-anchors, but only counts external-anchor records.