Sato Hub
Schemas

Sato Hub data formats

Versioned JSON Schemas for every format Sato Hub publishes, free to validate against and reuse.

  • Schemas21
  • JSON Schema2020-12
What a schema coversShowHide

Every machine-readable shape Sato Hub emits is written as JSON Schema (draft 2020-12) at a stable URL. Point a validator at one and check our output, or your own. The formats are yours to implement.

A schema validates structure and nothing else. Nothing here blesses anything: a Sato Score measures how open, active and verifiable a project is, a verified install records that a documented install was reproduced in a container on a date, and a null means unknown rather than zero.

Stability

v1 is additive-only: new optional properties may appear, but an existing property never changes meaning, type or nullability and is never removed. A breaking change is published as v2 at a new URL and v1 keeps serving. Validate with additional properties allowed.

Validate with additional properties allowed. A consumer pinned to v1 must not start failing the day a field is added, which is why every response schema is open and only the sato.deploy manifest — a document other people author, where an unknown key is more likely a typo than a feature — is closed.

Check one

curl -s https://satohub.ai/schemas/export-listing/v1.json -o export-listing.json
curl -s https://satohub.ai/api/export/index.json | jq '.resources[0]' > sample.json
npx ajv-cli validate -s export-listing.json -d sample.json --spec=draft2020

The whole catalogue in one request: https://satohub.ai/schemas/index.json.

The formats

Export listing

v1

One catalog listing as the free export publishes it — identity, links, chains, standards, score, liveness and deploy manifest. Catalog facts only: no score history, no provenance, no commercial fields, and a score is never a safety or quality judgment.

Schema
https://satohub.ai/schemas/export-listing/v1.json
Sample
/api/export/index.json
Announced by
a $schema property in the body

Change feed

v1

The delta a mirror polls instead of re-downloading the catalog: added, updated, changed and removed, with the baseline date to store as a cursor. It is a notification feed, not a guaranteed-complete replication log, and every response says which lanes are approximate.

Schema
https://satohub.ai/schemas/change-feed/v1.json
Sample
/api/changes?since=2026-09-01
Announced by
a $schema property in the body

sato.deploy manifest

v1

The minimal manifest for standing a resource up: runtime, install, entry, requirements, and whether the documented install was reproduced in a container. deploy_status records deployability on a date; it is never a safety, quality or audit claim.

Schema
https://satohub.ai/schemas/deploy-spec.json
Sample
/api/export/index.json
Announced by
the document's own top-level version field

Agent Passport manifest

v1

The machine-readable passport for one registered agent: identity, declared stack, links, payment metadata and on-chain checks. Registration is self-declared, and a verified wallet proves control of a key rather than anything about the product behind it.

Schema
https://satohub.ai/schemas/agent-manifest/v1.json
Sample
/api/agents/{slug}/manifest
Announced by
a $schema property in the body

Preflight verdict

v1

The one call before an agent installs, connects to or pays something: a verdict, the rule that decided it, and every evidence line it rests on. A verdict is a reading of public evidence — go is not a clearance, and unknown is a real answer that is never rounded.

Schema
https://satohub.ai/schemas/preflight-verdict/v1.json
Sample
/api/preflight?package=solana-agent-kit
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Sato Route receipt

v1

The record of one quoted route and, when a caller reports it back, the transaction that carried it. It is an observation, not revenue: the fee is a parameter we sent, amounts are base-unit strings, and receipts must not be summed and called income.

Schema
https://satohub.ai/schemas/route-receipt/v1.json
Sample
/api/route/receipt
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Signed response envelope

v1

The envelope shared by every signed Sato Hub response: the payload plus meta.signature, with the header signature covering the exact bytes. A null signature means the deployment had no key — unsigned is published as unsigned, never as a placeholder.

Schema
https://satohub.ai/schemas/signed-envelope/v1.json
Sample
/api/export/score-inputs.json
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Build plan

v1

A grounded stack for a stated goal: components with their scores, deploy manifests and Preflight verdicts, matching skills with their disclosures, the gaps, and one first action. A recommendation read off public evidence — the gaps are part of the answer, not a failure of it.

Schema
https://satohub.ai/schemas/build-plan/v1.json
Sample
/api/satobot/plan
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Skill disclosure

v1

One agent skill with a static disclosure of what its own text declares: hosts contacted, key generation, credential requests, tool grants. A disclosure describes and never clears; an empty flag list means nothing matched, and a registry's scan belongs to that registry.

Schema
https://satohub.ai/schemas/skill-disclosure/v1.json
Sample
/api/export/skills.json
Announced by
a $schema property in the body

Sato Score inputs

v1

Every input the Sato Score is computed from, with the instant the published scores were computed against, so anyone can run the rubric and check our arithmetic. Score it at a later instant and the number legitimately differs — as_of is what makes a reproduction comparable.

