SilvectorDocs
Silvector docsReferenceUpdated 2026-11-07

Reference

API reference

The public, unauthenticated routes. Every schema on this page is generated from the OpenAPI document, and CI checks that document against the running API handler.

Coming next

The console API (tenants, policies, decisions, evidence) is published by the console lane as docs/api/console-v1.openapi.json. When it lands in the repository, this page includes it automatically.

Generated from apps/docs/openapi/public-api.openapi.json (Silvector public API, version 2026-11-07).

POST /v1/check

Decide one request shape and return a signed receipt

Runs the request shape through the public policy for tenant try. Rate limited to 60 requests a minute per caller. A signature field in the JSON body is ignored; only HTTP message signatures on the request can verify an agent.

Request
curl -s https://api.silvector.com/v1/check \
  -H 'content-type: application/json' \
  -d '{"method":"GET","path":"/pricing"}'
Node 20+
const res = await fetch("https://api.silvector.com/v1/check", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ method: "GET", path: "/pricing" }),
});
const { outcome, ruleId, receipt } = await res.json();
Python 3.9+
import json, urllib.request
req = urllib.request.Request("https://api.silvector.com/v1/check",
    data=json.dumps({"method": "GET", "path": "/pricing"}).encode(),
    headers={"content-type": "application/json"})
decision = json.load(urllib.request.urlopen(req))
Go 1.22+
res, err := http.Post("https://api.silvector.com/v1/check", "application/json",
	strings.NewReader(`{"method":"GET","path":"/pricing"}`))

No authentication. Up to 60 requests a minute per caller address, counted by each Worker instance; over that, 429. To verify the receipt, follow a quickstart.

Request body · CheckRequest

FieldTypeDescription
methodstringHTTP method of the request being decided. Defaults to the method of this call.
pathstringPath of the request being decided.
userAgentstringUser-Agent claim of the request being decided. Defaults to this call's User-Agent.
ipstringClient address of the request being decided. Defaults to this call's address.
promptstringPrompt text, for routes that carry one.
toolstringTool name, for agent tool calls.
signaturestringIgnored. Present only so the response can say it was ignored.

Responses

StatusMeaningBody
200Allowed or otherwise decided without an error status.CheckResponse
401Decided step_up.CheckResponse
403Decided deny, for example a spoofed operator.CheckResponse
429Rate limited.none
503The deployed API has no receipt signing key, so nothing is decided or signed. The body carries `error: signing_key_missing` when the API layer answers; it can be empty.Problem

Example response REPLAY

Recorded from https://api.silvector.com on 2026-11-07. Outcome allow, rule allow.default.

200 application/json
{
  "status": 200,
  "outcome": "allow",
  "ruleId": "allow.default",
  "verdict": "not_identified",
  "reason": "no_claim",
  "method": "none",
  "ignoredSignatureField": false,
  "receiptId": "a2d418a873a3b2a1d575a3cdcea89eef2004d996776cf75973fcf7d2fdc1e093",
  "receipt": {
    "body": {
      "v": "ag47.receipt.v1",
      "ts_edge": 1794073836000,
      "tenant": "try",
      "agent_kid": "edge-receipt",
      "delegation": null,
      "action_hash": "d7777da76fba8007e1516a9cdb3ce3e9ee031f774c47bb510f9b3639f87b6253",
      "policy_bundle_hash": "2f0edd22bc9aab7b6727c1011b973730e7132c40c74af8bbf9cf8c667c9d2c46",
      "flag_state_hash": "cf67de135395834ad2a0d41915e8cf3f6769fd5748d00dcc2a562974ce08c45b",
      "outcome": "allow",
      "rule_id": "allow.default",
      "prev": "0000000000000000000000000000000000000000000000000000000000000000",
      "bypass": false,
      "applied_outcome": "allow",
      "computed_outcome": "allow",
      "verification": "not_identified"
    },
    "sig": "vL1Iy9MUGhUEdBojuZV3dfUW13ICR20eYhroOzqmceZwBx648oN6ZhHsy0GhiHvHqZFxaxhjQ1ieg4a9I24kCA"
  }
}
Evidence grade Rung 2 · Operational
Covers
Which rule decided this request and that the record was not changed after signing. Not whether the sender was an AI agent.
Confidence
None stated. No calibrated confidence applies to this record.
Calibration
Uncalibrated
Known error rates
None measured. Silvector publishes no detection error rate yet.
Basis
  • Deterministic decide() rule allow.default
  • Ed25519 signature over the canonical receipt body, checked against the published JWKS
Bias risks
  • The decision is only as good as the facts it was given. A request with no signature claim is not_identified, which is not a finding that a person or an agent sent it.
Next step
To ask who was behind a series of requests, keep the receipts and escalate to rung 3 with at least two independent signal families. How escalation works
Assigned by
These docs, from the rung definitions. The grade is not a signed field of the receipt.

GET /.well-known/jwks.json

Public keys that verify receipts and log heads

Request
curl -s https://api.silvector.com/.well-known/jwks.json

Responses

StatusMeaningBody
200The key set.Jwks
503The deployed API has no receipt signing key, so nothing is decided or signed. The body carries `error: signing_key_missing` when the API layer answers; it can be empty.Problem

Example response REPLAY

