Gravit Verifier API

The same verifier as the open source code and the sandbox, hosted for you. Every decision comes with a receipt signed by the service and chained to your previous receipts, so your auditor can check the whole history offline, without trusting us.

Free API key. Enter your email and confirm it with one click: the key (free plan, 1,000 calls per month) arrives by email at once. Confirmed earlier but no key? Request it here; it goes only to your confirmed inbox.

Paid plans: see below. The built in registry uses test keys; bring your own registry for real use.

Plans

PlanCalls per monthPrice per 30 daysOne year in advance (launch price)
Free1,000CHF 0CHF 0
Pro100,000CHF 7 (about USD 8.50 / EUR 7.55)CHF 60 (CHF 5 a month) (about USD 73 / EUR 65)
Enterprise10,000,000CHF 150 (about USD 182 / EUR 162)CHF 1,440 (CHF 120 a month) (about USD 1,748 / EUR 1,553)
Customas agreedYour own servers, a second operator, custom rules and service levels: our contact form

Paid in Bitcoin through BTCPay Server, straight to the Foundation's own wallet. Prices are in Swiss francs; USD and EUR amounts are approximate (ECB rate of 16 October 2026). No VAT is charged: the Foundation, a Swiss association, is not VAT registered. Paying extends your plan by 30 days per month bought, or by 365 days for a year; your key stays the same. A confirmation comes from our contact form; write there with any question about payment.

Money-back guarantee: not satisfied? Write to us through our contact form within 30 days of payment and we refund the full amount in Bitcoin. No questions asked.

1. Decide an artifact

curl https://gravitverifier.space/api/v1/verify \
  -H "Authorization: Bearer $GRAVIT_API_KEY" -H "Content-Type: application/json" \
  -d '{"artifact": {"artifact_id": "payment-4711", "claimed_state": "Verified Fact",
       "context": {"evaluation_time": "2026-10-13T12:00:00Z", "freshness_max_age_seconds": 300},
       "evidence": [ ...signed evidence records... ]}}'

The response contains result.decision (state, status, reason, decision_id), result.explanation (rules and revisions applied, what independence rests on), result.graviteron, and the receipt with its signature.

Graviteron next to the decision says how strongly the counted evidence supports the claim (expected, from 0 to 1) and how much evidence stands behind it (uncertainty; 1 means none). Keys of one operator count as one source. For now every operator is trusted equally, so the calibration of this number is not yet established; the decision itself does not depend on it. Method: evidence-measure.md.

2. Python

pip install "git+https://github.com/gravit-open-network-foundation/gravit-verifier-service#subdirectory=sdk/python"

from gravit_verifier_client import Client, verify_response, verify_export
gv = Client("gv_...")
res = gv.verify(artifact)
print(res["result"]["decision"]["final_epistemic_state"])

key = gv.service_key()                       # pin it once
print(verify_response(res, key, artifact))   # signature, result hash, request hash
print(verify_export(gv.export(), key))       # every receipt signed, chain unbroken

3. TypeScript

import { Client } from "gravit-verifier-client";   // source: sdk/typescript in the repository
const gv = new Client(process.env.GRAVIT_API_KEY);
const res = await gv.verify(artifact);
console.log(res.result.decision.final_epistemic_state, res.result.decision.status);

Endpoints

EndpointWhat it does
POST /api/v1/verifyDecide an artifact. Optional registry: your own verifier registry, its root signatures and trust root.
GET /api/v1/decisionsYour decision history (limit, before_seq).
GET /api/v1/decisions/{decision_id}One decision with its receipt.
GET /api/v1/exportAll your receipts, signed and hash chained: hand this to your auditor.
GET /api/v1/usagePlan and use in the current month.
GET /api/v1/service-keyThe service's Ed25519 public key. No API key needed.
POST /api/v1/gateCapability Gate: may this capability be used for this exact action? Fail closed, with a receipt.
GET /api/v1/statusHealth and component versions. No API key needed.
GET /api/v1/openapi.jsonOpenAPI 3.1 description of the API. No API key needed.

Capability Gate

For AI agents: list what is allowed, what is on the frontier and needs proof, and what is forbidden. Anything not listed is unknown and blocked. A frontier capability is permitted for one action only, when you pass the decision_id of a Verified Fact from /verify whose artifact_id is that action's hash.

g = gv.gate("pay", {"revision": "r1", "allowed": ["read"], "frontier": ["pay"], "forbidden": ["wipe"]},
            action={"to": "acct_42", "amount": 250})
h = g["result"]["gate"]["action_hash"]      # use as artifact_id when you verify the evidence
res = gv.verify({"artifact_id": h, "claimed_state": "Verified Fact", "evidence": [...]})
g = gv.gate("pay", policy, action={"to": "acct_42", "amount": 250}, decision_id=res["receipt"]["decision_id"])
print(g["result"]["gate"]["permitted"])     # True only for a Verified Fact about this exact action

Specification and tests: capability-gate.

Receipts you can check yourself

  • The service passes your request to the verifier byte for byte, so signed numbers keep their exact form; request_sha256 records what was decided.
  • result_sha256 covers the exact result you received. The service signs the receipt with Ed25519.
  • Each receipt names the hash of the one before it. Removing or changing any entry later breaks the chain, and verify_export reports it.
  • The decision itself is reproducible: run the same artifact through the open source verifier at the same version and you get the same decision_id.

Source

Service and clients: gravit-verifier-service. Verifier: verifier. Licence Apache-2.0.