Schema
https://satohub.ai/schemas/score-inputs/v1.json
Sample
/api/export/score-inputs.json
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Sato Score roots

v1

One Merkle root per UTC day over the scores published that day, with the exact leaf and node construction and an optional on-chain anchor. A root proves what was published and when; it proves nothing about whether a score is right.

Schema
https://satohub.ai/schemas/score-roots/v1.json
Sample
/.well-known/sato-score-roots.json
Announced by
the document's own top-level version field

Sato Swap quote

v1

The answer to one swap request: the venue chosen, the fee disclosed verbatim, the four gate verdicts, the simulation, and either an unsigned transaction or the reason one was withheld. Sato Hub holds no keys and signs nothing; `unknown` refuses by default, and a withheld transaction names the lane that could not be read.

Schema
https://satohub.ai/schemas/swap-quote/v1.json
Sample
/api/swap/quote
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Sato Swap receipt

v1

The public record of one swap decision: the quote, the policy that decided it, the gate verdicts and their digest, and whether the recipient holds a Passport. It is not a claim the trade filled or that anything is safe, and one row is one decision — never a volume figure.

Schema
https://satohub.ai/schemas/swap-receipt/v1.json
Sample
/api/swap/receipts/{route_id}
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Sato Hub release manifest

v1

The public signed record of one published agent package: its file digest, archive byte length, recipe, license and evidence freshness, checkable offline with /verify-release.mjs. A pass means the bytes are what Sato Hub sealed and signed; it is not a review of the code and says nothing about safety or results.

Schema
https://satohub.ai/schemas/release/v1.json
Sample
/api/listings/{slug}/manifest
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Sato Check custody profile

v1

What a package, MCP server, skill, repo or x402 endpoint can do with an agent's keys and funds: does it take the key, does the key leave, can it move funds on its own, what changed — each reading with its evidence class and date. A profile describes what was read and run; it is not a safety rating, and unknown is a real answer.

Schema
https://satohub.ai/schemas/custody/v1.json
Sample
/api/check?target=npm:viem
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Site facts

v1

The public counts every Sato Hub surface quotes — listings, chains, scored and independently checked listings, MCP tools — each with the as_of date of the data behind it. A count describes the catalogue, not our traffic, and is never a judgment of anything counted.

Schema
https://satohub.ai/schemas/facts/v1.json
Sample
/api/facts.json
Announced by
a $schema property in the body

Sato Scan recipient reading

v1

The answer to one pre-payment recipient check: the token, look-alike, declared-payee, mark and targeting answers, the S-rule that decided the verdict, and the limits of what was read. It describes what was found inside those limits; `unknown` means no record, never an all-clear, and `go` means declared, canonical and nothing found.

Schema
https://satohub.ai/schemas/scan-recipient/v1.json
Sample
/api/scan/recipient
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Sato Scan address reading

v1

What Sato Scan has on record for one address: marks, campaign ids, declared identities and the roles it holds on the watchlist, with first and last seen. Stored records only; an empty reading means nothing is on record, not that nothing has happened.

Schema
https://satohub.ai/schemas/scan-address/v1.json
Sample
/api/scan/address?chain=Base&address=0x833589fcd6edb6e08f4c7c32d4f71b54bda02913
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Sato Hub token resolution

v1

What an address, a Solana mint or a link from a supported site is: chain, address, name, symbol, decimals, token program, the main pool and its own liquidity, the USD price, and on Solana the mint's authorities and Token-2022 extensions. Every figure names its source and date, and a null names why. It describes; it recommends nothing and says nothing about safety.

Schema
https://satohub.ai/schemas/token-resolve/v1.json
Sample
/api/token/resolve?input=0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed&chain=base
Announced by
a Link: <url>; rel="describedby" response header — the body is signed, so a property would change bytes a verifier was told to hash

Sato Scan finding

v1

One detector finding: the wallet it concerns, the look-alike or counterpart, the transaction that shows it, the detector and its method version. A finding describes an observed pattern in public ledger data; it is not a judgment of anyone's intent.

Schema
https://satohub.ai/schemas/scan-finding/v1.json
Sample
/schemas/scan-finding/v1.json
Announced by
the document's own top-level version field

Sato Scan screened reading

v1

One screened reading of a wallet or token: what was read, over which window and chains, and what was found inside those limits. Not finding anything is not a statement that nothing exists.

Schema
https://satohub.ai/schemas/scan-reading/v1.json
Sample
/schemas/scan-reading/v1.json
Announced by
the document's own top-level version field

Reusing them

These formats are published so other tools can adopt them, not only so ours can be checked. Copy them, implement them, disagree with them in public. If a schema and the live response disagree, that is our bug — the transparency report is where corrections land.

The methods behind the signed formats are written down too: the sato.deploy manifest and Sato Swap — what is checked, what a verdict means, the fee per venue, and exactly which fields a receipt signature binds.