Reference
Changelog and versions
Current model versions and the change policy.
Current versions
| Surface | Version |
|---|---|
| API envelope | v1 (field names frozen) |
| Score model | identity_score_v1 |
| Decision model | decision_v0.4.1 |
| Stats endpoint | stats_v0.1 |
Every decision response carries version, scoreModelVersion and decisionModelVersion so you can pin behavior. Receipts keep the model versions they were minted with.
Change policy
Additive changes (new fields, new codes) can land in v1 without notice. Breaking changes go to v2. Reason and warning code lists can grow; treat unknown codes as informational rather than failing.
2026-08
- Interaction Graph nodes now carry per-currency native value: every measured node's
metricsincludes a required non-emptyvaluearray of exact native-unit decimal strings, in and out per symbol, with ETH pooled across Ethereum, Base and Arbitrum while POL and BNB stand alone. Only direct native transfers count (token transfers and contract-internal movements do not). Value follows the samelowerBoundandbasishonesty as counts, Arc evidence contributes nothing andcapabilities.valuenow readstrue. Additive in v1 and score-neutral. - TypeScript SDK published to npm as
@kyrodev/sdk(v0.1.0, MIT): all ten v1 operations, zero runtime dependencies and dual ESM and CJS builds. Install withnpm install @kyrodev/sdk; the SDK page covers usage. - Safe integration guide published at /safe-integration: the decision-first flow, cache status semantics, honest interaction graph reading (
metrics: nullvs an empty graph,lowerBoundandbasis) and refresh discipline (key-only, single-flight, poll the read instead of re-POSTing) in one page. - Interaction Graph endpoints join the API reference:
GET /api/v1/interaction-graph/{wallet}reads the observed, score-neutral counterparty graph from persisted snapshot evidence, and keyedPOST /api/v1/interaction-graph/{wallet}/refreshre-indexes a wallet through the same pipeline as intake. The documented v1 surface now spans 10 operations; the launch entry below reflects the original 8. - Interaction Graph nodes carry a required, nullable
metricsobject: transaction count, in/out direction and first/last interaction, with alowerBoundflag and a per-chainbasisreporting completeness.sort=activityopts into an observed-activity ranking (transaction count, then recency, then address) returned as a single page. Ranking is observational only, never endorsement, and never affects score. - Anonymous intake repriced from 20 units to 8. Anonymous callers can now start up to two scans per minute and still have budget left to poll decisions in the same window, which unblocks batch flows that previously stalled behind a fully drained minute. Keyed pricing (5 units), the anonymous daily cap (25 scan starts per IP) and the 10-minute per-wallet cooldown are unchanged.
- Intake economics hardening: starting a scan now costs 20 units anonymously (5 with any API key) and scan starts are capped per UTC day (25 per IP anonymous, 200 developer, 1000 pro, 2000 partner). The public score read's background refresh is now metered from the same anonymous budget and respects the same 10-minute per-wallet attempt cooldown as intake. Response shapes are unchanged; daily-cap rejections reuse
429 RATE_LIMITEDwithRetry-Afterpointing at the next UTC midnight. - TypeScript SDK added to the Kyro repository: a typed client for all 8 v1 operations with a shared error model, rate limit metadata and dual ESM and CJS builds. Not published to npm yet; the SDK page shows the planned install command.
- Plan-aware API limits: keyed budgets and batch caps now follow the key's plan (developer 120 units/min and 50 batch rows, pro 300 and 250, partner 600 and 500 by default with custom caps by agreement). Anonymous limits are unchanged. Additive only: every existing key is on the developer plan, which matches the old keyed behavior exactly.
- Public documentation site launched at docs.thekyro.co.
- API v1 contract published: 8 core endpoints, decision model
decision_v0.4.1, score modelidentity_score_v1.