200 application/json
{
  "keys": [
    {
      "kty": "OKP",
      "crv": "Ed25519",
      "x": "-cOD_m33YIDM5Z096uppcsj2I_M3VdSXAmvb8ofSQ4c",
      "kid": "edge-receipt",
      "use": "sig"
    },
    {
      "kty": "OKP",
      "crv": "Ed25519",
      "x": "BobpKJc-Yj1n2DYUeBPMzO5NVX3gXGDk8PboyWBxuLQ",
      "kid": "identity",
      "use": "sig",
      "alg": "EdDSA"
    }
  ]
}

GET /.well-known/transparency

Signed tree head over placeholder leaves and recent receipt hashes, with one inclusion check and one consistency check

The leaves are four fixed placeholders followed by hashes of recent /v1/check receipts, appended on a best-effort basis. On the API Worker each data center keeps its own leaf list in its cache for up to six hours; the list stops growing at 64 leaves and is not stored durably, so two requests can return different heads. The inclusion check is for the first placeholder leaf, not for a receipt. Keys: the edge-receipt key in the JWKS on staging.

Request
curl -s https://api.silvector.com/.well-known/transparency

Responses

StatusMeaningBody
200The current log head.TransparencyHead
503The deployed API has no receipt signing key, so nothing is decided or signed. The body carries `error: signing_key_missing` when the API layer answers; it can be empty.Problem

GET /.well-known/transparency/inclusion

An inclusion check for one leaf of a separate four-leaf sample log

This route signs its own fixed four-leaf sample tree, not the head at /.well-known/transparency, so its tree head does not match that one. It says nothing about receipts.

Request
curl -s https://api.silvector.com/.well-known/transparency/inclusion

Responses

StatusMeaningBody
200The audit path and the tree head it is checked against.InclusionCheck

GET /health

Service identity, build and flag snapshot

Request
curl -s https://api.silvector.com/health

Responses

StatusMeaningBody
200The service is answering.Health

Schemas

CheckRequest

FieldTypeDescription
methodstringHTTP method of the request being decided. Defaults to the method of this call.
pathstringPath of the request being decided.
userAgentstringUser-Agent claim of the request being decided. Defaults to this call's User-Agent.
ipstringClient address of the request being decided. Defaults to this call's address.
promptstringPrompt text, for routes that carry one.
toolstringTool name, for agent tool calls.
signaturestringIgnored. Present only so the response can say it was ignored.

CheckResponse

FieldTypeDescription
status requiredintegerThe HTTP status the decision maps to.
outcome required"allow" | "meter" | "price" | "edit" | "step_up" | "deny" | "throttle" | "tarpit" | "decoy"
ruleId requiredstring
verdict required"verified" | "verification_failed" | "not_verifiable" | "not_identified"
reason requiredstringWhy the identity verdict is what it is.
method requiredstringHow the identity claim was checked.
ignoredSignatureField requiredboolean
rangesobjectState of the operator range snapshot used for the check.
receiptId requiredstringsha256 of the canonical receipt body followed by the signature, hex.
receipt requiredSignedReceipt

SignedReceipt

FieldTypeDescription
body requiredReceiptBody
sig requiredstringbase64url Ed25519 signature over the canonical JSON of body.

ReceiptBody

FieldTypeDescription
v required"ag47.receipt.v1"
ts_edge requiredintegerDecision time, Unix milliseconds.
tenant requiredstringTenant stream. try for /v1/check.
agent_kid requiredstringKey id that signed the receipt.
delegation requiredstring | nullOn-behalf-of chain, or null.
action_hash requiredstringsha256 of method, path, authority and request id.
policy_bundle_hash requiredstring
flag_state_hash requiredstring
outcome required"allow" | "meter" | "price" | "edit" | "step_up" | "deny" | "throttle" | "tarpit" | "decoy"
rule_id requiredstring
prev requiredstringHash of the previous receipt in this tenant stream, or 64 zeros.
bypass requiredboolean
verification"verified" | "verification_failed" | "not_verifiable" | "not_identified"
applied_outcome"allow" | "meter" | "price" | "edit" | "step_up" | "deny" | "throttle" | "tarpit" | "decoy"
computed_outcome"allow" | "meter" | "price" | "edit" | "step_up" | "deny" | "throttle" | "tarpit" | "decoy"
computed_rule_idstring
directory_hashstring
signal"replay_detected_async"
caepstring
range_source"published" | "bundled"
range_liststring
range_fetched_atstring

Outcome

"allow" | "meter" | "price" | "edit" | "step_up" | "deny" | "throttle" | "tarpit" | "decoy"

Verification

"verified" | "verification_failed" | "not_verifiable" | "not_identified"

Jwks

FieldTypeDescription
keys requiredobject[]

TransparencyHead

FieldTypeDescription
v required"ag47.transparency.v1"
sth requiredSignedTreeHead
inclusionInclusionCheck
consistencyobjectOne consistency check between two sizes of the log. Not described field by field here; see packages/transparency/src/log.ts.

Health

FieldTypeDescription
service requiredstring
sha requiredstringBuild commit.
product requiredstring
signing required"secret" | "test" | "missing"secret when receipts are signed with the deployed key, test in local development with built-in test keys, missing when a deployed API has no key.
flags requiredobject

SignedTreeHead

FieldTypeDescription
body requiredobject
sig requiredstringbase64url Ed25519 over the canonical JSON of body.
keyLabel requiredstring

InclusionCheck

FieldTypeDescription
kind required"inclusion"
keyLabel requiredstring
leaf_b64 requiredstringThe leaf, base64.
leaf_index requiredinteger
tree_size requiredinteger
audit_path requiredstring[]
sth requiredSignedTreeHead

Problem

FieldTypeDescription
errorstring