Skip to content

Prove it later

Everything Planisphere seals is built to be re-checked by someone who does not trust you — or us. This page is the export-and-verify path: pull the records for a period, bundle them, and verify the bundle anywhere.

Export a time range

GET /tenant/exports/records?from=&to=&cursor= returns the sealed records for a period. Filters are always applied — unknown query parameters are rejected, never silently ignored — so an export is exactly what you asked for.

curl -sS "https://api.planisphere.ooo/tenant/exports/records?from=2026-07-01T00:00:00Z&to=2026-08-01T00:00:00Z" \
  -H "X-Planisphere-Key: ps_live_YOUR_KEY"

Page through with cursor until it comes back empty, collecting each record's action_key.

Bundle the evidence

POST the action keys to POST /evidence-packets/seal-bundle/batch as a wrapped object — {"action_keys": [...]}, unlike the bare array POST /v1/record/batch takes — and you get one offline-verifiable evidence package for the whole set:

curl -sS -X POST https://api.planisphere.ooo/evidence-packets/seal-bundle/batch \
  -H "X-Planisphere-Key: ps_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action_keys":["law:proposed-action:…","eu-ai-act:record:…"]}'

Verify — three ways

  1. Online: POST /v1/verify with a record's verify request — every seal check itemized: signature, hashes, and key identity, each recomputed. The gate/review/record response carries an in-band verify_request, and quickstart step 5 walks the whole round trip.
  2. Offline, on your own machine: from SDK 0.3.0, verify_local(receipt, keys) (Python) and verifyLocal(receipt, keys) (TypeScript) recompute every check with no network call, against a saved copy of the published keys. The seal contract writes out the exact rules (canonical JSON, the signed fields of each contract version, Ed25519) with test vectors, so an auditor can write their own verifier and check it. GET /v1/verify/kit links to both.
  3. In the console: paste one receipt or evidence_packet.json into the console's Verify page. It runs the same POST /v1/verify check as option 1, without an account or API key.

The trust anchor is public: /.well-known/planisphere-keys.json publishes the signing keys, so verification never depends on asking Planisphere whether Planisphere is honest.

Payload retention

Planisphere stores hash commitments for a record's payload — it never holds your content in readable form unless your workspace opts in; content you choose to attach is ciphertext under keys you keep. Retain your payload to re-prove WHAT was recorded; the sealed record proves THAT it happened and that nothing was altered. Every record response repeats this in its payload_retention field.