{"openapi":"3.1.0","info":{"title":"ASPERN","version":"0.2","summary":"The independent record of what machine-managed capital actually does.","x-performance":{"simpleReads":{"p95Ms":500,"meaning":"A list or a lookup, warm."},"heavyAnalytics":{"p95Ms":2000,"meaning":"Correlation, the index, stress and cascade, warm."},"coldPath":{"meaning":"The first call after a cache expires. Not covered by the figures above. The deploy and a five-minute timer warm the heavy free endpoints, so a caller should rarely meet one there. `/v1/correlation` is the exception and is the slowest: it needs a capability, so the warmer cannot reach past the gate without holding a key, and putting a credential in the web process to solve a latency problem is a trade we have not made. Expect several seconds on the first call after an expiry."},"timeoutSeconds":60,"maxWindowDays":400},"description":"Ratings are free. The data, the analytics and the certification are not.\n\nEvery response states what it cannot see. Coverage, sample size and the mechanism behind a figure travel with the figure rather than sitting in documentation, because a number read without them is the failure this platform exists to prevent.","x-aspern-environment":"production","x-aspern-build":"20261026T1710Z-fbf407bbbb","x-contract-hash":"91dab7e1f7d2d02260f9c9cb60abd8148d6046fbaebd38137ff948bca7f674b3","x-stability":{"policy":"additive-within-major","promise":"Within /v1 the contract only grows: new routes, optional parameters, fields and warning codes. Routes and fields are never removed or renamed, and no type, unit or status meaning changes.","deprecation":{"marker":"x-lifecycle: deprecated, with the replacement named","minimumDays":180,"removal":"only in a new major version; /v1 keeps answering through the deprecation period"},"verification":"checked daily against the approved operation inventory; every change of x-contract-hash is recorded","changelog":"https://aspern.org/data/reference#changelog"}},"servers":[{"url":"https://aspern.org/api"}],"components":{"headers":{"RequestId":{"description":"The id of this request, also on every problem document as `request_id`. Quote it and we can find the call.","schema":{"type":"string"},"required":true},"RateLimitLimit":{"description":"How many requests the burst bucket holds when full. This is the limit that refuses a request, so it is the one these counters describe. The sustained per-minute allowance is the second entry in `RateLimit-Policy`, and the monthly quota is on `GET /v1/account`.","schema":{"type":"integer"},"required":true},"RateLimitRemaining":{"description":"Requests left in the bucket right now. Send more than this and the next one is refused.","schema":{"type":"integer"},"required":true},"RateLimitReset":{"description":"SECONDS FROM NOW until the bucket is FULL again, not a timestamp, and not the wait for a single request — that is `Retry-After`, sent only on a refusal. Zero means it is already full and there is nothing to wait for. A client treating it as epoch seconds sleeps until 1970 and hammers us instead.","schema":{"type":"integer"},"required":true},"RateLimitPolicy":{"description":"Both policies, comma-separated, in the order a client needs them: `<burst>;w=<seconds to refill>;name=\"burst\", <perMinute>;w=60;name=\"<plan>\"`. The first is what may be sent right now and is what the counters above describe; the second is what may be sustained and is the figure on the price list.","schema":{"type":"string"},"required":true},"RetryAfter":{"description":"Seconds to wait before retrying. Sent on a refusal.","schema":{"type":"integer"}}},"schemas":{"Lineage":{"type":"object","description":"Where a figure came from and what it does not cover. Null fields mean the field does not apply to how this figure was obtained — a venue API has no block number — and never that the value is zero.","required":["source","computedAt","methodologyVersion","coverageScope"],"properties":{"source":{"type":"string","description":"The reader that produced it."},"sourceEventId":{"type":["string","null"],"description":"The chain event, where one is the origin."},"chainId":{"type":["integer","null"],"x-unit":"chain-id"},"blockNumber":{"type":["integer","null"],"description":"Null for anything not read at a block.","x-unit":"block-number"},"observedAt":{"type":["string","null"],"format":"date-time","description":"When the source was observed. Null where the source carries no time of its own."},"computedAt":{"type":"string","format":"date-time","description":"When we computed this from it."},"methodologyVersion":{"type":"string","description":"What the figure means. Changes are listed at /changelog, including the corrections."},"coverageScope":{"type":"string","description":"What this figure covers and, explicitly, what it does not. Every scope states a limit."},"confidence":{"type":"object","description":"Never a bare number: a confidence with no subject is not checkable.","properties":{"value":{"type":["number","null"],"minimum":0,"maximum":1,"x-unit":"decimal-fraction"},"of":{"type":"string","description":"What the figure is a confidence IN."},"because":{"type":"string","description":"How it was arrived at, or why there is none."}}}}},"Page":{"type":"object","required":["total","limit","offset","hasMore"],"properties":{"total":{"type":"integer","minimum":0,"description":"Rows matching the filter, not rows returned.","x-unit":"count"},"limit":{"type":"integer","minimum":0,"description":"Applied page size. May be below what was asked — X-Page-Limit says so when it is.","x-unit":"count"},"offset":{"type":"integer","minimum":0,"x-unit":"count"},"hasMore":{"type":"boolean"},"nextOffset":{"type":["integer","null"],"description":"Null on the last page.","x-unit":"count"},"orderedBy":{"type":"string","description":"The sort, including its tie-breaker. The order is total, so paging cannot show a row twice or skip one."}}},"Vault":{"type":"object","description":"A vault. These are the stable fields consumers key on; the response carries more beside them. A field is never silently repurposed — a change in what one means is a new field and a changelog entry.","additionalProperties":true,"required":["slug","chain","name"],"properties":{"slug":{"type":"string","description":"Stable identifier. Use this, not address."},"name":{"type":"string"},"chain":{"type":"string"},"platformId":{"type":"string","description":"The platform’s stable id, as /v1/platforms lists it and /v1/vaults?platform= filters by. `platformSlug` carries the same value under its older name; `platform` and `platformName` are display labels."},"address":{"type":["string","null"],"description":"What the source uses to identify the pool. For about a third of vaults this is an aggregator UUID, not a chain address — read addressKind before calling a chain with it."},"addressKind":{"enum":["contract","venue-identifier"],"description":"Which of the two the address above is."},"contractAddress":{"type":["string","null"],"description":"The chain address where one exists, and null where none does. A HyperCore vault address is not a contract and is not given here."},"locator":{"type":"object","additionalProperties":true,"required":["kind","id"],"description":"What identifies the vault at its own venue (audit V01): kind evm-contract, hypercore-vault, solana-account, aggregator-pool or venue-identifier, the id, and where a reader can check it. A venue with no EVM contract is not missing one.","properties":{"kind":{"enum":["evm-contract","hypercore-vault","solana-account","aggregator-pool","venue-identifier"]},"id":{"type":"string"},"check":{"type":"string"}}},"platform":{"type":["string","null"]},"tvlUsd":{"type":["number","null"],"description":"USD. Null is not zero — it means we hold no capital figure.","x-unit":"usd"},"tvlAsOf":{"type":["string","null"],"format":"date-time"},"isClosed":{"type":"boolean"},"lifecycle":{"enum":["live","dead","unlaunched","unknown",null]},"agentManaged":{"type":"boolean","description":"Also served as machineManaged, which is retained for consumers already using it."},"agentManagedBasis":{"type":"object","description":"Why we believe the classification. It is a judgement, and a boolean with no basis is not a claim this platform makes.","required":["evidence","confidence","means"],"properties":{"group":{"enum":["declared","timing",null],"description":"The headline group: 'declared' where the operator declared it or the venue exists to run software; 'timing' where all we have is automated execution we measured, which shows a machine at work and not that a model decides. Null where neither."},"evidence":{"type":["array","null"],"description":"What was observed, one entry per method that fired. An empty array means we looked and inferred nothing, so the classification rests on a seed list or the venue asserting it. Null means no basis was ever recorded — the vault predates the field — and `means` says which of the two you are looking at.","items":{"type":"object","required":["method","note"],"properties":{"method":{"type":"string","description":"How this entry was arrived at, e.g. behavioural."},"note":{"type":"string","description":"The observation in words, as it is shown on the site."},"matched":{"type":"array","items":{"type":"string"},"description":"The named signals that fired, e.g. RULES_AUTOMATED."}}}},"confidence":{"type":["number","null"],"minimum":0,"maximum":1,"x-unit":"decimal-fraction"},"means":{"type":"string","description":"What the evidence kinds mean, in the response so a reader needs no other page."}}},"depositAsset":{"type":["string","null"],"description":"What a depositor puts in, read from the vault's own asset() — not the share token."},"sourceAssetLabel":{"type":["string","null"],"description":"What the aggregator called it. Frequently the share token; not a denomination."},"lineage":{"$ref":"#/components/schemas/Lineage"}}},"Meta":{"type":"object","required":["requestId","snapshotId","servedAt","methodologyVersion","coverage"],"properties":{"requestId":{"type":"string","description":"Also the X-Request-Id header."},"environment":{"type":"string","description":"production, staging or development. Also the X-ASPERN-Environment header and info.x-aspern-environment in the OpenAPI document, so a client can tell which contract answered."},"build":{"type":["string","null"],"description":"The deploy that served this. Also the X-ASPERN-Build header."},"snapshotId":{"type":"string","description":"Which state of our data answered. Two responses with the same snapshotId saw the same completed ingest runs — so a figure that differs between two surfaces under the SAME snapshot is a defect, and under different ones is a clock."},"observedAt":{"type":["string","null"],"format":"date-time","description":"When the source was observed."},"computedAt":{"type":["string","null"],"format":"date-time","description":"When we computed this from it."},"servedAt":{"type":"string","format":"date-time","description":"When this response was built."},"methodologyVersion":{"type":"string","description":"What the figures mean. Changes are listed at /changelog."},"source":{"type":["string","null"]},"chainId":{"type":["integer","null"],"x-unit":"chain-id"},"blockNumber":{"type":["integer","null"],"x-unit":"block-number"},"coverage":{"type":"object","properties":{"scope":{"type":["string","null"],"description":"What this covers and, explicitly, what it does not."},"population":{"type":["string","null"],"description":"The population these figures were measured over, as a key you can join on rather than a sentence you have to read. Every key is declared once and resolves to a definition at /reconciliation#<key>, where the ones that narrow show every row that falls out and why. The same key appears beside the figure on the website, so an integrator and a reader are talking about one population rather than two descriptions of it. Null only when `populationAbsence` says why."},"populationAbsence":{"type":["string","null"],"description":"Why there is no single population, where there is none. A lookup of one address measures nothing; a document carrying several rails in units that are never summed carries several populations. A null population with nothing here would be an absence you could not tell from an oversight, which is the defect this field exists to close."},"knownExclusions":{"type":["array","null"],"items":{"type":"string"},"description":"THREE VALUES. A list is what this route deliberately leaves out. `[]` is a CLAIM that nothing is excluded. `null` is “we have not said”, which is our gap and must never be read as the second. It was hardcoded to `[]` on every route until 2026-09-27, so every response claimed to exclude nothing while its own `scope` sentence named exclusions."}}},"confidence":{"type":["object","null"],"description":"Never a bare number; it names what it is a confidence in."},"freshness":{"anyOf":[{"type":"object","required":["oldestObservedAt","newestObservedAt","readings","fields","complete","state","newestAgeHours"],"description":"When the readings behind this answer were taken, where they differ. A page of a hundred vaults read over four hours has no single observation time — `observedAt` is filled in only where every reading agrees, and this reports the spread otherwise.","properties":{"oldestObservedAt":{"type":"string","format":"date-time"},"newestObservedAt":{"type":"string","format":"date-time"},"readings":{"type":"integer","minimum":1,"description":"How many readings the range was taken over.","x-unit":"count"},"fields":{"type":"array","items":{"type":"string"},"description":"The fields it was read from, so a caller can go and check any of them directly."},"complete":{"type":"boolean","description":"Whether every reading in the payload was seen. False means the range is a LOWER BOUND — the true spread is at least this wide and may be wider — because a partial walk always returns the narrower range, which would read as fresher and more uniform than the data is."},"state":{"enum":["fresh","mixed","stale"],"description":"`stale` when the NEWEST reading is more than 26 hours old at the moment the response was built — every reader runs at least daily, so that means a reader has stopped. `mixed` when the newest is inside that window and the OLDEST is not: parts of this answer are current and parts are not, which is the usual shape of a document joining several sources. It was summarised as `fresh` until 2026-10-10, computed from the newest reading alone, so one current field hid a catalogue two months old. A source that could not be read is not a state here: it is a check that could not run (`/v1/checks`) or an analysis whose `availability` says so, and never a zero."},"newestAgeHours":{"type":"number","minimum":0,"description":"Hours between the newest reading and the moment this response was built, to one decimal.","x-unit":"hours"},"oldestAgeHours":{"type":"number","minimum":0,"description":"The same for the OLDEST reading. The other end of the spread as a number, because a caller comparing two ISO strings to find out whether part of an answer is two months old will mostly not bother.","x-unit":"hours"}}},{"type":"object","required":["reason","state","says","readings"],"description":"No range, and which of the two reasons it is.","properties":{"reason":{"enum":["not-applicable","no-dated-field"],"description":"`not-applicable` is reference material: a plan, a capability list, a schema. Nothing in it was read from anywhere at a time. `no-dated-field` means the response carries data and nothing in it names when that data was read, which is a gap in that endpoint."},"state":{"enum":["not_applicable","not_measured"],"description":"The reason in the vocabulary shared with `fresh`/`stale`: `not-applicable` is `not_applicable`, `no-dated-field` is `not_measured`."},"says":{"type":"string","description":"The same thing in a sentence."},"readings":{"const":0}}}]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Page"},{"type":"null"}]}}},"Warning":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"Operator":{"type":"object","description":"An operator. strategiesClosed is kept beside strategiesRun deliberately: a list of survivors is the error this platform exists to correct.","additionalProperties":true,"required":["slug","name"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":["string","null"]},"address":{"type":["string","null"]},"managementMode":{"type":["string","null"],"description":"How the book is run, where we can tell."},"managementModeConfidence":{"type":["number","null"],"x-unit":"decimal-fraction"},"strategiesRun":{"type":["integer","null"],"description":"Every strategy, not just the live ones.","x-unit":"count"},"strategiesClosed":{"type":["integer","null"],"description":"How many of those are shut.","x-unit":"count"},"liveTvlUsd":{"type":["number","null"],"description":"Null is not zero — it means no capital figure, not no capital.","x-unit":"usd"}}},"CrowdingCluster":{"type":"object","additionalProperties":true,"properties":{"label":{"type":"string"},"kind":{"type":"string"},"instrument":{"type":["string","null"]},"vaultCount":{"type":"integer","x-unit":"count"},"grossUsd":{"type":["number","null"],"x-unit":"usd"},"netUsd":{"type":["number","null"],"description":"Null where we cannot see both sides, which is not the same as flat.","x-unit":"usd"},"coverageRatio":{"type":["number","null"],"description":"How much of the venue this cluster is measured against. A crowding figure without it is a number with no denominator.","x-unit":"decimal-fraction"},"coverageSuspect":{"type":"boolean","description":"True where the denominator is thin enough that the ratio above should not be quoted alone."},"members":{"type":["array","null"],"items":{"type":"object"},"description":"Null NEVER means the cluster is empty. It means one of two things and `membersOmitted` says which: `not-requested` (the default — pass `members=true`) or `entitlement` (your plan does not carry it, and `membersRequires` names the capability)."},"membersOmitted":{"type":["string","null"],"enum":["not-requested","entitlement",null],"description":"Why `members` is null. Null when members are present."},"membersRequires":{"type":["string","null"],"description":"The capability that would open membership, and null when the omission was not an entitlement."},"membersUnresolved":{"type":"integer","minimum":0,"description":"Present with `members`: how many members of the cluster could not be resolved to a vault we hold and are therefore not in the list. 0 means the list is the whole cluster; more than 0 means it is not, and `vaultCount` is the full size."}},"required":["label","kind","vaultCount","members","membersOmitted","membersRequires"]},"ExitRegister":{"type":"object","description":"Exits that settled, beside the liquidity that was advertised.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["slug","windows","says","cannotSee"],"description":"Settled withdrawals over windows, beside the level the venue publishes.","properties":{"settlementObserved":{"type":["object","null"],"description":"WHAT WE WATCHED HAPPEN WHEN HOLDERS LEFT, and NOT a redemption mechanic. In the withdrawals we opened on chain, `paidInSameTransaction` counts the ones where the holder received another token in the very transaction that burned their shares, and `burnedWithoutPayout` the ones where nothing reached them there. `examined` is the denominator. THIS IS WEAKER THAN READING THE PROGRAM and is published as such: a program can settle this way a thousand times and queue the next one, so nothing here may be read as `synchronous`. The strategy account’s own terms are on `kaminoStrategy` beside it and carry no mechanic deliberately, because that account does not state one. Null where no withdrawal has been examined, which is our reach rather than a vault nobody leaves."},"resilience":{"type":["object","null"],"description":"HOW THE WAY OUT HELD UP, WHICH IS THE ONLY FIGURE HERE ABOUT A PERIOD. Every other exit reading on this answer is a LEVEL at an instant: how much could be withdrawn now. This is whether that level has BEEN there. `state` is `read`, `too-short` or `nothing-to-read`, and TODAY IT IS `too-short` ON EVERY VAULT: the daily series began on 2026-10-16 and is about six days deep, so `days` says how many we hold and `daysShort` how many more before this answers. It opens by itself as the series grows and needs no release. Thirty days because the windows on this same answer are 7, 30 and 90, and because a worst day out of six reads as though it were the worst of a quarter. Where it is `read`, `worstShare` is the LOWEST daily share of capital that could have left and `medianShare` the middle day, never an average, and a day whose share reads outside 0 to 1 is dropped rather than averaged in. `coveredDays` is null unless a position was named, which is NOT zero. Every figure is what the venue declared that day and never a test of whether it would have paid."},"exitCapacity":{"type":["object","null"],"description":"What the venue declares withdrawable, and the fit of a position against it. Present for every vault we hold. Its own nested fields answer the position you named; this schema describes the one that was promised at the WRONG LEVEL until 2026-10-21, when the deploy gate caught two catalogues telling an agent to read a top-level field the route has always nested.","properties":{"reconciliationMatters":{"type":["object","null"],"description":"WHETHER THE DISAGREEMENT BETWEEN THIS VAULT’S TWO BOOKS MATTERS TO THE POSITION YOU NAMED. `material` is TRUE where the position sits inside the gap between them, so which reading is right decides whether it clears; FALSE where the gap is too small to move it either way; NULL where no amount was sent or the vault declares no capacity to measure one against — and null is NOT a pass. Computed from the amount actually asked about, never a constant: Euler evUSD’s books differ by $14,381, which cannot change a $50 withdrawal and entirely decides one sitting $1,000 under the declared figure. The figures themselves are on `reconciliation`, so a caller can apply its own tolerance instead of ours."}}},"snapshotAlignment":{"type":"object","description":"WHICH MOMENT EACH FIGURE ON THIS ANSWER CAME FROM. `verdict` is one of `one-moment`, `minutes-apart`, `hours-apart`, `days-apart` or `unknown`; `parts` names each figure beside the stamp it was read at; `oldestPart` is the one to look at, and `spanMinutes` is the gap between the oldest and the newest. NOTHING HERE IS A NEW READING — every stamp already travels on this answer under its own key — and it exists because `meta.freshness` could say an answer spanned four days without saying WHICH figure was four days old. A part carrying no stamp makes the verdict `unknown` and is KEPT in the list: an absence must never read as agreement."},"slug":{"type":"string"},"declaredWithdrawableUsd":{"type":["number","null"],"description":"A LEVEL at this instant: what the venue or the contract says could be taken out now. Null where we cannot read it, which is not zero.","x-unit":"usd"},"tvlUsd":{"type":["number","null"],"x-unit":"usd"},"windows":{"type":"array","items":{"type":"object"},"description":"FLOWS. For 7, 30 and 90 days: how many withdrawals settled, the total, the largest single one, and the most recent. Never a share of the level above."},"largestEverUsd":{"type":["number","null"],"description":"The largest single withdrawal we have ever recorded here. Somebody actually got this much out, on the day in `largestEverAt`. Evidence about the past, never a promise about now.","x-unit":"usd"},"largestEverAt":{"type":["string","null"],"format":"date-time"},"firstWithdrawalAt":{"type":["string","null"],"format":"date-time"},"cannotSee":{"type":"array","items":{"type":"string"},"description":"What this register structurally cannot contain, so an empty one is never read as an easy exit."},"says":{"type":"string"},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"EvidenceGraph":{"type":"object","description":"One subject, every edge, each with where it came from.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["subject","subjectKind","edges","lookedForAndMissing","counts","says","limits"],"description":"Every edge about one subject, each with its own provenance.","properties":{"subject":{"type":"string"},"subjectKind":{"type":"string","enum":["address","endpoint","vault","unknown"]},"edges":{"type":"array","description":"Each edge: `claim`, `object`, `kind` (declared | observed | derived), `source`, `observedAt`, `asOf`, `confidence` {value, in}, `coverage` and `method`.","items":{"type":"object"}},"lookedForAndMissing":{"type":"array","description":"What we looked for and did not find, with why. Listed rather than omitted, so a thin subject cannot read as a complete picture.","items":{"type":"object"}},"counts":{"type":"object","description":"Edges by kind. NOT a score, and the three are never added together."},"kinds":{"type":"object","description":"What declared, observed and derived each mean."},"says":{"type":"string"},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ClaimChallenge":{"type":"object","description":"What to sign to prove you hold a key.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["address","message","nonce","expiresAt","says"],"description":"A sentence to sign, bound to one address and one ten-minute window.","properties":{"address":{"type":"string"},"message":{"type":"string","description":"The EXACT text to sign, line breaks included. Signing anything else proves nothing."},"nonce":{"type":"string","description":"Derived from the address, the window and a server secret. Not stored, so there is nothing to expire or leak."},"expiresAt":{"type":"string","format":"date-time"},"next":{"type":"string"},"says":{"type":"string"},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ClaimResult":{"type":"object","description":"Control of a key, and nothing more.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["ok","says"],"description":"Whether a signature was made by the address it claims.","properties":{"ok":{"type":"boolean","description":"True only where the recovered signer IS the address. A failed proof is still HTTP 200: the question was asked and answered."},"address":{"type":"string"},"signer":{"type":"string","description":"The address recovered from the signature."},"provenAt":{"type":["string","null"],"format":"date-time"},"reason":{"type":["string","null"],"enum":["not-an-evm-address","signed-by-another-key","no-matching-challenge",null],"description":"Which refusal it was. A valid signature from the WRONG key is reported as such, not as invalid."},"says":{"type":"string"},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ActionEvaluation":{"type":"object","description":"One action weighed against one policy.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["decision","reasons","missingEvidence","rules","coverage","policyVersion","says"],"description":"One proposed action, weighed against a named policy. The decision depends on the amount, the action, the policy and how much was actually read, which is why the same subject can be allowed at one size and abstained on at another.","properties":{"proposal":{"type":"object","description":"What you asked about, read back, so a typo is visible."},"decision":{"type":"string","enum":["allow","review","abstain","unsupported"],"description":"`allow` — nothing we could check objects, up to `maxAmountUsd`. NOT a statement that the action is safe. `review` — something we READ does not match. `abstain` — we did not read enough to have an opinion, which is our gap and never approval. `unsupported` — this policy has no rule for this action."},"maxAmountUsd":{"type":["number","null"],"description":"Null where the action moves no money, and null on anything but an `allow`: a limit beside a `review` reads as permission.","x-unit":"usd"},"reasons":{"type":"array","items":{"type":"string"},"description":"Rule ids that decided. Each is published in full at /v1/policies."},"missingEvidence":{"type":"array","items":{"type":"string"},"description":"Rule ids whose evidence we do not hold. They lower `coverage` and are NEVER counted as objections against the subject."},"rules":{"type":"array","items":{"type":"object"},"description":"Every rule considered, each pass, fail or unknown. The audit trail."},"coverage":{"type":"string","enum":["none","low","medium","high"],"description":"How much of what the policy wanted was there. Below the policy floor the answer is `abstain` rather than `allow`."},"policyVersion":{"type":"string","description":"Carried so an answer given today can be reproduced after the rules change."},"policy":{"type":"object","description":"The policy applied, with its intent, ceiling and coverage floor."},"decisions":{"type":"object","description":"What each decision word means, so a caller never has to guess."},"says":{"type":"string"},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"PolicyList":{"type":"object","description":"The rules themselves, not a measurement.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["data","default","says"],"description":"Every policy a decision can be made under, with every rule.","properties":{"data":{"type":"array","items":{"type":"object"},"description":"Each with slug, version, title, intent, ceilingUsd, minCoverage and rules; each rule with an id, the actions it applies to, and the sentence it checks."},"default":{"type":"string","description":"The version used when a caller names none."},"says":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"OperatorCheck":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["slug","name","strategies","cannotSee","says","full"],"description":"Who runs the money behind a vault, and how much of it is their own.","properties":{"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":["string","null"]},"managementMode":{"type":["string","null"],"description":"Whether a person or a machine runs the book, as we read it."},"website":{"type":["string","null"]},"strategies":{"type":"object","properties":{"open":{"type":"integer"},"closed":{"type":"integer"},"platforms":{"type":"array","items":{"type":"string"}}}},"capitalUsd":{"type":["number","null"],"description":"Across their open strategies. Null where none carries a figure we could verify.","x-unit":"usd"},"ownShare":{"type":["object","null"],"description":"The share of each vault its LEADER holds, as a median over the strategies we can read it for — Hyperliquid and Drift only. Null where none of them publishes it, which is absence and not zero. It is evidence of alignment and never proof: the address running a vault can be a treasury or a custodian holding for other people, so what the chain shows is who holds the shares, not whose money they are.","properties":{"median":{"type":"number","minimum":0,"maximum":1},"over":{"type":"integer","description":"Strategies the median is taken over."},"ofOpen":{"type":"integer","description":"Their open strategies in total. Where this exceeds `over`, the median describes the ones we can read and not the manager."},"units":{"type":"string"},"means":{"type":"string"}}},"agentManaged":{"type":"integer","description":"How many of their open strategies are run by a machine."},"cannotSee":{"type":"array","items":{"type":"string"}},"says":{"type":"string"},"full":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"VaultCheck":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["slug","name","chain","earned","risk","cannotSee","says","full"],"description":"The counterpart of CounterpartyCheck for capital: what the record shows about one vault before putting money in.","properties":{"slug":{"type":"string"},"name":{"type":["string","null"]},"platform":{"type":["string","null"]},"chain":{"type":["string","null"]},"operator":{"type":["object","null"],"description":"Who runs it, as the venue names them, with the path to their own check."},"alsoHere":{"type":["object","null"],"description":"The same address on the payment side of this platform, WHERE THE VENUE IDENTIFIES THE VAULT BY A CHAIN ADDRESS AT ALL. Where it does, `address` and `check` are set and `evidence` is `observed`: a match on the ADDRESS and never an identification of the party, and `check` says what the chain records about it as a counterparty. Where the venue publishes its own internal id instead — 179 open vaults across 23 platforms do — `address` and `check` are null, `evidence` is `declared`, and `says` explains that there is nothing to look up on a rail. Null only where the vault carries no identifier at all. Before 2026-09-29 the internal ids were served in `address` with a `check` link that could not resolve."},"agentManaged":{"type":["boolean","null"],"description":"Whether an agent rather than a person runs the book, where we could establish it."},"closed":{"type":"boolean"},"acceptsDeposits":{"type":["boolean","null"],"description":"Null where we could not establish it, which is not the same as no."},"capitalUsd":{"type":["number","null"],"x-unit":"usd"},"capitalAsOf":{"type":["string","null"],"format":"date-time"},"earned":{"type":["object","null"],"description":"WHAT A HOLDER ACTUALLY EARNED against what the venue advertises — the figure a depositor cannot get anywhere else. Null where we have too few price points to say. `comparability` travels with it: a realised rate drawn from too short or too sparse a window is not a comparison with the advertised one and must never be read as a verdict on it. Rates are decimal fractions.","properties":{"advertised":{"type":["number","null"]},"realised":{"type":["number","null"]},"ratio":{"type":["number","null"],"description":"Realised over advertised. 1 is in line.","x-unit":"decimal-fraction"},"verdict":{"type":["string","null"]},"overDays":{"type":["integer","null"],"x-unit":"days"},"comparability":{"type":["string","null"]},"units":{"type":"string"}}},"risk":{"type":"object","description":"The band and the components that APPLY, each in its own words. A component that does not apply to this vault is left out rather than reported as a zero.","properties":{"band":{"type":["string","null"],"description":"low, moderate, high or severe. NOT to be acted on without `bandRange`: the score renormalises over the components that read, so the band is what this vault scores if the unread weight behaves like the read weight."},"measured":{"type":["number","null"],"description":"The share of components that could be measured for this vault, 0 to 1.","x-unit":"count"},"bandSays":{"type":["string","null"],"description":"The band with its coverage attached, in one sentence, beside the band itself — e.g. \"moderate at 27, but 55% of the weight was readable: ... low at 15 ... high at 60\". Null on a record not yet rescored."},"withdrawnSinceScoring":{"type":"array","items":{"type":"string"},"description":"Components withdrawn on the way out because their live inputs moved after the vault was scored — each carries `refused` and says why. Non-empty means `score` and `measured` above still carry the older arithmetic until the next rescore (hourly). Empty means the score and the components it is published with agree."},"bandRange":{"type":["object","null"],"description":"Where the band would be if the unread components read as well, and as badly, as they can — `bestScore`/`best` and `worstScore`/`worst`, with `spansBands` false when both ends land in the band the score is already in. Both ends equal the score exactly when every applying component was read, so this collapses rather than hedging every vault. Null on a record scored before 2026-10-10 and not yet rescored; `measured` distinguishes that from fully measured.","properties":{"bestScore":{"type":"number"},"best":{"type":"string"},"worstScore":{"type":"number"},"worst":{"type":"string"},"spansBands":{"type":"boolean"},"says":{"type":"string"}}},"components":{"type":"array","items":{"type":"object"}}}},"cannotSee":{"type":"array","items":{"type":"string"},"description":"What we could not establish for this vault, said in its own field rather than left as an absence a reader has to notice. An empty array means every check ran."},"says":{"type":"string"},"full":{"type":"string","description":"The whole document, for a reader that wants the fifty fields rather than the answer."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"X402Disagreements":{"type":"object","description":"Endpoints whose live payee differs from the one their own listing publishes.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["knocked","serving","notServing","comparable","disagreeing","sellers","items","limits","says"],"description":"Two statements by one party set against each other: the payee their listing publishes and the payee their endpoint asked for. Counts are free; the list needs a plan.","properties":{"knocked":{"type":"integer","description":"Endpoints we have knocked on at all. The population everything else here is drawn from."},"serving":{"type":"integer","description":"Of those, how many answered with a price at the most recent knock."},"notServing":{"type":"integer","description":"Gone, unreachable or erroring at the most recent knock. A fact about our last look."},"comparable":{"type":"integer","description":"Both sides named a payee, so a comparison was possible. The DENOMINATOR for `disagreeing`."},"disagreeing":{"type":"integer","description":"How many name a payee their own listing does not."},"sellers":{"type":"integer","description":"Distinct listed payees behind those endpoints. Says whether this is scattered or a few parties repeating themselves."},"items":{"type":["array","null"],"description":"One per disagreeing endpoint: `resource`, `listedPayee`, `quotedPayee`, `seenAt`. NULL without a plan, never an empty array — empty would say we found none.","items":{"type":"object","required":["resource","listedPayee","quotedPayee","seenAt"],"properties":{"resource":{"type":"string"},"listedPayee":{"type":"string","description":"What their catalogue entry publishes."},"quotedPayee":{"type":"string","description":"What their endpoint asked to be paid at."},"seenAt":{"type":"string","format":"date-time","description":"When we last saw that quote."}}}},"limits":{"type":"string"},"says":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentProfile":{"type":"object","description":"Agent economic profile: four readings of one economic subject, with no score on top.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["address","format","asOf","revenue","delivery","dependencies","health","blocksAnswered","cannotSee","says"],"description":"Four readings of one economic subject. There is no score on top of them, on purpose: a composite would be the figure every reader quotes and none can check. A block we have not computed is null rather than a row of zeros, which is why every one of the four is nullable.","properties":{"address":{"type":"string","description":"EVM lower-cased; any other kind as given."},"format":{"type":"object","required":["kind","coverage","says"],"properties":{"kind":{"enum":["evm","cardano","cardano-stake","cardano-byron","solana","bitcoin","cosmos","unknown"]},"chain":{"type":["string","null"]},"network":{"enum":["mainnet","testnet",null]},"coverage":{"enum":["rails","identity-only"]},"says":{"type":"string"}}},"wellKnown":{"type":["object","null"],"description":"Set where the address is not a party at all — a burn address, a router — so the four blocks below are not read as a business.","properties":{"kind":{"type":"string"},"says":{"type":"string"}}},"asOf":{"type":["string","null"],"format":"date-time"},"revenue":{"type":["object","null"],"description":"Income, repeat buyers, concentration, and whether its payers look like separate parties. Null where we hold no record of it trading.","properties":{"dealings":{"type":"integer"},"buyers":{"type":"integer"},"usd":{"type":["number","null"],"description":"Null, never 0, where no rail priced it.","x-unit":"usd"},"repeatBuyers":{"type":"integer"},"repeatShare":{"type":["number","null"],"description":"0..1.","x-unit":"decimal-fraction"},"largestBuyerShare":{"type":["number","null"],"description":"0..1. Null below three buyers, where a share could only be a half or a whole.","x-unit":"decimal-fraction"},"independentBuyers":{"type":"integer"},"twoWayBuyers":{"type":"integer"},"recent":{"type":"object","properties":{"dealings30":{"type":"integer"},"dealings90":{"type":"integer"},"newBuyers90":{"type":"integer"}}},"from":{"type":["string","null"],"format":"date-time"},"to":{"type":["string","null"],"format":"date-time"},"sharedPayers":{"type":["object","null"],"description":"Payers of this address that share an obscure third party with another of its payers. Evidence of a link, never proof of one operator.","properties":{"payers":{"type":"integer","x-unit":"count"},"linked":{"type":"integer"},"viaParties":{"type":"integer"},"largestGroup":{"type":"integer"}}},"says":{"type":"string"}}},"delivery":{"type":["object","null"],"description":"What a completion is worth. ACP v2 emits no accepted and no disputed phase, so neither is reported: `protocolCannotSay` names them rather than inventing them. `judged` is null until the nightly pass has computed it, which is not the same statement as nobody having judged anything.","properties":{"jobs":{"type":"integer","x-unit":"count"},"from":{"type":["string","null"],"format":"date-time"},"to":{"type":["string","null"],"format":"date-time"},"completed":{"type":"integer"},"rejected":{"type":"integer"},"expired":{"type":"integer"},"reachedAnOutcome":{"type":"integer","description":"completed + rejected + expired: the denominator of completionOfEnded."},"inFlight":{"type":["integer","null"]},"phaseUnread":{"type":["integer","null"],"description":"Jobs we hold with no phase event decoded. Our silence, not a state the chain reported."},"refunded":{"type":["integer","null"]},"completionOfEnded":{"type":["number","null"],"description":"0..1, over jobs that ENDED. Read it with the two figures below or it reads as a record of all the work."},"outcomeCoverage":{"type":["number","null"],"description":"0..1: jobs that reached an outcome over ALL jobs. What completionOfEnded covers. Null where there are no jobs."},"phaseUnreadShare":{"type":["number","null"],"description":"0..1: jobs with no phase we could decode, over all jobs. OURS rather than the chain’s, and why outcomeCoverage is not larger.","x-unit":"decimal-fraction"},"judged":{"type":["object","null"],"properties":{"thirdParty":{"type":"integer"},"buyer":{"type":"integer"},"self":{"type":"integer"},"nobody":{"type":"integer"},"of":{"type":"integer"}}},"thirdPartyShare":{"type":["number","null"],"description":"0..1.","x-unit":"decimal-fraction"},"protocolCannotSay":{"type":"array","items":{"type":"string"}},"says":{"type":"string"}}},"dependencies":{"type":["object","null"],"description":"Who it pays, split by the EVIDENCE that they supply it rather than by how sure we feel. Null where its recipients have not been split yet.","properties":{"parties":{"type":"integer"},"contracted":{"$ref":"#/components/schemas/SupplierClass"},"listed":{"$ref":"#/components/schemas/SupplierClass"},"paidOnly":{"$ref":"#/components/schemas/SupplierClass"},"paidBack":{"type":["integer","null"],"description":"Recipients that have also paid this address. Cuts across the three."},"contractedShareOfSpend":{"type":["number","null"],"description":"0..1.","x-unit":"decimal-fraction"},"says":{"type":"string"}}},"health":{"type":"object","description":"Whether its listed endpoints answer, and how recently it traded. The unpaid half of the handshake: an endpoint that quotes may still fail to deliver once paid.","properties":{"endpointsListed":{"type":"integer"},"endpointsProbed":{"type":"integer","description":"Of the listed ones. The rest are unknocked, not broken."},"quoting":{"type":"integer"},"gone":{"type":"integer"},"unreachable":{"type":"integer"},"otherAnswer":{"type":"integer"},"lastProbedAt":{"type":["string","null"],"format":"date-time"},"lastDealingAt":{"type":["string","null"],"format":"date-time"},"quietForDays":{"type":["integer","null"],"x-unit":"days"},"says":{"type":"string"}}},"blocksAnswered":{"type":"integer","description":"How many of the four blocks above this answer could fill, 0 to 4. Read it as the denominator of everything above: three readings out of four is a different statement from four, and a reader who cannot see which has no way to weigh the profile against another agent’s. The answer has always carried it; it was missing from THIS document for a day, so a paying reader of the contract was not told about the one field that qualifies all the others."},"cannotSee":{"type":"array","items":{"type":"string"},"description":"What no block above can reach. Carried with the profile rather than buried in one of them."},"says":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"SupplierClass":{"type":"object","required":["parties","usd","evidence","alsoCalled"],"properties":{"parties":{"type":"integer"},"usd":{"type":["number","null"],"description":"Null, never 0, where no rail priced the payments.","x-unit":"usd"},"evidence":{"type":"string","description":"The rule that put them here, in one sentence a reader can check."},"alsoCalled":{"type":"string","description":"The same class in the vocabulary an auditor used: confirmedSupplier, likelySupplier, paymentRecipient."}}},"CounterpartyCheck":{"type":"object","description":"One address before you deal with it. Added 2026-09-22.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["address","format","asOf","observations","identity","services","dealings","x402","acp","mech","masumi","limits"],"properties":{"address":{"type":"string","description":"EVM lower-cased; any other kind as given, since base58 and bech32 are not case-free in the same way."},"parts":{"type":"object","additionalProperties":true,"description":"Which parts of the check answered inside their budget: `complete`, `ran` and `failed`. A part in `failed` is MISSING from this answer, not absent for the address: read its fields as unknown. If the record itself does not answer, the route returns 503 with Retry-After instead."},"alsoHere":{"type":["object","null"],"description":"The same address on the CAPITAL side of this platform — a vault we read, or an operator who runs books — with the path to that check. A match on the address and never an identification of the party: the one paying on a rail and the one running a book are not asserted to be the same people."},"format":{"type":"object","required":["kind","coverage","says"],"description":"What kind of address this is and what we read for it.","properties":{"kind":{"enum":["evm","cardano","cardano-stake","cardano-byron","solana","bitcoin","cosmos","unknown"]},"chain":{"type":["string","null"]},"network":{"enum":["mainnet","testnet",null]},"coverage":{"enum":["rails","identity-only"],"description":"`rails`: payment rails are read for it. `identity-only`: registrations only, and every payment section is null."},"says":{"type":"string"}}},"asOf":{"type":["string","null"],"format":"date-time","description":"When the counterparty job last rebuilt the record this answer is read from."},"observations":{"type":"array","description":"One line per dimension, in the order a buyer would ask. Tones colour a reading; they are not a verdict and are never added up.","items":{"type":"object","required":["key","tone","evidence","says"],"properties":{"key":{"enum":["never-paid","independent-payers","two-way","all-two-way","concentrated","acp-delivery","service-serving","service-silent","unregistered","no-rail-read","dormant","recent","new-counterparties","concentrating"]},"tone":{"enum":["good","warn","bad","neutral"]},"evidence":{"enum":["observed","declared"]},"says":{"type":"string"}}}},"identity":{"type":"object","description":"What it says it is: registrations held by this address in the registry that can hold it. A claim, listed apart from behaviour.","properties":{"evidence":{"const":"declared"},"registry":{"enum":["erc8004","solana",null],"description":"Null where no registry we read can name this address as an owner (Cardano)."},"registrations":{"type":"integer","minimum":0,"x-unit":"count"},"chains":{"type":"array","items":{"type":"string"}},"names":{"type":"array","items":{"type":"string"}},"firstRegistered":{"type":["string","null"],"format":"date-time"},"crossRegistryClaims":{"type":"object","additionalProperties":{"type":"integer"},"description":"Claims its cards make about other registries, by whether we found them."}}},"services":{"type":["object","null"],"properties":{"evidence":{"const":"observed"},"declared":{"type":"integer","minimum":0,"description":"Callable services (MCP, A2A) its registrations declare."},"serving":{"type":"integer","minimum":0,"description":"Of those, how many answered our probe on its latest day."},"endpoints":{"type":"array","description":"Every endpoint the address declares, at most 20. NOT the same population as `declared`/`serving` above, which count only the protocols we probe — so a count of 1 beside a list of 2 is those two populations, not an error. These are what makes a chain walkable: without the url there is nothing to hand /v1/service, and nothing to give /v1/preflight as `resource` — its sharpest check, because a catalogue entry carries the seller’s own price and own payee.","items":{"type":"object","properties":{"declared":{"type":"string","description":"The card’s own word for the service. A label a reader sees should be its author’s."},"protocol":{"type":"string","description":"mcp | a2a | x402 | oasf | web | wallet | social | other."},"url":{"type":["string","null"],"description":"Where the owner SAYS their service is. A claim, never our verification of it."},"host":{"type":["string","null"]},"priceUsd":{"type":["number","null"],"description":"A price the card states. Null is unpriced, which is not free.","x-unit":"usd"},"declaredTools":{"type":"integer","minimum":0,"description":"How many tool names the card lists. Zero is “named none”, not “has none”."},"evidence":{"const":"declared"},"probeable":{"type":"boolean","description":"True where this is a protocol we call (mcp, a2a). False for a web page, a wallet or a social handle, which are listed and never called. It exists so one null does not mean two things: `lastProbe: null` with this true means we have not looked yet, and with this false means we never look at this kind. It also reconciles `declared`/`serving` — which count only the probeable protocols — with a longer list."},"lastProbe":{"type":["object","null"],"description":"Our reading of whether it answered, on the day stated. Null is never “it is down”: read it with `probeable`, which says whether looking was even possible.","properties":{"evidence":{"const":"observed"},"day":{"type":"string","format":"date"},"outcome":{"type":"string","description":"mcp: serving | gated | no-handshake | error | unreachable. a2a: serving | gated | not-a-card | unreachable."},"name":{"type":["string","null"],"description":"What the server called ITSELF when it answered, which need not match `declared`."},"toolsAnswered":{"type":"integer","minimum":0,"description":"How many it actually listed, against `declaredTools` which is what the card claims."},"latencyMs":{"type":["integer","null"],"x-unit":"seconds"}}}}}},"says":{"type":"string"}}},"dealings":{"type":["object","null"],"description":"Null where no payment rail is read for this kind of address.","properties":{"evidence":{"const":"observed"},"rails":{"type":"array","items":{"enum":["x402","acp","mech","masumi"]}},"chains":{"type":"array","items":{"type":"string"},"description":"The networks those dealings settled on. A rail mostly implies one; x402 spans five."},"total":{"type":"integer","minimum":0,"description":"x402 sales received plus ACP jobs taken.","x-unit":"count"},"counterparties":{"type":"integer","minimum":0},"independent":{"type":"integer","minimum":0,"description":"Counterparties it has never paid back."},"twoWay":{"type":"object","properties":{"counterparties":{"type":"integer","minimum":0},"dealings":{"type":"integer","minimum":0},"usd":{"type":["number","null"],"x-unit":"usd"}}},"largestShare":{"type":["number","null"],"minimum":0,"maximum":1,"description":"The largest single counterparty’s share of the dealings, as a decimal fraction.","x-unit":"decimal-fraction"},"suppliers":{"type":"integer","minimum":0,"description":"Distinct parties this agent has PAID. Zero means it has paid nobody on a rail we read, never that it depends on nobody."},"largestSupplierShare":{"type":["number","null"],"minimum":0,"maximum":1,"description":"The largest supplier’s share of those payments. Null below three suppliers, where the share could only be a half or a whole. The other direction from `largestShare`, and the one that says whether the agent itself would still be here if one party stopped.","x-unit":"decimal-fraction"},"spent":{"type":["number","null"],"description":"The priced part of what it paid out. Null where nothing was priced, never 0."},"recent":{"type":"object","description":"The same record over the last 7, 30 and 90 days. Every other figure here is all-time, and an agent paid well a year ago and nothing since is a different proposition from one paid yesterday.","properties":{"dealings7":{"type":"integer","minimum":0},"dealings30":{"type":"integer","minimum":0},"dealings90":{"type":"integer","minimum":0},"counterparties90":{"type":"integer","minimum":0},"newCounterparties90":{"type":"integer","minimum":0,"description":"Counterparties whose FIRST dealing with it falls inside 90 days: winning custom rather than keeping it."},"largestShare90":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Concentration over 90 days, against `largestShare` over all time."}}},"usd":{"type":["number","null"],"description":"The priced part of the dealings. Null where nothing was priced, never 0.","x-unit":"usd"},"firstPaid":{"type":["string","null"],"format":"date-time"},"lastPaid":{"type":["string","null"],"format":"date-time"}}},"independence":{"type":["object","null"],"description":"WHETHER THIS ADDRESS’S PAYERS ARE INDEPENDENT OF EACH OTHER. `dealings.independent` counts payers that never paid it back, and the caveat on this endpoint has always said that is not proof they are different parties. This measures it: payers of this address that share an OBSCURE third party with another of its payers. Obscure is load-bearing — a party paid by between two and ten addresses in all counts, a hub paid by more does not, because two agents both paying a hub have shown only that the hub is popular. The counts are free; `groups`, which names WHICH payers and through WHAT, needs `independence.test` and is null without it, with `capability` saying so. Null for an address we have not tested.","properties":{"evidence":{"type":"string","enum":["observed"]},"payers":{"type":"integer","minimum":0,"description":"Distinct parties that paid it, counted from the same edges the linking uses rather than from the sale-filtered dealings above. Two populations under one name is how a denominator drifts from its numerator.","x-unit":"count"},"linked":{"type":"integer","minimum":0,"description":"Of those, how many share an obscure party with another of them. Zero means no pair of its payers shares one on the rails we read, which is not proof they are unrelated."},"viaParties":{"type":"integer","minimum":0,"description":"How many distinct obscure parties do the linking."},"largestGroup":{"type":"integer","minimum":0,"description":"The most payers of this address found paying one obscure party. Two is a coincidence; nine is a shape."},"groups":{"type":["array","null"],"description":"Paid. Each obscure party and the payers of this address that pay it, largest group first, at most a hundred.","items":{"type":"object","properties":{"via":{"type":"string","description":"The party they have in common."},"payers":{"type":"array","items":{"type":"string"}},"count":{"type":"integer","minimum":2,"x-unit":"count"}}}},"capability":{"type":["string","null"],"description":"Set only where `groups` is withheld: the capability that would answer it."},"withheld":{"type":["string","null"],"description":"What is not in this answer and why, so a null field is never mistaken for an empty one."},"asOf":{"type":"string","format":"date-time"},"says":{"type":"string","description":"That this is evidence of a link and never proof of one operator. Quote it with the numbers."}}},"restsOn":{"type":["object","null"],"description":"Every party this address has PAID on a rail we read. NOT the mirror of `dealings`: a dealing is a sale and needs a seller on the other end, while a payment out counts whoever receives it, because an agent paying an address that publishes no catalogue still cannot work if that address stops. Null where this kind of address is not read on any rail.","properties":{"evidence":{"type":"string","enum":["observed"]},"suppliers":{"type":"integer","minimum":0,"description":"Distinct parties it has paid. Zero means it has paid nobody on a rail we read, never that it depends on nobody."},"payments":{"type":"integer","minimum":0,"x-unit":"count"},"spentUsd":{"type":["number","null"],"description":"The priced part of what it paid out. Null where nothing was priced, never 0.","x-unit":"usd"},"largestShare":{"type":["number","null"],"minimum":0,"maximum":1,"description":"The largest supplier’s share of those payments. Null below three suppliers, where the share can only be a half or a whole and would read as concentration rather than as a thin record.","x-unit":"decimal-fraction"},"recent":{"type":"object","description":"The same two inside ninety days. A dependence that ended last quarter is a different proposition from one that is current.","properties":{"suppliers90":{"type":"integer","minimum":0},"largestShare90":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Taken over the ninety-day suppliers, not over all of them."}}},"says":{"type":"string","description":"What a recipient here has and has not been shown to be."}}},"x402":{"type":["object","null"],"properties":{"sales":{"type":"integer","minimum":0},"payers":{"type":"integer","minimum":0,"x-unit":"count"}}},"acp":{"type":["object","null"],"properties":{"jobs":{"type":"integer","minimum":0,"x-unit":"count"},"completed":{"type":"integer","minimum":0},"rejected":{"type":"integer","minimum":0},"expired":{"type":"integer","minimum":0},"clients":{"type":"integer","minimum":0},"completion":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Completed over jobs that reached an outcome. Null with none."}}},"mech":{"type":["object","null"],"properties":{"deliveries":{"type":"integer","minimum":0},"paidUsd":{"type":["number","null"],"x-unit":"usd"}}},"masumi":{"type":["object","null"],"description":"Cardano addresses only: Masumi escrows where its payment credential is the seller. `minDepositAda` IS NOT A PRICE — it is the minimum ADA a UTxO holding a token must carry, summed over those escrows. A Masumi escrow is denominated in USDM (304 of 304 sampled escrow outputs carry the token) and 29,238 escrows hold 26 distinct lovelace amounts, which is a protocol constant rather than a market. `usdm` is the figure that would be the value and it is NULL because we have not read the token quantities: unread, never zero. Until it is read, the escrow COUNT is the supportable answer about this rail.","properties":{"escrows":{"type":"integer","minimum":0},"buyers":{"type":"integer","minimum":0},"minDepositAda":{"type":["number","null"]},"held":{"type":"array","description":"What those outputs hold, by symbol, in the asset’s own units. Quantities only: a stablecoin being worth a dollar is not the same as our holding a dated price for it, which we do not for Cardano. An empty array with `escrowsRead: 0` means unread rather than empty.","items":{"type":"object"}},"escrowsRead":{"type":"integer","minimum":0,"description":"How many of them we have read the contents of. The reader walks twenty thousand transactions."},"of":{"type":"integer","minimum":0},"countsOutputsNotJobs":{"const":true,"description":"ALWAYS TRUE, and the most important field here. The Masumi payment contract advances a job by SPENDING its escrow output and creating a new one, so one job appears in the contract as several outputs and every count and quantity above counts outputs. Measured over 400 transactions: 160 of 319 contract outputs were new jobs and 159 continued one already there, which is 1.99x by count and 2.00x by value. Read `escrows` and `held` as CEILINGS of about double until the chains are followed."},"says":{"type":"string"}}},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CounterpartyHistory":{"type":"object","description":"One agent record, day by day. Added 2026-09-22.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["address","days","keptSince","payment","items"],"properties":{"address":{"type":"string"},"days":{"type":"integer","minimum":1,"maximum":365,"x-unit":"days"},"keptSince":{"type":"string","description":"The day this history begins, because it begins when we started keeping it."},"payment":{"type":"object","description":"Whether this call was paid for, and whether that payment has settled on chain. An authorisation we hold and have not yet settled says so.","properties":{"paid":{"type":"boolean"},"settlement":{"enum":["settled","verified-not-settled"]},"transaction":{"type":["string","null"]},"says":{"type":"string"}}},"change":{"type":["object","null"],"description":"First day against last, over the window returned. Null with fewer than two days.","properties":{"dealings":{"type":"integer"},"independent":{"type":"integer"},"reciprocal":{"type":"integer"},"topShare":{"type":["number","null"],"x-unit":"decimal-fraction"},"over":{"type":"string"}}},"items":{"type":"array","items":{"type":"object","required":["day","dealings","independent"],"properties":{"day":{"type":"string"},"dealings":{"type":"integer"},"counterparties":{"type":"integer"},"independent":{"type":"integer"},"paidBack":{"type":"integer"},"largestShare":{"type":["number","null"],"x-unit":"decimal-fraction"},"usd":{"type":["number","null"],"x-unit":"usd"},"acpJobs":{"type":"integer"},"acpCompletion":{"type":["number","null"]},"dealings30":{"type":"integer"},"newCounterparties90":{"type":"integer"},"servicesServing":{"type":"integer"},"lastPaid":{"type":["string","null"],"format":"date-time"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CounterpartyBulk":{"type":"object","description":"Many addresses, one call. Added 2026-09-22.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["checked","payment","items","limits"],"properties":{"asOf":{"type":["string","null"],"format":"date-time"},"checked":{"type":"integer","minimum":1,"maximum":50},"payment":{"type":"object","additionalProperties":true},"limits":{"type":"string"},"shared":{"type":"object","description":"WHAT THIS SET SHARES UNDERNEATH: the parties that two or more of the addresses you sent have paid. The one answer no per-address row can contain, because the input is your own shortlist and no public figure holds it. Needs `dependency.shared` (Analyst and above); without it the block is still present and says which capability it needs, so a caller is never left guessing why a field is missing. Each address’s own suppliers are free, in `items` and in the single-address check.","properties":{"available":{"type":"boolean","description":"False when the capability is missing. The block is never absent."},"capability":{"type":"string","description":"Present only when `available` is false: the capability that would answer it."},"addresses":{"type":"integer","description":"How many of the addresses sent we hold a key for. The denominator: an address we cannot read contributes nothing here.","x-unit":"count"},"suppliers":{"type":"array","description":"Most shared first, at most fifty.","items":{"type":"object","properties":{"address":{"type":"string","description":"The party being paid."},"agents":{"type":"integer","minimum":2,"description":"How many of the addresses you sent pay it."},"payments":{"type":"integer","minimum":1,"x-unit":"count"},"usd":{"type":["number","null"],"description":"The priced part. Null where nothing was priced, never 0.","x-unit":"usd"},"who":{"type":"array","items":{"type":"string"},"description":"Which of your addresses pay it, busiest first."},"listed":{"type":"boolean","description":"Whether we hold a seller record for it, so the chain can be walked on."},"check":{"type":["string","null"],"description":"Its own counterparty check, where one exists."}}}},"says":{"type":"string","description":"What a shared recipient is and is not. Several agents paying one address may be paying a relayer, a bridge or the same customer back; what is observable is that money from several of them lands in one place. An empty list is a finding about these addresses AND about our reach."}}},"items":{"type":"array","items":{"type":"object","required":["given","address","format","readable","observations"],"properties":{"given":{"type":"string","description":"Exactly what was sent, so a caller can join the answer back to its list."},"address":{"type":"string"},"format":{"type":"object","additionalProperties":true},"readable":{"type":"boolean"},"observations":{"type":"array","items":{"type":"object","additionalProperties":true}},"dealings":{"type":"integer"},"independent":{"type":"integer"},"paidBack":{"type":"integer"},"largestShare":{"type":["number","null"],"x-unit":"decimal-fraction"},"acpCompletion":{"type":["number","null"]},"cameBack":{"type":"integer","minimum":0,"description":"Payers that paid it more than once. Counted over PAYERS and never over payments: one payer who bought fifty times is one customer who came back."},"cameBackShare":{"type":["number","null"],"minimum":0,"maximum":1,"description":"That count over its distinct payers, or NULL where it has too few payers for a rate to mean anything. Null means “too few to say” and never “nobody came back” — read it beside `cameBack`, which is always given. This is the only delivery signal the x402 rail has, since nothing on it records fulfilment; it is evidence that a seller delivered and never proof, because a buyer can be wrong twice.","x-unit":"decimal-fraction"},"dealings30":{"type":"integer"},"lastPaid":{"type":["string","null"],"format":"date-time"},"check":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CapitalCoverage":{"type":"object","description":"How much of the market each vault reading covers, by count and by capital. Added 2026-10-14.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["rows","says","limits"],"properties":{"measuredAt":{"type":["string","null"],"format":"date-time","description":"When the coverage was counted, which is not when you asked. Null means the job has never run."},"vaultsTotal":{"type":["integer","null"],"description":"Open vaults: the denominator of every byCount.","x-unit":"count"},"tvlTotalUsd":{"type":["number","null"],"description":"Capital across them: the denominator of every byCapital.","x-unit":"usd"},"vaultsWithNoSizeRead":{"type":["integer","null"],"description":"Open vaults whose size we never read. In the count denominator and not in the capital one, named rather than left to subtraction."},"fullyEvidenced":{"type":["object","null"],"description":"The share of capital carrying EVERY reading at once: a realised return, free liquidity, a risk band, who may move the money, how redemption works, and capital re-read within 48 hours. It cannot be derived from the six shares below — a vault missing a different one from its neighbour drops out of both — and it is deliberately the least flattering figure here. `requires` names the bar so it cannot move quietly."},"rows":{"type":"array","description":"One per reading, in the order the vault screen shows them.","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"vaults":{"type":"integer","description":"Open vaults with this reading.","x-unit":"count"},"tvlUsd":{"type":"number","description":"Their capital, in US dollars.","x-unit":"usd"},"byCount":{"type":"number","minimum":0,"maximum":1,"description":"Share of open vaults. Mostly a statement about the venue with the most vaults, which is why it is never shown alone.","x-unit":"count"},"byCapital":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Share of the capital. NULL where no capital was read at all, which is not a cover of nothing."},"missingTopVenues":{"type":"array","items":{"type":"object"},"description":"The three venues holding the most capital we CANNOT answer this for, each with `venue`, `vaults` and `tvlUsd`. A coverage share is a grade; this is a worklist. Venue level deliberately: naming which venues we cannot read is a statement about our coverage, while naming which vaults is the screen and is sold. Measured 2026-10-14 for time to exit: Concrete $1.21bn across 32 vaults and Upshift $54m across 8, with not one redemption reading between them."},"vaultsWithNoSizeRead":{"type":"integer","description":"Of the vaults with this reading, how many have no size we have read. A zero capital share means something different when this equals `vaults`: the reading covers vaults we cannot weigh, rather than small ones. Measured 2026-10-14: every one of the 349 vaults with a time-to-exit reading was in that state."},"says":{"type":["string","null"],"description":"What having this reading lets a reader decide."},"screenColumn":{"type":["string","null"],"description":"The vault-screen column asking the same question, so the two surfaces can be reconciled."}}}},"says":{"type":"string","description":"The widest and thinnest readings by capital, and whether the two measures disagree."},"limits":{"type":"string","description":"What these figures are not."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"EndpointCoverage":{"type":"object","description":"How well we know whether declared endpoints answer. Two populations, never summed. Added 2026-10-21.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["measuredAt","hosts","resources","says","cannotSee"],"properties":{"measuredAt":{"type":"string","format":"date-time","description":"When these figures were counted, which is not when the hosts were probed. The probe run has its own age on `hosts.ageHours`, because a fresh read of a stale probe is not a fresh fact."},"hosts":{"type":"object","description":"The daily HEAD probe of hosts registered identities declare. Its own population and its own denominator.","properties":{"lastRunAt":{"type":["string","null"],"format":"date-time","description":"When the probe last ran. NULL means it has never run, which `says` states rather than reporting a page of zeros."},"ageHours":{"type":["number","null"],"description":"Hours since that run, so a stale answer cannot look like a quiet one.","x-unit":"hours"},"stale":{"type":"boolean","description":"True when the last run is older than the daily cadence allows. Read it before treating any state below as current."},"declared":{"type":"integer","minimum":0,"description":"Distinct hosts registered identities declare."},"asked":{"type":"integer","minimum":0,"description":"How many the last run reached. The probe runs under a deadline, so this is not always `declared`."},"notAsked":{"type":"integer","minimum":0,"description":"Hosts the last run did NOT reach before its deadline expired. Their state is whatever an earlier day found, which is a memory and not a reading. A host we did not ask is not a host that is fine."},"askedShare":{"type":["number","null"],"minimum":0,"maximum":1,"description":"`asked` over `declared`. NULL where nothing is declared, never 0.","x-unit":"decimal-fraction"},"staleHosts":{"type":"integer","minimum":0,"description":"Hosts whose state nobody has confirmed inside the freshness window, counted per host rather than from the run."},"byState":{"type":"array","description":"One entry per state. THERE IS NO UPTIME NUMBER HERE and there will not be one: the states mean different things and summing them produces a figure about nothing.","items":{"type":"object","properties":{"state":{"type":"string","description":"answering (2xx), quoting (402), gated (401/403), redirecting (3xx), http-error, refusing, unresolvable, tls-invalid, timeout."},"label":{"type":"string"},"hosts":{"type":"integer","minimum":0},"agents":{"type":"integer","minimum":0,"description":"Identities standing behind those hosts. One dead host can carry hundreds, which is why impact is counted here and not in host numbers."},"share":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Of the hosts we hold a reading for. NULL where we hold none.","x-unit":"decimal-fraction"},"fault":{"type":["boolean","null"],"description":"Is this the ENDPOINT failing. NULL where the state is about our attempt or our credentials instead: a timeout is indistinguishable from our own network, and a 403 is a key we do not hold. A 402 is `false` — a seller asking to be paid is working. Do not build a down count by negating `answering`."},"says":{"type":"string","description":"What the state means, carried WITH the count so a reader cannot meet a number without it."}}}},"agentsBehindFaults":{"type":"integer","minimum":0,"description":"Identities behind a state that is the endpoint’s own fault, built from the states that ARE faults rather than by negation."}}},"resources":{"type":"object","description":"The x402 resources sellers list, on its OWN denominator. NEVER added to the host population: the two are read by different readers with different reach, and a sum of them would describe nothing.","properties":{"declared":{"type":"integer","minimum":0,"description":"Resources listed in a seller catalogue."},"everKnocked":{"type":"integer","minimum":0,"description":"Of those, how many we have knocked on even once."},"confirmable":{"type":"integer","minimum":0,"description":"How many have been knocked three times or more, which is the only group whose state we will publish, because one failure is not a finding. Read this as the honest answer to “can you tell me whether an x402 endpoint works”."},"everKnockedShare":{"type":["number","null"],"minimum":0,"maximum":1,"x-unit":"decimal-fraction"},"confirmableShare":{"type":["number","null"],"minimum":0,"maximum":1,"x-unit":"decimal-fraction"},"knockedLastWeek":{"type":"integer","minimum":0},"oldestKnockHours":{"type":["number","null"],"description":"The oldest knock still being relied on, in hours.","x-unit":"hours"}}},"says":{"type":"string","description":"Both populations in prose, each with its own denominator, and what the fault count does and does not include."},"cannotSee":{"type":"array","items":{"type":"string"},"description":"What no figure here reaches: endpoints nobody declares, whether the declaring identity controls the host, whether a 402 offer can actually be signed (that needs the response BODY), and whether an endpoint that answered answered anything good."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ExitLifecycleCoverage":{"type":"object","description":"The four phases of getting out, with the one nobody can read named rather than omitted. Added 2026-10-21.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["measuredAt","vaultsTotal","tvlTotalUsd","phases","says","cannotSee"],"properties":{"measuredAt":{"type":"string","format":"date-time"},"vaultsTotal":{"type":"integer","minimum":0,"description":"Open vaults. The widest denominator; each phase states its own narrower one.","x-unit":"count"},"tvlTotalUsd":{"type":"number","minimum":0,"description":"Capital across them, in US dollars.","x-unit":"usd"},"phases":{"type":"array","description":"The four phases of getting out, in sequence. NEVER averaged into one figure: they do not share a denominator, so a lifecycle percentage would be a number no phase is answerable for.","items":{"type":"object","properties":{"key":{"type":"string","enum":["filed","claimable","settled","failed-attempt"]},"label":{"type":"string"},"read":{"type":"object","description":"Vaults and capital we hold this phase for."},"readNoSizeRead":{"type":"integer","minimum":0,"description":"Of the vaults with this reading, how many have no size we could read. Where it equals `read.vaults` the capital share is NULL rather than 0: the reading covers vaults we cannot weigh, not vaults that are small, and a zero would say the opposite. Read `byCountApplicable` in that case."},"exempt":{"type":"object","description":"Vaults the phase CANNOT exist for, so their absence is not a gap. A synchronous redeem settles in the transaction that asks: nothing is ever filed and nothing is ever set aside."},"subjectRefuses":{"type":"object","description":"Vaults where the phase EXISTS and the contract will not expose it — an ERC-7540 vault carrying neither `pendingRedeemRequest` nor `claimableRedeemRequest`. Not our reading falling short, and no work of ours would close it; only a different vault would. Kept apart from `unread` for exactly that reason."},"unread":{"type":"object","description":"Vaults where the phase exists, the contract would answer, and we have not read it. This is the only one of the four that is work for us."},"byCountApplicable":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Read over the vaults the phase could exist for, which is the total less the exempt. NULL where no vault can have it, and NULL for a phase we do not read at all — 0% there would read as a failure to try rather than a reading nobody can take."},"byCapitalApplicable":{"type":["number","null"],"minimum":0,"maximum":1,"description":"The same share weighted by capital. Read it beside the count: they differ by a lot, because more than half the vault count is one venue’s small automated vaults."},"says":{"type":"string","description":"The four states in prose, each with its own count and capital."},"unreadableBecause":{"type":["string","null"],"description":"Set only on a phase we do not read AT ALL, and it says why rather than leaving the row to look like a gap we could close. Where it is set, the shares are null by design."}}}},"says":{"type":"string","description":"How many phases we can read, the thinnest one, and why there is no single lifecycle number."},"cannotSee":{"type":"array","items":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"VaultsRiskDimensions":{"type":"object","description":"Six risks across every vault we score, and where the one word flatters. Added 2026-10-14.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["population","denominators","items","withheld","limits"],"properties":{"population":{"type":"object","description":"FREE and complete, computed over everything scored BEFORE any filter is applied: a headline counted over a filtered set would be a headline about the filter.","required":["scored","disagreeing","withARiskOutsideTheBand","says"],"properties":{"scored":{"type":"integer","description":"Open vaults the risk scorer has written components for. The denominator of everything here."},"disagreeing":{"type":"integer","description":"Of those, how many carry an overall band that reads BETTER than at least one of their own dimensions."},"withARiskOutsideTheBand":{"type":"integer","description":"Of those, how many read worse on a dimension the band does not contain at all, which is the controller. No amount of reading the band would surface these."},"byDimension":{"type":"object","additionalProperties":{"type":"integer"},"description":"Which dimension does it, and how often. Keys are dimension names; a dimension nothing disagreed on is absent rather than zero."},"says":{"type":"string","description":"The finding in one sentence."}}},"denominators":{"type":"object","required":["openVaults","scored","neverScored","matchedTheFilter","returned"],"properties":{"openVaults":{"type":"integer","x-unit":"count"},"scored":{"type":"integer"},"neverScored":{"type":"integer","description":"Open vaults the scorer has never reached. Named rather than left to subtraction: a vault nobody scored must never be read as one that scored well."},"matchedTheFilter":{"type":"integer","description":"How many matched, whether or not they are in `items`. This is what tells a short list from a short population."},"returned":{"type":"integer","x-unit":"decimal-fraction"}}},"items":{"type":"array","description":"PAID beyond the free rows. Largest capital first. Empty rows are never a statement about matches: `withheld` and `denominators.matchedTheFilter` say what is not here.","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"tvlUsd":{"type":["number","null"],"description":"Null is unread, not empty.","x-unit":"usd"},"band":{"type":["string","null"],"description":"The single overall band, for comparison with the six below. Null where too little was measured for one."},"levels":{"type":"object","description":"The six, keyed by dimension. Every value may be null, which is UNREAD and never a low reading.","properties":{"market":{"type":["string","null"],"enum":["low","moderate","high","severe",null],"description":"Null is UNREAD, never a low reading."},"liquidity":{"type":["string","null"],"enum":["low","moderate","high","severe",null],"description":"Null is UNREAD, never a low reading."},"concentration":{"type":["string","null"],"enum":["low","moderate","high","severe",null],"description":"Null is UNREAD, never a low reading."},"operating":{"type":["string","null"],"enum":["low","moderate","high","severe",null],"description":"Null is UNREAD, never a low reading."},"controller":{"type":["string","null"],"enum":["low","moderate","high","severe",null],"description":"Null is UNREAD, never a low reading."},"evidence":{"type":["string","null"],"enum":["low","moderate","high","severe",null],"description":"ALWAYS null in practice, and typed like its five siblings so a consumer iterating `levels` meets one shape. Evidence carries no level of its own because how much we could read is our coverage, not a risk the vault runs; adding a band here would invite a reader to add our coverage to the vault’s risk. Its figures are counts, in `coverage` on the same row."}}},"coverage":{"type":["object","null"],"description":"The component COUNTS behind the evidence dimension. `measuredCount`/`totalCount`/`missingCount`/`refusedCount` are counts from one list; `measuredShare` divides that same list; `weightShare` is a share of component WEIGHT and has a DIFFERENT denominator, which is why it has a different name. `cannotSeeCount` is 0 on this route and means NOT COMPUTED HERE."},"dimensions":{"type":"array","items":{"type":"object"},"description":"The full six with their sentences, for the rows in this answer."},"worseThanBand":{"type":"array","items":{"type":"string"},"description":"Dimensions reading worse than `band`. Empty where the one word does not flatter this vault."},"outsideTheBand":{"type":"array","items":{"type":"string"},"description":"Of those, the ones the band does not contain at all."},"says":{"type":"string"},"asOf":{"type":["string","null"],"format":"date-time","description":"When THIS vault was scored. Rows were scored at different moments: this is a register of readings, not a snapshot."}}}},"withheld":{"type":"integer","description":"Matching vaults NOT in `items`. Zero with `dimensions.read`."},"locked":{"type":["object","null"],"description":"Null for an entitled caller. Otherwise it names the capability, the number of free rows, and says plainly that the rest is withheld rather than absent."},"limits":{"type":"string","description":"What this route does not do, including that nothing here is a new measurement."},"asOf":{"type":"string","format":"date-time"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"VaultsEarned":{"type":"object","description":"What depositors kept, against what was advertised. Added 2026-10-04.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["comparable","items","limits"],"properties":{"asOf":{"type":["string","null"],"format":"date-time"},"depositors":{"type":"integer","description":"Depositors with a reading behind these figures."},"alsoMeasured":{"type":"object","description":"The OTHER yield measure this platform publishes, named so the two are not confused: this answer is what the people still IN a vault kept, and `performance.realised` on a vault is what a unit held throughout would have earned. Different questions, very different coverage, and neither is the other scaled."},"byVenue":{"type":["array","null"],"items":{"type":"object"},"description":"Coverage per protocol, largest basis first. FREE at every tier: it says which market the headline is about, and a coverage claim nobody can check is marketing."},"survivorship":{"type":["object","null"],"description":"The bias as a field rather than a paragraph: every figure comes from depositors still IN the vault, so it reads better than the truth and never worse. No size is published for it."},"comparable":{"type":"integer","description":"Vaults where the two sides can be set against each other at all."},"shortOfAdvertised":{"type":["integer","null"],"description":"Of those, how many gave their depositors less than the venue advertised."},"losingShare":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Measured depositors who are down, as a fraction. A decimal, not a percentage.","x-unit":"decimal-fraction"},"capitalWeightedReturn":{"type":["number","null"],"description":"What the measured capital earned as a whole. A decimal fraction.","x-unit":"decimal-fraction"},"withComparison":{"type":"integer","description":"Rows that exist, against `returned`, which is how many this answer carries."},"returned":{"type":"integer","x-unit":"decimal-fraction"},"withheld":{"type":"integer","description":"Rows not in this answer because the plan does not carry them. Zero with `earned.detail`."},"capability":{"type":["string","null"],"description":"Set only where rows are withheld: the capability that would answer them."},"items":{"type":"array","description":"Widest gap first.","items":{"type":"object","properties":{"vaultId":{"type":"string"},"slug":{"type":["string","null"]},"name":{"type":"string"},"tvlUsd":{"type":["number","null"],"x-unit":"usd"},"depositorsMeasured":{"type":"integer"},"medianDaysHeld":{"type":["number","null"],"description":"How long the measured depositors have held. The advertised rate is scaled to this."},"advertised":{"type":"number","description":"The venue’s own rate scaled to that holding period. A decimal fraction, and a CLAIM."},"kept":{"type":"number","description":"What those depositors actually kept over the same span. A decimal fraction, and a MEASUREMENT."},"gapPoints":{"type":"number","description":"kept minus advertised, in percentage POINTS. Negative means they got less.","x-unit":"count"},"vault":{"type":["string","null"]}}}},"method":{"type":["string","null"]},"limits":{"type":"string","description":"What this answer cannot tell you, including the survivorship in the register itself. Quote it with the numbers."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentChanges":{"type":"object","description":"What moved in the agent record. Added 2026-10-04.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["since","count","items","limits"],"properties":{"since":{"type":"string","description":"The day this answer starts from, read back so a caller can tell a clamp from what they asked for."},"from":{"type":["string","null"],"description":"The first day the record is held for at all. Earlier than this there is nothing, because the feed began when it began."},"count":{"type":"integer","x-unit":"count"},"capped":{"type":"boolean","description":"The page was full, so there may be more. A cap is not a count."},"items":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"day":{"type":"string","description":"The day the new value was recorded."},"field":{"type":"string","enum":["dealings","counterparties","independent","paidBack","largestShare","usd","acpJobs","servicesServing"],"description":"Which one moved. One row per field, so an agent that moved in two is two rows."},"was":{"type":["number","null"],"description":"The value on the previous day held."},"now":{"type":["number","null"],"description":"The value on `day`. Null is a real value here and is not the same as 0."},"check":{"type":"string"}}}},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CounterpartyAgentList":{"type":"object","description":"A page of agents found by their record. Paging is in meta.pagination.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["items","filters"],"properties":{"asOf":{"type":["string","null"],"format":"date-time","description":"When the counterparty job last rebuilt these records."},"filters":{"type":"array","items":{"type":"string"},"description":"The filters applied, in words."},"orderedBy":{"type":"string"},"items":{"type":"array","items":{"type":"object","required":["address","rails","dealings","independent","paidBack","check"],"properties":{"address":{"type":"string"},"name":{"type":["string","null"],"description":"From its registrations: a claim."},"rails":{"type":"array","items":{"enum":["x402","acp","mech","masumi"]}},"chains":{"type":"array","items":{"type":"string"},"description":"The networks those dealings settled on."},"dealings":{"type":"integer","minimum":0},"counterparties":{"type":"integer","minimum":0},"independent":{"type":"integer","minimum":0},"paidBack":{"type":"integer","minimum":0,"description":"Counterparties it also pays."},"largestShare":{"type":["number","null"],"minimum":0,"maximum":1,"x-unit":"decimal-fraction"},"usd":{"type":["number","null"],"x-unit":"usd"},"acpJobs":{"type":"integer","minimum":0},"acpCompletion":{"type":["number","null"],"minimum":0,"maximum":1},"cameBack":{"type":"integer","minimum":0,"description":"Payers that paid it more than once. Counted over PAYERS and never over payments: one payer who bought fifty times is one customer who came back."},"cameBackShare":{"type":["number","null"],"minimum":0,"maximum":1,"description":"That count over its distinct payers, or NULL where it has too few payers for a rate to mean anything. Null means “too few to say” and never “nobody came back” — read it beside `cameBack`, which is always given. This is the only delivery signal the x402 rail has, since nothing on it records fulfilment; it is evidence that a seller delivered and never proof, because a buyer can be wrong twice.","x-unit":"decimal-fraction"},"mechDeliveries":{"type":"integer","minimum":0},"masumiEscrows":{"type":"integer","minimum":0},"registrations":{"type":"integer","minimum":0,"x-unit":"count"},"servicesServing":{"type":"integer","minimum":0},"dealings30":{"type":"integer","minimum":0},"dealings90":{"type":"integer","minimum":0},"newCounterparties90":{"type":"integer","minimum":0},"lastPaid":{"type":["string","null"],"format":"date-time"},"check":{"type":"string","description":"The path of its full counterparty check."}}}}}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["pagination"],"properties":{"pagination":{"$ref":"#/components/schemas/Page"}}}]},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CounterpartySummary":{"type":"object","description":"The counterparty check across everyone. Added 2026-09-22.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["asOf","definitions","earners","dealings","byIndependent","sources","acp","identity","top"],"properties":{"asOf":{"type":"string","format":"date-time"},"definitions":{"type":"object","additionalProperties":{"type":"string"}},"earners":{"type":"integer","minimum":0,"description":"Addresses ever paid on x402 (as a listed seller), ACP, the mech marketplace, or Masumi (as a Cardano escrow seller)."},"withCounterparty":{"type":"integer","minimum":0},"mechOnly":{"type":"integer","minimum":0,"description":"Paid only on the mech marketplace, which names no payer."},"dealings":{"type":"integer","minimum":0},"byIndependent":{"type":"array","items":{"type":"object","required":["key","label","addresses","dealings"],"properties":{"key":{"type":"string"},"label":{"type":"string"},"addresses":{"type":"integer","x-unit":"count"},"dealings":{"type":"integer"}}}},"sources":{"type":"object","description":"Every dealing, by the kind of counterparty behind it.","properties":{"twoWay":{"type":"integer"},"largestOneWay":{"type":"integer"},"otherOneWay":{"type":"integer"}}},"sourcesUsd":{"type":"object","properties":{"twoWay":{"type":["number","null"]},"all":{"type":["number","null"]}}},"concentrated":{"type":"integer","minimum":0},"withTwoWay":{"type":"integer","minimum":0},"acp":{"type":"object","properties":{"jobs":{"type":"integer","x-unit":"count"},"completed":{"type":"integer"},"rejected":{"type":"integer"},"expired":{"type":"integer"},"open":{"type":"integer"},"providers":{"type":"integer"}}},"activity":{"type":"object","description":"Paid addresses by when they were last paid. A record over all time says nothing about whether the agent is still working.","properties":{"d7":{"type":"integer"},"d30":{"type":"integer"},"d90":{"type":"integer"},"dormant":{"type":"integer","description":"Nothing on any rail we read for more than 90 days."},"undated":{"type":"integer","description":"Paid on a rail that carries no time we can read."}}},"providerDelivery":{"type":"object","description":"ACP providers by their own completion rate over jobs that reached an outcome: 80% or more, 50 to 80%, under 50%, and none reached yet.","properties":{"high":{"type":"integer"},"mid":{"type":"integer"},"low":{"type":"integer"},"noOutcome":{"type":"integer"}}},"identity":{"type":"object","properties":{"owners":{"type":"integer"},"paid":{"type":"integer"},"independent1":{"type":"integer"},"independent5":{"type":"integer"},"offering":{"type":"integer"},"serving":{"type":"integer"},"servingPaid":{"type":"integer"}}},"top":{"type":"array","description":"The thirty addresses with the most independent counterparties.","items":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":["string","null"]},"rails":{"type":"array","items":{"type":"string"}},"dealings":{"type":"integer"},"counterparties":{"type":"integer"},"independent":{"type":"integer"},"topShare":{"type":["number","null"],"x-unit":"decimal-fraction"},"reciprocal":{"type":"integer"},"acpJobs":{"type":"integer"},"acpCompleted":{"type":"integer"},"usd":{"type":["number","null"],"x-unit":"usd"},"registered":{"type":"boolean"},"servicesServing":{"type":"integer"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"PlatformList":{"type":"object","description":"Every platform, largest first by open vaults. Added 2026-09-22.","required":["data","meta","warnings"],"properties":{"data":{"type":"array","items":{"type":"object","required":["id","name","vaults"],"properties":{"id":{"type":"string","description":"Stable. What /v1/vaults?platform= takes and what every vault carries as `platformId`."},"name":{"type":"string","description":"Display label; may change."},"vaults":{"type":"integer","minimum":0,"description":"Open vaults we hold on the platform.","x-unit":"count"},"agentManagedVaults":{"type":"integer","minimum":0,"description":"Of those, run by software rather than a person, as we judge it.","x-unit":"count"},"coverageModel":{"type":["string","null"],"description":"How much of this venue we attempt to read at all. Null where nothing has been said, which is NOT a claim of full coverage."},"coverageNote":{"type":["string","null"],"description":"What the count above does and does not mean for this venue, including where we CANNOT CURRENTLY READ it at all — in which case every figure shown is the last reading we took and not a current one, and the note says when. Null where nothing has been said. The website has shown this beside the count since 2026-09-27; this route returned the count alone until 2026-09-28, so a machine got a number a person would have been warned about."}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"Proof":{"type":"object","additionalProperties":true,"description":"What we can demonstrate rather than merely source. A dollar figure is a quantity and a price; the quantity is on chain where anyone can check it.","properties":{"capital":{"type":"object","additionalProperties":true,"properties":{"vaultsConfirmed":{"type":"integer","x-unit":"count"},"confirmedUsd":{"type":"number","x-unit":"usd"},"shareOfAskable":{"type":"number","minimum":0,"maximum":1,"description":"Of the capital we could ask about — not of all capital.","x-unit":"decimal-fraction"},"byBasis":{"type":"array","description":"Split by HOW the price was arrived at. These are not the same claim and the total should not be read as one.","items":{"type":"object"}},"disagreements":{"type":"array","items":{"type":"object"}},"withdrawableDisagreements":{"type":"array","items":{"type":"object"}},"couldNotAsk":{"type":"array","description":"Weighted by the capital behind each reason, not counted — a thousand dust vaults and one large one are the same count and not the same fact.","items":{"type":"object"}}}},"payments":{"type":"object","additionalProperties":true},"sample":{"type":["object","null"],"additionalProperties":true,"description":"A fixed sample of vaults read at a pinned block. Every row carries the exact eth_call that produces it again, and the integer the contract answered before any arithmetic of ours.","properties":{"blocks":{"type":"array","description":"The block pinned on each chain, so the sample is one moment per chain rather than a smear.","items":{"type":"object"}},"rows":{"type":"array","description":"Complete rows. Twenty are free at every tier: a proof behind a paywall proves nothing to the reader who has not paid.","items":{"type":"object","additionalProperties":true,"properties":{"contract":{"type":"string","description":"The address to call."},"call":{"type":"string","description":"The four-byte selector we sent. totalAssets()."},"block":{"type":"integer","description":"The block it was asked at. Without this the row is not a proof.","x-unit":"block-number"},"raw":{"type":"string","description":"What the contract answered, verbatim, before decimals and before a price."},"decimals":{"type":"integer","x-unit":"decimal-places"},"quantity":{"type":"number","description":"raw, scaled by decimals.","x-unit":"token-units"},"priceUsd":{"type":"number","x-unit":"usd"},"priceSource":{"type":"string","description":"Which table the price came from. The price is the half of this figure that is ours."},"priceAsOf":{"type":"string","format":"date-time"},"chainUsd":{"type":"number","description":"quantity times price.","x-unit":"usd"},"ourUsd":{"type":"number","description":"What we publish for this vault elsewhere.","x-unit":"usd"},"ratio":{"type":"number","description":"chainUsd over ourUsd. One means the two agree.","x-unit":"decimal-fraction"}}}},"masked":{"type":"array","description":"Rows listed with the vault, contract, raw answer and quantity REMOVED rather than nulled — each says so in its withheld field. The chain, block and size remain, which is the shape of the tail without the identity.","items":{"type":"object"}},"total":{"type":"integer","x-unit":"count"},"cut":{"type":"boolean"},"says":{"type":["string","null"]},"couldNotRead":{"type":"array","description":"Members that produced no row, and why. A sample that quietly shrank to the rows that worked would be chosen by its result.","items":{"type":"object"}},"how":{"type":"string","description":"The JSON-RPC call to repeat, written out, so the proof does not depend on reading a page of ours."},"providerRule":{"type":"string","description":"How to find an endpoint when servedBy is empty or stale. Named endpoints are a measurement with a shelf life; the rule is not. It also gives the test for an endpoint that answers from the head whatever block it is asked for, which returns a plausible wrong number rather than an error."}}}}},"Check":{"type":"object","additionalProperties":true,"description":"A claim of ours with the source that tests it. The consumer fetches the source themselves; nothing here requires calling this API a second time.","properties":{"id":{"type":"string","description":"Stable across runs, so one check can be tracked over time."},"family":{"type":"string"},"methodologyVersion":{"type":"string","description":"Changes when the computation changes, so a re-run can be dated."},"source":{"type":"object","additionalProperties":true,"description":"Where to get the second reading. kind evm-call carries chainId, address, data and block; evm-tx carries chainId and txHash; http carries a url and whether it was fetched by a machine or read by a person. observedAt is null, NEVER epoch zero, wherever no read time is held, and observedAtAbsent then says which absence it is."},"ours":{"type":"object","additionalProperties":true,"description":"Our value with its unit and, for a dollar figure, the price basis: which price, from which source, at which moment."},"theirs":{"type":["object","null"],"additionalProperties":true,"description":"Null where nobody else publishes this figure at all, which is not the same as a disagreement."},"assert":{"type":"object","additionalProperties":true,"description":"What would count as agreement. `type` is one of exact, tolerance, directional, per-unit, asymmetric or not-comparable — the last is its own state and never produces holds or breaks, so a client never has to read a null threshold as \"no assertion\". `operands` names the numbers the formula refers to, so the assertion is executed rather than parsed out of prose. The band is present where there is one, and the reason for choosing it always is: a tolerance with no stated reason is indistinguishable from a band widened until the check passed."},"executable":{"type":"boolean","description":"Whether a machine can run this without us. False is published with its reason rather than dropped from the list."},"notExecutableBecause":{"type":["string","null"]},"verification":{"type":"object","description":"How this declaration is checked, in one vocabulary for every family (added 2026-09-22). `class` is the kind of read (a single call, several calls at one block combined by `formula`, a transaction receipt, or an external snapshot); `method` is the call a verifier makes; `needs` is what it must have. A receipt-based check is never a contract call.","required":["class","status","method","needs"],"properties":{"class":{"type":"string","enum":["evm_call","evm_calls","transaction_receipt","external_http_snapshot","manual"]},"status":{"type":"string","enum":["executable","not_executable"]},"method":{"type":"string"},"needs":{"type":"string"},"formula":{"type":["string","null"]},"because":{"type":["string","null"]}}},"evaluation":{"type":"object","additionalProperties":true,"description":"What the assertion says about the values in this very record. openBreach true means the rule and its own data disagree and we have not resolved which is wrong — never a rule quietly relabelled to match what it measures."},"population":{"type":["string","null"]},"exclusions":{"type":"array","items":{"type":"string"}},"confidence":{"type":"object","additionalProperties":true}}},"Checks":{"type":"object","additionalProperties":true,"properties":{"executable":{"type":"integer","description":"How many of these a consumer can run without calling us again.","x-unit":"count"},"openBreaches":{"type":"integer","description":"Checks whose assertion the record’s own numbers break. A check that does not hold is either a finding about the world or a mistake in our rule; every one counted here is published as unresolved rather than smoothed into the intended rule.","x-unit":"count"},"assertionPolicy":{"type":"object","additionalProperties":true,"description":"The rules have their own version and hash, separate from methodologyVersion, because a tolerance change can turn a failed data point into a pass with nothing else moving. The hash covers the rules with every measured value stripped, so it moves when a band moves and stays still when the world does. `changes` records when and why each tolerance moved."},"totalChecks":{"type":"integer","description":"Named totalChecks rather than total because `total` is a paging key here and the envelope lifts it into meta.pagination, which is null on a response that is not a page of rows. The first version of this endpoint lost its denominator that way.","x-unit":"count"},"families":{"type":"array","description":"Every family, including the ones with no checks to report. A family at zero means the check ran and flagged nothing, which is a different fact from a family nobody implemented.","items":{"type":"object"}},"checks":{"type":"array","items":{"$ref":"#/components/schemas/Check"}},"how":{"type":"string","description":"How to execute each source kind and apply each assertion type, written out."}}},"VaultList":{"type":"object","description":"A page of vaults, the rows themselves; paging is in meta.pagination.","required":["data","meta","warnings"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Vault"}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"VaultDocument":{"type":"object","description":"One vault.","required":["data","meta","warnings"],"properties":{"data":{"$ref":"#/components/schemas/Vault"},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"OperatorList":{"type":"object","description":"A page of operators. Paging is in meta.pagination.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","additionalProperties":true,"required":["items"],"properties":{"asOf":{"type":["string","null"],"format":"date-time","description":"When the newest reading behind these rows was taken."},"oldestObservationAt":{"type":["string","null"],"format":"date-time","description":"When the oldest reading behind these rows was taken."},"items":{"type":"array","items":{"$ref":"#/components/schemas/Operator"}}}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["pagination"],"properties":{"pagination":{"$ref":"#/components/schemas/Page"}}}]},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CoverageMeasures":{"type":"object","description":"Five coverage measures. Separate populations, never summed.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","additionalProperties":true,"required":["at","measures"],"properties":{"at":{"type":"string","format":"date-time"},"note":{"type":"string"},"measures":{"type":"array","items":{"type":"object","additionalProperties":true,"required":["key","measure","population","numerator","denominator"],"properties":{"key":{"type":"string"},"measure":{"type":"string","description":"What is measured, in words."},"population":{"type":"string","description":"The set the denominator is drawn from."},"numerator":{"type":"number","description":"USD, except the notional measure, which is notional."},"denominator":{"type":"number"},"share":{"type":["number","null"],"x-unit":"decimal-fraction"},"gaps":{"type":"array","description":"The largest parts of the denominator not in the numerator, by venue.","items":{"type":"object","additionalProperties":true}}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"X402Evidence":{"type":"object","description":"x402 payments by what can be shown about them.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","additionalProperties":true,"required":["tiers"],"properties":{"asOf":{"type":["string","null"],"format":"date-time","description":"The older of the two halves, the x402 tiers (`at`) and the split (`commerceTiers.asOf`): the answer is as fresh as its stalest half."},"at":{"type":["string","null"],"format":"date-time"},"note":{"type":"string"},"tiers":{"type":"array","items":{"type":"object","additionalProperties":true,"required":["tier","payments","usd"],"properties":{"tier":{"enum":["route","facilitator","candidate","candidate-unsampled"]},"payments":{"type":"number","x-unit":"count"},"usd":{"type":"number","x-unit":"usd"}}}},"facilitators":{"type":"number"},"cataloguePayees":{"type":"number"},"routeByChain":{"type":"array","items":{"type":"object","additionalProperties":true}},"routeByMonth":{"type":"array","items":{"type":"object","additionalProperties":true}},"commerceTiers":{"type":["object","null"],"additionalProperties":true,"description":"Every payment shown to be one, x402 and ACP, as three figures that nest and are never added up (x402 counts only the `protocol`, `route` and `facilitator` tiers; the candidate transfers are in `notShownToBeX402` and never in the figures): `settled`, of that `serviceLinked` (to a payee that lists a paid service, or an ACP job), of that `deliveryEvidenced` (an ACP job completed). `deliveryUnevidenceable` counts the x402 payments, whose rail cannot record delivery. Null until the daily rollup has run. The same split per address is on `/v1/agents/{address}/business`."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"OperatorDocument":{"type":"object","description":"One operator and its book.","required":["data","meta","warnings"],"properties":{"data":{"$ref":"#/components/schemas/Operator"},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CrowdingDocument":{"type":"object","description":"Clusters of vaults in the same trade. `members` is omitted unless `members=true`; every cluster says which of the two nulls it carries.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","additionalProperties":true,"required":["asOf","tier","items"],"properties":{"asOf":{"type":["string","null"],"format":"date-time","description":"The snapshot these clusters were read from. Null before the first sweep."},"tier":{"type":"string"},"instrument":{"type":["string","null"]},"items":{"type":"array","items":{"$ref":"#/components/schemas/CrowdingCluster"}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"KeyEntitlement":{"type":["object","null"],"description":"The key that made this request and what it is allowed, or null when the request carried no recognised key. Every field here is read off the same resolved plan the rate limiter enforces, so this, the price list, the RateLimit-* headers and the capability gate cannot disagree without one of them being wrong.","properties":{"label":{"type":"string","description":"What the operator called this key."},"planSlug":{"type":["string","null"],"description":"The plan whose rate is actually being enforced, keyed as /v1/plans keys it. Null where the key carries no subscription."},"planName":{"type":["string","null"],"description":"That same plan’s display name. Names change; branch on the slug."},"quota":{"type":["integer","null"],"minimum":0,"description":"Calls allowed in the period. NULL MEANS UNMETERED — an internal or unlimited key — not zero.","x-unit":"count"},"used":{"type":"integer","minimum":0,"description":"Calls made in the current period.","x-unit":"count"},"period":{"type":"string","description":"The period the quota is counted over, e.g. 2026-09."},"remaining":{"type":["integer","null"],"minimum":0,"description":"max(quota - used, 0). Null exactly when quota is null, because there is nothing to remain of an unmetered allowance.","x-unit":"count"},"rate":{"type":["object","null"],"description":"The allowance behind the RateLimit-* headers. Null where the key holds no plan and the platform default applies.","properties":{"perSecond":{"type":["number","null"],"x-unit":"per-second"},"burst":{"type":["number","null"],"x-unit":"count"},"maxPageSize":{"type":["number","null"],"x-unit":"count"}}}}},"OpenApiDocument":{"type":"object","required":["openapi","info","paths"],"description":"This document. A tester asked whether the endpoint describes itself and it did not, which is not a production blocker and is one fewer thing a generator has to special-case. Permissive on purpose: pinning the shape of an OpenAPI document inside an OpenAPI document buys nothing and breaks on the next spec revision.","properties":{"openapi":{"type":"string","description":"The spec version this document is written to."},"info":{"type":"object"},"paths":{"type":"object"},"components":{"type":"object"}}},"PaymentInspectRequest":{"type":"object","description":"The payload you are about to sign, and what you believe it does. Anything omitted from `expect` is not compared, and is reported as not compared.","properties":{"data":{"type":"string","description":"Calldata, 0x-prefixed. Without it nothing about the transaction is read."},"to":{"type":"string","description":"The contract being called, where you know it."},"resource":{"type":"string","description":"The x402 endpoint this payment is for. With it the bytes are compared against what the endpoint itself asks, and `againstEndpoint.standing` says how old that quote is and what this endpoint’s price has done before."},"maxQuoteAgeSeconds":{"type":"number","description":"How old a quote you are willing to act on, in seconds. YOURS, not ours: four hours is alarming for a market quote and irrelevant for a tariff unchanged since March, so a threshold published here would be a number we invented wearing the clothes of a measurement. `againstEndpoint.standing.freshness` answers against this one — `within-your-limit` or `older-than-your-limit` — and `freshEnough` is the boolean. Without it the answer says `no-limit-given` rather than grading the age, and `standing` still carries what this endpoint’s price has actually done so a limit can be chosen on evidence.","x-unit":"seconds"},"refresh":{"type":"boolean","description":"Knock on `resource` NOW rather than comparing against a stored reading, and set what comes back against the reading it replaced: `againstEndpoint.refreshed.quoteStillMatches` is true, false, or null where the two cannot be compared, with `verdict` as match/changed/unknown and `differs` naming which of amount, asset, network or payee moved. A changed PAYEE is the substitution a payment check exists to catch. It compares the same unpaid GET both times, so an endpoint whose price depends on the body or on who is asking is outside what this can tell you, and a match is what it said a moment ago rather than a promise about the next. Only for an endpoint already in the x402 catalogue we read — we do not fetch a URL because a request named it — and at most one live handshake a minute per resource, shared by every caller, because our user agent promises those hosts one unpaid handshake per resource rather than one per request. `againstEndpoint.refreshed` says whether the knock landed; a probe that failed leaves the stored reading alone and says so."},"expect":{"type":"object","properties":{"payTo":{"type":"string"},"amountAtomic":{"type":"string","description":"ATOMIC units of the token as a decimal string. Not dollars."},"chain":{"type":"string"},"validBefore":{"type":"string","description":"Seconds since the epoch."},"validAfter":{"type":"string","description":"Seconds since the epoch."}}}}},"PaymentInspected":{"type":"object","description":"What the payload says, against what you said you intended. It knows nothing about what you agreed or whether the counterparty is worth paying.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["verdict","findings","limits"],"properties":{"verdict":{"type":"string","enum":["read","mismatch","undecodable"],"description":"`read`: every comparison you asked for agreed. `mismatch`: at least one did not. `undecodable`: the call is not one this reads and NOTHING was checked, which is not a pass."},"call":{"type":["string","null"],"description":"What the bytes are, read from the selector rather than from a label."},"selector":{"type":["string","null"]},"recipient":{"type":["string","null"],"description":"Who the bytes pay."},"evidence":{"type":"object","additionalProperties":true,"description":"The common payment record, the same object on every payment answer: `listedPayee` from the seller’s catalogue entry, `onChainRecipient` from the bytes, `recipientIsListedPayee` (false is a finding, null means one side is missing), `facilitator` (the technical route, never the seller), `settlement` (`unknown` here, because nothing has been sent), `delivery` (`unevidenceable` on x402, whose rail records the payment and never the delivery) and `says`."},"amountAtomic":{"type":["string","null"],"description":"Atomic units as a decimal string. The token owns its decimals and this does not apply them."},"unlimitedAllowance":{"type":"boolean","description":"Permission to move every token of this kind you will ever hold, which outlives this transaction."},"findings":{"type":"array","items":{"type":"object"},"description":"One per check, each carrying whether it ran: observation, mismatch, or unknown. A check that could not run is never reported as one that agreed."},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ReceiptRequest":{"type":"object","required":["subject","action","reference"],"description":"What you did, in your words. The reference is stored and NOT verified: it is your evidence, and writing it here does not make it true.","properties":{"subject":{"type":"string","description":"The address you acted on."},"action":{"type":"string","enum":["payment","tool_call"],"description":"What you did."},"reference":{"type":"string","description":"A transaction hash, or the digest of a signed payload."},"chain":{"type":"string","description":"Where it settled, where it settled anywhere."},"amountUsd":{"type":"number","description":"What you committed, in US dollars.","x-unit":"usd"},"expected":{"type":"string","description":"What you expected to follow. Yours to claim, ours to store."},"deadline":{"type":"string","format":"date-time","description":"When you expected it by. A time already past is REFUSED rather than accepted, because it is almost always seconds where milliseconds were meant, and it would produce a receipt overdue the moment it was written."},"policy":{"type":"string","description":"The policy you evaluated under before acting."},"verdict":{"type":"string","description":"The decision we gave you, so a later disagreement is read against what we said at the time."}}},"SubjectWatchRequest":{"type":"object","required":["subject"],"description":"A subject to watch and which dimensions of it. Idempotent: setting the same subject again edits that watch rather than adding a second.","properties":{"subject":{"type":"string","description":"The address to watch."},"dimensions":{"type":"array","items":{"type":"string","enum":["endpoint","counterparty","risk","vault"]},"description":"All four if omitted. An unknown name is refused, never silently dropped."},"policy":{"type":"string","description":"Its verdict is read against this. An unknown name is refused rather than replaced with a default."}}},"ReceiptRecorded":{"type":"object","description":"A receipt as it was written down. The reference you sent is stored and NOT verified: a transaction hash we have not read is your evidence rather than ours.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["id","recordedAt","subject","outcome","says"],"properties":{"id":{"type":"string","description":"The receipt, for asking about it later."},"recordedAt":{"type":"string","format":"date-time","description":"When we wrote it down, which is NOT when your action happened. We have no reading of that."},"subject":{"type":"string","description":"The address the action was against, as you gave it."},"outcome":{"type":["string","null"],"description":"Always null on the way in. It stays null until something reads what actually happened, so null means \"nobody has checked\" and never \"it failed\"."},"says":{"type":"string","description":"What was and was not verified, in a sentence, so a caller storing only this field still has the caveat."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"SubjectWatchSet":{"type":"object","description":"A watch as it now stands. Idempotent per subject: setting it again edits this watch rather than creating a second.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["id","subject","dimensions","says"],"properties":{"id":{"type":"string"},"subject":{"type":"string"},"dimensions":{"type":"array","items":{"type":"string"},"description":"What is actually being watched: what you asked for, or all four if you asked for none. Never a subset of what you asked for, because an unknown name is refused rather than dropped."},"policy":{"type":["string","null"],"description":"The policy its verdict is read against, or null where none was named."},"firstReadingAt":{"type":["string","null"],"format":"date-time","description":"When the baseline this is compared against was taken. Null means no reading yet, so nothing can be reported as a change: the first run records, the second is the first that can tell you something moved."},"says":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"WatchRequest":{"type":"object","required":["kind","target","threshold"],"description":"Arm an alert or change its threshold. Changing a threshold re-arms it, so the next crossing fires.","properties":{"kind":{"enum":["endpoint","crowding","consistency","drawdown","version","proximity","withdrawable","shortfall","idle","closed","control","health","unresolved","rests"],"description":"What to watch. Every kind the evaluator computes is listed here and no others."},"target":{"type":"string","description":"What the kind is about, which is not always a vault. An instrument for `crowding`, an ADDRESS for `health`, `rests` and `endpoint`, an operator with its own prefix for `closed`, and a vault slug for the rest. This said \"an instrument for crowding, otherwise a vault slug\" while three kinds already took an address, so a caller arming one of those was told to send the wrong thing."},"threshold":{"type":"number","exclusiveMinimum":0,"maximum":3650,"description":"MOST KINDS TAKE A FRACTION, NOT A PERCENTAGE: 0.9 means 90%, and accepting both would make 0.9 ambiguous. One kind, `unresolved`, is measured in DAYS and takes 1 to 3650. A value outside its own kind's range is refused with a 422 naming the unit.","x-unit":"decimal-fraction, except `unresolved` which is days"}}},"DependenciesRequest":{"type":"object","required":["addresses"],"description":"The agents a firm relies on. At least two, because the question is what they rest on TOGETHER; at most 25, because the join is over every payment each of them has made.","properties":{"addresses":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":25,"description":"Agent addresses."}}},"Dependencies":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["agents","shared","says","cannotSee","kinds","limits"],"description":"What the agents you named rest on at once, with leads kept apart from findings.","properties":{"agents":{"type":"array","items":{"type":"string"},"description":"The agents asked about, read back and de-duplicated."},"shared":{"type":"array","description":"Parties paid by more than one of them, dependencies first.","items":{"type":"object","properties":{"address":{"type":"string"},"kind":{"type":"string","enum":["dependency","shared-counterparty"],"description":"A dependency passes all four tests. Anything else is a lead with its failed test named."},"paidBy":{"type":"array","items":{"type":"object"},"description":"Which of your agents pay it, with payments, dollars and the span."},"tests":{"type":"object","description":"repeated, oneWay, sustained, shared — all four published, because where a relationship becomes a reliance is a judgement and you may draw it elsewhere."},"says":{"type":"string"}}}},"concentration":{"type":["object","null"],"description":"The dependency reaching the most of your agents, or null. Counts DEPENDENCIES ONLY: leads in this line would let three agents who each bought something once produce \"three of your five depend on this\"."},"says":{"type":"string"},"kinds":{"type":"object","description":"What each kind means, beside the answer rather than in documentation."},"cannotSee":{"type":"array","items":{"type":"string"},"description":"Why this is a floor: most shared infrastructure leaves no payment."},"railReadAt":{"type":["string","null"],"format":"date-time","description":"When the rail behind this was last read, taken from the chain that has fallen FURTHEST BEHIND. Named to the envelope’s own reading-time pattern, so the response’s freshness is computed from it."},"read":{"type":"object","description":"HOW CURRENT THE RAIL BEHIND THIS IS. The report is recomputed from the payments table on every call, so it is never a stored snapshot — and it is only as current as the chain that has fallen FURTHEST BEHIND, which is the date given rather than the chain most recently read. `furthestBehind` names it and `stalled` lists any chain reporting an error, which may be further behind still. A dependency formed after `railReadAt` is not here yet. Do not read it as `firstAt`/`lastAt` on each party, which are when payments HAPPENED.","properties":{"chains":{"type":"number","description":"How many chains the payments reader follows."},"railReadAt":{"type":["string","null"],"format":"date-time"},"furthestBehind":{"type":["string","null"],"description":"The chain whose cursor last moved, which is what bounds this answer."},"stalled":{"type":"array","items":{"type":"string"},"description":"Chains whose reader is reporting an error, so they may be further behind than the date says."},"says":{"type":"string"}}},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentBusiness":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["address","answers","coverage","says","limits"],"description":"Six questions about one agent’s business, each answered separately and none averaged into a grade.","properties":{"address":{"type":"string","description":"The agent this is about, read back."},"answers":{"type":"array","description":"One entry per question, each with the question as the person with the money would ask it, how far we could answer, the sentence, and the figures behind it.","items":{"type":"object","properties":{"key":{"type":"string","description":"independent-customers, revenue-trend, new-versus-returning, demonstrable-delivery, recurring-costs or identity."},"asks":{"type":"string","description":"The question, phrased as an investor or operator would ask it rather than as a field name."},"answered":{"type":"string","enum":["measured","partial","unmeasured"],"description":"`unmeasured` is OUR reach and says nothing about the agent. `partial` means the reading does not carry the whole question and the sentence says which part."},"says":{"type":"string","description":"The answer, with what it does NOT support stated in the same breath."},"figures":{"type":"object","description":"The numbers behind the sentence, so a reader can do their own arithmetic rather than trusting ours."}}}},"coverage":{"type":"object","description":"How many of the six are measured, partial and unmeasured. A count, never averaged into a grade."},"says":{"type":"string","description":"How much of the question we could answer, and which parts we could not."},"recordAsOf":{"type":["string","null"],"format":"date-time","description":"When the nightly counterparty record behind most of these figures was computed. The revenue months are read live."},"answeredStates":{"type":"object","description":"What each of the three states means, beside the answer rather than in documentation somebody has to find."},"limits":{"type":"string","description":"The four things the data invites and does not support."},"commerce":{"type":"object","description":"Three figures that nest and are never added up: `settled` (paid on-chain to this address), `serviceLinked` (of that, tied to a named service or order: an x402 payee that lists a paid resource, an ACP job), `deliveryEvidenced` (of that, with a recorded outcome: an ACP job completed). `deliveryUnevidenceable` counts the payments whose rail cannot record delivery at all, x402 among them, so $0 delivered there is what the rail allows and not a failure of the seller. `says` states all four in one line."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ExitScreen":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["amountUsd","population","counts","verdicts","cannotSee","limits","vaults"],"description":"One size, asked of every vault whose settled withdrawals we have read.","properties":{"amountUsd":{"type":"number","description":"The size asked about, read back, so an answer cannot be attached to the wrong one.","x-unit":"usd"},"population":{"type":"object","description":"How many vaults carry a withdrawal history and how many do not. A vault without one is UNREAD rather than untested and is counted in neither verdict.","properties":{"withHistory":{"type":"number","description":"Open vaults whose settled withdrawals we have read."},"withoutHistory":{"type":"number","description":"Open vaults we have never read withdrawals for. Not a zero and not a verdict."},"says":{"type":"string","description":"Both figures in one sentence, so the denominator travels with the answer."}}},"counts":{"type":"object","description":"How many vaults fall in each verdict, over the whole population rather than over the rows listed.","properties":{"paidInOne":{"type":"number","description":"A single settled withdrawal at least this large has been recorded."},"paidAcrossADay":{"type":"number","description":"This much left in one day and never in one withdrawal."},"neverAskedThisSize":{"type":"number","description":"Nothing this large has been withdrawn. Not a refusal."}}},"verdicts":{"type":"object","description":"What each verdict means, beside the answer rather than in documentation you have to find."},"cannotSee":{"type":"array","items":{"type":"string"},"description":"What a record of settled withdrawals structurally cannot contain."},"limits":{"type":"string","description":"Why this is a record of the past and never a forecast."},"vaults":{"type":"array","description":"Each vault with its verdict and the figures behind it.","items":{"type":"object","properties":{"slug":{"type":"string","description":"The vault."},"name":{"type":["string","null"],"description":"Its name where we hold one."},"chain":{"type":"string","description":"The network it lives on."},"verdict":{"type":"string","enum":["paid-in-one","paid-across-a-day","never-asked-this-size"],"description":"Which of the three this vault answers for YOUR size."},"capitalUsd":{"type":["number","null"],"description":"What it holds, at its last reading. Null where unvalued.","x-unit":"usd"},"declaredWithdrawableUsd":{"type":["number","null"],"description":"The venue’s own figure at its last reading. A LEVEL, never divided by the flow figures beside it.","x-unit":"usd"},"largestExitUsd":{"type":["number","null"],"description":"The largest single settled withdrawal ever recorded here.","x-unit":"usd"},"largestExitAt":{"type":["string","null"],"format":"date-time","description":"When that withdrawal settled. A large exit three years ago is weaker evidence than one last week and the date is how a reader tells."},"largestExitDayUsd":{"type":["number","null"],"description":"The busiest single DAY of withdrawals. Never averaged with the single largest.","x-unit":"usd"},"withdrawalsSeen":{"type":["number","null"],"description":"How many settled withdrawals we hold for it."},"historyFrom":{"type":["string","null"],"format":"date-time","description":"How far back the history reaches. Null means nobody has ever looked, which is why such vaults are excluded rather than scored."}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ExitConfidence":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["slug","amountUsd","components","summary","says","cannotSee","limits"],"description":"Six readings about one vault and one amount, and the worst of them as the answer.","properties":{"slug":{"type":"string","description":"The vault this is about, read back, so an answer cannot be attached to the wrong one."},"amountUsd":{"type":["number","null"],"description":"The amount asked about. Null means the sizing component did not run.","x-unit":"usd"},"summary":{"type":"string","enum":["supports","against","unknown"],"description":"The WORST component, never an average: a queue in front of you is not offset by a long history. `unknown` outranks `supports` because a gap we could not read is not a pass."},"says":{"type":"string","description":"The worst component in one sentence, with what it does and does not mean."},"components":{"type":"array","description":"Each reading on its own, with the question it answers in the reader’s words.","items":{"type":"object","properties":{"key":{"type":"string","description":"settled-withdrawals, free-now, your-amount, queue, utilisation, who-can-change-it or still-open."},"asks":{"type":"string","description":"The question this component answers, phrased as a holder would ask it."},"verdict":{"type":"string","enum":["supports","against","unknown","not-asked","not-applicable"],"description":"THREE OF THESE DO NOT VOTE AND THEY ARE NOT THE SAME. `unknown` is OUR gap: we looked and could not read it, and it is the only one that lowers the summary. `not-asked` is the caller’s: nothing to read because they did not send the field, and sending it fixes this. `not-applicable` is the world’s: this venue has no such thing — only two venues have an exit queue to be behind — and nothing anybody does produces an answer."},"says":{"type":"string","description":"What was read, with the figures and when they were taken."}}}},"cannotSee":{"type":"array","items":{"type":"string"},"description":"What this assessment structurally cannot contain, so a supporting answer is never read as an assured exit."},"verdicts":{"type":"object","description":"What each verdict means, published beside the answer rather than in documentation somebody has to find."},"limits":{"type":"string","description":"Why the answer is the worst component rather than an average, and why no sentence here contains the word guarantee."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"EvidenceRegressions":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["checked","lost","says"],"description":"Per fact, the open vaults that carried an established reading at the previous check and do not now.","properties":{"checked":{"type":"boolean","description":"FALSE where the comparison has not run or we could not read what it wrote. Everything else is then empty and means nothing: an empty `lost` on an unchecked answer is not a clean result, and treating it as one is the mistake this field exists to stop."},"at":{"type":["string","null"],"description":"When the comparison ran."},"population":{"type":["integer","null"],"description":"Open vaults compared, the denominator for everything here."},"lost":{"type":"array","description":"Facts that lost ground, biggest first. Each names the vaults, because a count says something is wrong and a name lets somebody act.","items":{"type":"object"}},"gained":{"type":"array","description":"Facts that gained since the previous check. Carried because a measure that only ever reports bad news is a mood.","items":{"type":"object"}},"vaultsAffected":{"type":["integer","null"],"description":"Distinct vaults that lost ANY reading, counted once. Never the sum of the per-fact counts: a vault that lost two readings is one vault with a problem."},"says":{"type":"string","description":"What was lost and by how much, naming the largest, and stating that a regression can be a correction."},"cannotSee":{"type":"array","items":{"type":"string"},"description":"What a clean answer here still does not establish."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"KnockRequest":{"type":"object","required":["resource"],"description":"One handshake with one x402 endpoint. Send it without `payment` to read the terms; send `payment` to present an authorisation you signed yourself and get what the seller serves. We never hold your key: this takes a finished authorisation and forwards it.","properties":{"resource":{"type":"string","format":"uri","description":"The http(s) endpoint to knock on. It must be one the x402 catalogue already holds, and it may not be on our own host: we do not fetch a URL because a request named it, and what we sell has one door."},"payment":{"type":"string","description":"A finished x402 `exact` payment, base64, as your wallet produced it. Sent to the seller under BOTH `X-PAYMENT` and `PAYMENT-SIGNATURE`, because v1 and v2 sellers read different names and a buyer who picks one is refused for a reason neither side can see."},"fill":{"type":"object","description":"Values for slots the seller’s own URL declares, e.g. `{\"doi\": \"10.1000/xyz\"}` for a resource listed as `…?doi={doi}`. Only a declared slot is accepted, values are percent-encoded, and the result is verified to reach the same origin and path shape as the catalogue entry, so a value can never choose the host.","additionalProperties":{"type":"string"}},"send":{"type":"object","description":"A JSON body, for the many x402 endpoints that take POST rather than GET."},"method":{"type":"string","enum":["GET","POST"],"description":"Defaults to POST where `send` is present and GET otherwise."},"describe":{"type":"boolean","description":"True to include `blocks`: the same reading our own pages draw the answer from. Always read as a stranger’s payload, so no unit is added and no tone inferred."}}},"Knock":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["resource","knocked","says"],"description":"What one endpoint answered when we knocked on it for you, and the terms it published.","properties":{"resource":{"type":"string","description":"The endpoint, as the catalogue holds it. Read back, so an answer cannot be attached to the wrong one."},"knocked":{"type":"boolean","description":"FALSE where the resource is not in the catalogue we read, which is our reach rather than a fault of theirs. Everything below is then absent."},"knockedOn":{"type":"string","description":"The URL actually requested, once any slot values were in it."},"askedWith":{"type":"object","description":"The slot values we put in, read back. Null where none were sent."},"outcome":{"type":"string","enum":["served","quoting","charging","rejected","refused","gone","throttled","error","unreachable"],"description":"`served` is 200 with an answer. `quoting` is 402 with terms we could read and `charging` 402 without. `rejected` is 402 on a knock that CARRIED a payment, which is the seller refusing what you signed and a different fact from the first 402. `refused` is 401 or 403, where payment is not what is being asked for."},"httpStatus":{"type":"integer","description":"What the host answered, unchanged."},"latencyMs":{"type":"integer","description":"How long it took us, which is a fact about this request as much as about the host.","x-unit":"seconds"},"paid":{"type":"boolean","description":"Whether an authorisation travelled with this knock. Stated rather than left to be inferred from the outcome."},"json":{"type":"object","description":"What was served, parsed, where it was JSON and whole. Theirs, not ours, and not stored by us."},"text":{"type":"string","description":"What was served as text, where it was not JSON or was cut short at 512 KB."},"truncated":{"type":"boolean","description":"TRUE where the answer was cut at 512 KB, and then `json` is null even if the cut happens to parse: half a list drawn as a whole one is a figure nobody could stand behind."},"contentType":{"type":"string","description":"As the host declared it."},"accepts":{"type":"array","description":"EVERY set of terms the seller offered, unchanged. Not just the first: sellers on two rails often put a leg first that a browser wallet cannot sign.","items":{"type":"object"}},"offer":{"type":"object","description":"The one set of terms a browser wallet can meet, flattened to what signing needs. `amountRaw` is a STRING in the asset’s smallest unit, because JSON has no integer wide enough and an amount silently turned into a float is a hundred-fold error. `approxUsd` is present ONLY where the seller’s own catalogue entry publishes both a dollar figure and a base-unit figure for the SAME token, which makes the scale theirs rather than one we guessed: nothing in a payment-requirements document names a token’s decimals, and it is null wherever that pair is missing or is for another token. Null where none of the terms can be met here."},"signable":{"type":"array","description":"EVERY leg a browser wallet could sign, in the seller’s own order, each described exactly as `offer` is. A real offer has several: agent402.tools publishes nine on 2026-10-20. Which one to pay on is a question only the payer can answer, because the chain is inside the signed message and a signature made on a chain they hold nothing on is valid and fails at the transfer. `offer` is the first of these, which is the seller’s preference and not a recommendation of ours.","items":{"type":"object"}},"fault":{"type":"string","enum":["no-terms","not-exact","no-asset","no-recipient","no-amount","no-network","not-evm","no-token-domain"],"description":"Why none of the offered terms can be signed from a browser. `not-evm` is a real offer on a chain a browser EVM wallet cannot sign for, which is different from a malformed one."},"faultSays":{"type":"string","description":"The same thing in a sentence, because somebody about to sign away money is owed one."},"sellerSays":{"type":"string","description":"Why the seller refused, IN THEIR WORDS, lifted from the 402 document. Null where they gave none, which is said rather than filled in."},"settlementState":{"type":"string","enum":["none-presented","claimed-by-seller","unknown"],"description":"WHAT THIS ANSWER ESTABLISHES ABOUT THE MONEY, which is less than the status code suggests. `none-presented`: no authorisation was handed over, so there is nothing that could settle. `claimed-by-seller`: they returned a receipt — THEIR claim, carried, never verified by us. `unknown`: an authorisation WAS presented and this answer says nothing about its fate. A 402 or a timeout after a payment reads `unknown`: it does NOT establish that the money is safe."},"authorizationState":{"type":"string","enum":["none-signed","presented-may-still-be-usable"],"description":"WHAT MAY STILL BE DONE WITH WHAT THE CALLER SIGNED. `none-signed`: nothing was signed, so nothing can be submitted. `presented-may-still-be-usable`: it was handed over and a valid authorisation stays usable until it expires or its nonce is spent — so signing again with a fresh nonce can be a SECOND payment. Check the previous transaction before you do."},"offering":{"type":"object","description":"What the SELLER says this endpoint is and returns: `name`, `description`, and `example`, a specimen answer from their own bazaar extension. Theirs and a claim, not a promise of ours, and null where they publish none of it."},"settlement":{"type":"string","description":"The seller’s settlement receipt, verbatim, where they sent one. THEIR claim that the authorisation reached a chain, carried as theirs and never restated as a reading of ours."},"blocks":{"type":"array","description":"Present only with `describe: true`. The answer read as a person reads it: tiles, tables, pairs and charts where the shape allows one.","items":{"type":"object"}},"says":{"type":"string","description":"What happened, in one sentence. On a `rejected` knock it says the seller refused the authorisation AND that on-chain settlement is not established by that answer — read `settlementState` rather than inferring it from the status."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CheckActionRequest":{"type":"object","description":"One proposed financial action. Every field is optional except a subject: send `recipient` for a payment, or `subject` for allocate_capital. The more you send, the more comparisons run — and `ran` on the answer says which did not and why, so a field you left out never reads as a check that passed.","properties":{"action":{"type":"string","enum":["pay","allocate_capital","connect_mcp","call_tool"],"description":"Defaults to pay."},"recipient":{"type":"string","description":"The address about to be paid. Also the default subject for a payment."},"subject":{"type":"string","description":"For allocate_capital: the vault slug. Refused rather than guessed, because answering about the wrong subject is the failure this route exists to prevent."},"chain":{"type":"string","description":"The chain it is about to be sent on, e.g. base."},"from":{"type":"string","description":"The address the transaction would be sent FROM. Only used to SIMULATE it: an `eth_call` without it runs as the zero address, and a transfer from the zero address reverts for a reason that is about our request rather than about your transaction."},"valueWei":{"type":"string","description":"Native value in wei, where the transaction carries any. Simulation only."},"asset":{"type":"string","description":"The TOKEN you are paying in. Compared against the one the seller’s listing prices the endpoint in: a payment in a token the seller does not credit leaves your side and arrives nowhere, and every other check here passes on it."},"amountUsd":{"type":"number","minimum":0,"description":"What is about to be sent, in dollars. Left out, the amount checks say they did not run rather than passing.","x-unit":"usd"},"resource":{"type":"string","format":"uri","description":"The http(s) URL of the endpoint being bought. Unlocks the catalogue comparison and our unpaid handshake with it."},"calldata":{"type":"string","description":"The hex bytes you are about to sign. This is what makes the strongest check possible: that the bytes pay the address you asked about. Left out, the transaction is reported as UNREAD rather than fine."},"policy":{"type":"string","description":"A policy slug or version from /v1/policies. Defaults to conservative."}}},"CheckAction":{"type":"object","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["proposal","verdict","says","crossChecks","parts","ran","limits"],"description":"One answer about one proposed action, assembled from five readings and from what they say about each other.","properties":{"proposal":{"type":"object","description":"What was asked, read back, so an answer cannot be attached to the wrong action."},"verdict":{"type":"string","enum":["allow","review","abstain","unsupported"],"description":"The policy’s decision, worsened by the cross-checks and never improved by them: a comparison between two readings is not evidence that something the policy objected to is fine."},"says":{"type":"string","description":"The worst thing found, in one sentence, with the limits of the whole check after it."},"crossChecks":{"type":"array","description":"THE REASON THIS IS NOT FIVE REQUESTS. Each entry names the TWO readings that disagree, in `between`, and none of them is an accusation. `tone` is bad, warn or good — the good ones are published too, because a comparison that ran and agreed is different from one that never ran.","items":{"type":"object","properties":{"key":{"type":"string"},"tone":{"type":"string","enum":["bad","warn","good"]},"between":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},"says":{"type":"string"}}}},"parts":{"type":"object","description":"Each reading on its own: policy, transaction, simulation, listing, endpoint, settledOn. Every one of them except the simulation is also reachable free on its own route."},"ran":{"type":"object","description":"Which parts ran and why each one did not. A check that did not happen and a check that passed must never look the same."},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ClaimProof":{"type":"object","required":["address","signature"],"description":"A signature over the exact challenge text for one address.","properties":{"address":{"type":"string","description":"The 0x address you are proving control of."},"signature":{"type":"string","description":"A personal_sign signature over the EXACT `message` from /v1/claim/challenge, line breaks included. A signature over anything else recovers a different address and is reported as signed-by-another-key."}}},"RegistryDeclaration":{"type":"object","required":["address","chain","venue"],"description":"A strategy declared before it runs. POST it once WITHOUT `signature` and the 422 hands back the exact bytes to sign and their digest, so a client never has to reimplement the format; POST it again with the signature to register.","properties":{"address":{"type":"string","description":"The declaring address, lowercased on arrival."},"chain":{"type":"string"},"venue":{"type":"string"},"management":{"enum":["agent","human","hybrid"],"default":"agent","description":"Anything else is read as `agent` rather than refused, because a declaration is the claim being recorded."},"name":{"type":"string","maxLength":120},"thesis":{"type":"string","maxLength":4000},"instruments":{"type":"array","maxItems":40,"items":{"type":"string"},"description":"Uppercased on arrival."},"maxLeverage":{"type":["number","null"],"x-unit":"multiple"},"maxDrawdownPct":{"type":["number","null"],"description":"A decimal fraction, not a percentage, despite the name it has carried since v0.1.","x-unit":"decimal-fraction"},"strategyHash":{"type":["string","null"]},"model":{"type":["string","null"],"maxLength":80},"modelVersion":{"type":["string","null"],"maxLength":80},"promptHash":{"type":["string","null"],"maxLength":80},"configHash":{"type":["string","null"],"maxLength":80},"codeRef":{"type":["string","null"],"maxLength":200},"dataSources":{"type":["string","null"],"maxLength":500},"oversight":{"type":["string","null"],"maxLength":500},"declaredOn":{"type":"string","format":"date","description":"Defaults to today's date where absent."},"signature":{"type":"string","description":"personal_sign / EIP-191 over the text the 422 returns. Absent, the request is not an error: it is how a client asks for the bytes."}}},"RiskHolding":{"type":"object","required":["vault","usd"],"properties":{"vault":{"type":"string","description":"A vault slug, or its contract address. Either resolves; unknown references are named in the response rather than dropped."},"usd":{"type":"number","exclusiveMinimum":0,"description":"YOUR exposure in dollars, not the size of the vault. The distinction is the whole point of the endpoint.","x-unit":"usd"}}},"RiskRequest":{"type":"object","required":["holdings"],"properties":{"holdings":{"type":"array","minItems":1,"maxItems":50,"items":{"$ref":"#/components/schemas/RiskHolding"},"description":"At least one and at most fifty. An empty array is refused with a 400 rather than priced as nothing."},"instruments":{"type":"array","items":{"type":"string"},"description":"Restrict the shock to these instruments, e.g. [\"BTC\"]. Omitted, every instrument the holdings touch is shocked."},"shocks":{"type":"array","items":{"type":"number","minimum":-0.95,"maximum":0.95},"description":"Fractional moves to price, e.g. [-0.1, -0.2]. A decimal fraction, not a percentage.","x-unit":"decimal-fraction"}}},"CommitRequest":{"type":"object","required":["digest","seq","leaf"],"properties":{"digest":{"type":"string","pattern":"^0x[0-9a-f]{64}$","description":"The digest of the pre-registration this commitment attaches to. A commitment with no verified registration behind it is refused with a 404."},"seq":{"type":"integer","minimum":0,"description":"Sequence number, gapless. A gap is refused: the whole value of a commit chain is that nothing can be dropped from it later.","x-unit":"count"},"leaf":{"type":"string","pattern":"^0x[0-9a-f]{64}$","description":"The 32-byte keccak hash being committed to."}}},"RevealIntent":{"type":"object","required":["instrument"],"properties":{"instrument":{"type":"string","description":"Uppercased on arrival, so \"btc\" and \"BTC\" are the same intent."},"side":{"type":"string"},"size":{"type":"number"},"price":{"type":"number","x-unit":"usd"}}},"RevealRequest":{"type":"object","required":["digest","seq","nonce","intent"],"properties":{"digest":{"type":"string","pattern":"^0x[0-9a-f]{64}$"},"seq":{"type":"integer","minimum":0,"x-unit":"count"},"nonce":{"type":"string","description":"The nonce used when the leaf was built. Without it the reveal cannot be matched to the commitment."},"intent":{"$ref":"#/components/schemas/RevealIntent"}}},"ResolveQuestion":{"oneOf":[{"$ref":"#/components/schemas/ResolveThresholdQuestion"},{"$ref":"#/components/schemas/ResolveExposureQuestion"},{"$ref":"#/components/schemas/ResolvePlainQuestion"}],"discriminator":{"propertyName":"kind","mapping":{"max_drawdown_below":"#/components/schemas/ResolveThresholdQuestion","return_above":"#/components/schemas/ResolveThresholdQuestion","leverage_below":"#/components/schemas/ResolveThresholdQuestion","instrument_exposure_below":"#/components/schemas/ResolveExposureQuestion","was_forced_out":"#/components/schemas/ResolvePlainQuestion","still_operating":"#/components/schemas/ResolvePlainQuestion"}}},"ResolveWindow":{"type":"object","required":["vault","from","to"],"properties":{"vault":{"type":"string","minLength":1,"description":"The vault, as ASPERN slugs it. /v1/vaults lists them."},"from":{"type":"integer","format":"int64","description":"Start of the window, INCLUSIVE, in milliseconds since the Unix epoch. Not an ISO string.","x-unit":"timestamp"},"to":{"type":"integer","format":"int64","description":"End of the window, inclusive, in milliseconds since the Unix epoch. Must be after `from`.","x-unit":"timestamp"}}},"ResolveThresholdQuestion":{"type":"object","required":["kind","vault","from","to","threshold"],"properties":{"kind":{"type":"string","enum":["max_drawdown_below","return_above","leverage_below"]},"vault":{"type":"string","minLength":1,"description":"The vault, as ASPERN slugs it. /v1/vaults lists them and /v1/examples names working ones."},"from":{"type":"integer","format":"int64","description":"Start of the window, INCLUSIVE, in milliseconds since the Unix epoch. Not an ISO string.","x-unit":"timestamp"},"to":{"type":"integer","format":"int64","description":"End of the window, inclusive, in milliseconds since the Unix epoch. Must be after `from`.","x-unit":"timestamp"},"threshold":{"type":"number","x-unit":"depends-on-kind","description":"A fraction for a drawdown or a return — 0.1 is ten per cent — and a MULTIPLE for leverage, so the unit depends on `kind` and is annotated as such rather than being guessed at. Compared strictly: a drawdown of exactly the threshold is a breach, because \"below\" is not \"at\"."}},"example":{"kind":"max_drawdown_below","vault":"hyperliquidity-provider-hlp-dfc24b","from":1735689600000,"to":1751328000000,"threshold":0.1}},"ResolveExposureQuestion":{"type":"object","required":["kind","vault","from","to","threshold","instrument"],"properties":{"kind":{"type":"string","enum":["instrument_exposure_below"]},"vault":{"type":"string","minLength":1,"description":"The vault, as ASPERN slugs it."},"from":{"type":"integer","format":"int64","description":"Start of the window, inclusive, in milliseconds since the Unix epoch.","x-unit":"timestamp"},"to":{"type":"integer","format":"int64","description":"End of the window, inclusive, in milliseconds since the Unix epoch.","x-unit":"timestamp"},"threshold":{"type":"number","x-unit":"decimal-fraction","description":"The share of the gross book allowed, as a fraction."},"instrument":{"type":"string","description":"The instrument the limit is about, e.g. BTC."}},"example":{"kind":"instrument_exposure_below","vault":"hyperliquidity-provider-hlp-dfc24b","from":1735689600000,"to":1751328000000,"threshold":0.5,"instrument":"BTC"}},"ResolvePlainQuestion":{"type":"object","required":["kind","vault","from","to"],"properties":{"kind":{"type":"string","enum":["was_forced_out","still_operating"],"description":"Neither takes a threshold: one asks whether the venue forced the book out, the other whether the strategy was still trading."},"vault":{"type":"string","minLength":1,"description":"The vault, as ASPERN slugs it."},"from":{"type":"integer","format":"int64","description":"Start of the window, inclusive, in milliseconds since the Unix epoch.","x-unit":"timestamp"},"to":{"type":"integer","format":"int64","description":"End of the window, inclusive, in milliseconds since the Unix epoch.","x-unit":"timestamp"}},"example":{"kind":"was_forced_out","vault":"hyperliquidity-provider-hlp-dfc24b","from":1735689600000,"to":1751328000000}},"X402PaymentRequired":{"type":"object","required":["x402Version","accepts"],"description":"The x402 v2 payment offer. Not a problem document: the request was well formed and the answer is a price. Served until 2026-09-24 as x402 v1, which named the amount `maxAmountRequired` and the network by nickname; v1 is no longer served because a v1 offer cannot be paid by a current client, whose signature arrives in a header v1 does not read.","properties":{"x402Version":{"type":"integer","description":"2."},"error":{"type":"string"},"resource":{"type":"object","description":"What is being bought.","properties":{"url":{"type":"string","description":"Absolute URL of the priced call."},"description":{"type":"string"},"mimeType":{"type":"string"}}},"accepts":{"type":"array","description":"Every way this call may be paid for. One entry today.","items":{"type":"object","properties":{"scheme":{"type":"string","description":"\"exact\": an EIP-3009 authorisation for the stated amount."},"network":{"type":"string","description":"CAIP-2, e.g. eip155:8453. A nickname such as \"base\" is still accepted on the way back in."},"amount":{"type":"string","description":"Atomic units of `asset`. A string because it is a token amount."},"asset":{"type":"string","description":"The token contract the authorisation must be against."},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer","x-unit":"seconds"},"extra":{"type":"object","description":"The token's own EIP-712 domain. Without it a client signs against the wrong name and no signature can verify.","properties":{"name":{"type":"string"},"version":{"type":"string"}}}}}},"extensions":{"type":"object","description":"Protocol extensions. `bazaar` carries how to call this endpoint and one real example of what comes back, for discovery crawlers."},"priceUsd":{"type":"number","description":"Ours, beside the protocol fields: the same amount in dollars.","x-unit":"usd"},"freeAlternative":{"type":"object","description":"Ours: the free endpoint that answers the nearest question, so a buyer is never charged for something already given away.","properties":{"resource":{"type":"string"},"says":{"type":"string"}}}}},"PaymentRequired":{"type":"object","required":["error","capability","tier","reason"],"description":"Not an RFC 9457 problem document. The request was well formed and the answer is a price, so the body is an offer: what is missing, why, and where to settle it.","properties":{"forSale":{"type":"boolean","description":"Whether this capability can be bought at all right now. False means the endpoint is real, the refusal is correct, and no plan on sale carries it: a product decision rather than something you have not bought yet. An agent should stop rather than retry. The message says the same in words."},"perCall":{"type":["object","null"],"description":"The same call bought one at a time over x402, where this route is sold that way — null where it is not. Carries the full offer: `accepts` with the amount, asset, CAIP-2 network and address to pay, plus `priceUsd`. Present BESIDE `eligiblePlans` rather than instead of it: an agent cannot buy a monthly plan (it needs a person, a card and a key) and a person evaluating the platform should not be sold a tenth of a dollar without learning a plan exists. Neither reader is steered past the road that suits them.","properties":{"x402Version":{"type":"integer"},"accepts":{"type":"array","items":{"type":"object"}},"priceUsd":{"type":"number","x-unit":"usd"},"says":{"type":"string","description":"When a plan is the cheaper road, in words."}}},"eligiblePlans":{"type":"array","description":"Plans on sale that carry the missing capability, cheapest first, each with a checkout URL. An empty array means no plan carries it — a capability we do not sell rather than one you have not bought.","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"monthlyUsd":{"type":"number","x-unit":"usd"},"annualUsd":{"type":"number","x-unit":"usd"},"quotaPerMonth":{"type":["integer","null"],"description":"Requests a month, or null where the plan is unmetered.","x-unit":"count"},"checkoutUrl":{"type":"string"}}}},"checkoutUrl":{"type":"string","description":"Where a person goes. Agents should read eligiblePlans."},"error":{"type":"string","enum":["payment_required"]},"message":{"type":"string","description":"Prose, for a person. Branch on `capability` and `reason`."},"capability":{"type":"string","description":"The capability the caller lacks, e.g. `cascade.read`. This is the field that says what to buy."},"tier":{"type":"string","description":"The tier the caller resolved to when the refusal was decided."},"reason":{"type":"string","enum":["tier","arrears","quota"],"description":"tier — the plan does not carry it. arrears — it does, and something is owed, so the paid surface is closed until settled. quota — the monthly allowance is spent. Only the first is a reason to buy anything."},"network":{"type":"string","description":"Which chain a settlement would be read on."},"accepts":{"type":"array","description":"Per-request payment offers, where any are open. Empty means this capability is sold by plan rather than by the call.","items":{"type":"object"}},"settlement":{"type":"object","description":"How to pay, and what is missing if the caller cannot yet.","properties":{"supported":{"type":"string"},"note":{"type":"string"},"address":{"type":["string","null"]}}},"docs":{"type":"string","format":"uri"}}},"AccountDocument":{"type":"object","description":"The account behind the calling key.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","description":"The account behind an API key: what it holds, what it owes, and what it is allowed.","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]}}},"tier":{"type":"string","description":"What the key grants on paper."},"effectiveTier":{"type":"string","description":"What it grants right now. Drops to PUBLIC while anything is owed, which is why the two are separate fields."},"plan":{"type":"object","description":"The plan whose rate is enforced, and what it allows. Read off the same row the limiter uses.","properties":{"slug":{"type":["string","null"]},"name":{"type":["string","null"]},"rate":{"type":["object","null"],"properties":{"perSecond":{"type":["number","null"],"x-unit":"per-second"},"burst":{"type":["number","null"],"x-unit":"count"},"maxPageSize":{"type":["number","null"],"x-unit":"count"}}},"capabilities":{"type":"array","items":{"type":"string"},"description":"Exactly what this key may call."}}},"balanceUsd":{"type":["number","null"],"x-unit":"usd"},"owedUsd":{"type":"number","x-unit":"usd"},"quota":{"$ref":"#/components/schemas/QuotaState"},"subscriptions":{"type":"array","items":{"type":"object"}},"deposit":{"type":["object","null"],"description":"Where to send credit, once an address has been issued."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"QuotaState":{"type":["object","null"],"description":"Calls allowed and spent in the current period, resolved from the live plan rather than from a figure copied when the key was made.","properties":{"used":{"type":"integer","minimum":0,"x-unit":"count"},"limit":{"type":["integer","null"],"minimum":0,"description":"Null means unmetered, not zero.","x-unit":"count"},"period":{"type":"string"}}},"CollateralCrowdDocument":{"type":"object","description":"Who lends against one collateral. The denominator is the vaults we track and never a market.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"collateral":{"type":"string","description":"The asset borrowers pledge, as the venue writes it."},"readAt":{"type":["string","null"],"description":"When the crowds were last built."},"vaults":{"type":"integer","minimum":0,"description":"Open vaults WE TRACK that lend against it.","x-unit":"count"},"suppliedUsd":{"type":"number","description":"What they have supplied between them, in US dollars.","x-unit":"usd"},"venues":{"type":"array","items":{"type":"string"},"description":"The venues the crowd spans, biggest first. A crowd on one venue is one venue’s problem."},"members":{"type":"array","items":{"type":"object"},"description":"Each vault in the crowd with what it supplied and its share OF THE CROWD. This is the paid half; the totals above are free on the vault answer."},"membersListed":{"type":"integer","minimum":0,"description":"Beside `vaults`, so a reader who sees fewer rows than vaults is owed the reason rather than left to assume a truncation."},"limits":{"type":"string"}},"required":["collateral","vaults","suppliedUsd","members"]},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"WatchesDocument":{"type":"object","description":"The watches on this account, and whether a firing could reach anyone.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"watches":{"type":"array","items":{"type":"object"}},"endpoints":{"type":"array","items":{"type":"object"},"description":"Where a firing would go. An empty list is the reason an alert reached nobody."},"recent":{"type":"array","items":{"type":"object"},"description":"Recent firings, delivered or not."},"note":{"type":"string","description":"Present only when something about the setup means a firing will not arrive."}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AttestationDocument":{"type":"object","description":"What a registered sequence can still be said to prove.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["strategy","digest","grade"],"description":"Whether a committed sequence is intact. A gap voids the grade permanently — the point of the record is that it cannot be repaired after the fact.","properties":{"strategy":{"type":"string"},"digest":{"type":"string","description":"32 bytes of hex, 0x-prefixed."},"grade":{"type":"string","description":"A where the sequence is committed and intact. A- where the strategy is pre-registered but has committed nothing, which fixes what it claims to be and not what it did."},"note":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"PlansDocument":{"type":"object","description":"What is sold, and on what terms.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["plans"],"description":"The price list. Every field a customer is sold on is here, and /v1/account reports the same figures for the plan they hold — so the two can be compared and a disagreement is a defect rather than a matter of opinion.","properties":{"plans":{"type":"array","items":{"type":"object","required":["slug","name","kind","tier"],"properties":{"slug":{"type":"string","description":"The stable id. Branch on this; names change."},"name":{"type":"string"},"kind":{"type":"string","enum":["api","platform"],"description":"An api plan carries an API allowance. A platform plan is website access and carries none."},"tier":{"type":"string"},"monthlyUsd":{"type":["number","null"],"x-unit":"usd"},"annualUsd":{"type":["number","null"],"x-unit":"usd"},"annualDiscountPct":{"type":["number","null"],"x-unit":"decimal-fraction"},"quotaPerMonth":{"type":["integer","null"],"description":"Calls a month. Null means unmetered, not zero.","x-unit":"count"},"limits":{"type":"object","properties":{"ratePerSecond":{"type":["number","null"],"x-unit":"per-second"},"burst":{"type":["number","null"],"x-unit":"count"},"maxPageSize":{"type":["number","null"],"x-unit":"count"},"webhookDestinations":{"type":["number","null"],"x-unit":"count"},"overageUsdPer100k":{"type":["number","null"],"x-unit":"usd"}}},"description":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"PopulationsDocument":{"type":"object","description":"What the population keys mean.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","required":["populations"],"description":"Every population key this API can serve in meta.coverage.population, declared once so two surfaces cannot invent two spellings of one population. Resolve a single key with ?key=; an undeclared key answers 404 rather than an empty list, because an empty list cannot be told from a population that exists and has no members.","properties":{"populations":{"type":"array","items":{"type":"object","required":["key","means","decomposed"],"properties":{"key":{"type":"string","description":"The joinable name. This is what meta.coverage.population carries."},"means":{"type":"string","description":"What the population is, in a sentence you can act on rather than a category label."},"decomposed":{"type":"boolean","description":"True where the narrowing is published stage by stage. False is an honest state, not a gap: an invented intermediate stage would imply a count nobody took."},"narrowingAt":{"type":["string","null"],"description":"Where every row that falls out is named, with the reason. Null where the population is declared but not decomposed."}}}},"note":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"WatchAccepted":{"type":"object","description":"A watch, after the write.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","description":"The watch as it now stands. Returned in full rather than as an acknowledgement, so a caller does not have to re-read to learn what it created.","properties":{"id":{"type":"string"},"kind":{"type":"string"},"target":{"type":["string","null"]}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"Availability":{"type":"object","required":["status"],"description":"Whether the analysis could be produced, and if not, which kind of absence it is. The five states are five different sentences that were previously compressed into one status code, and a caller can act on them differently.","properties":{"status":{"type":"string","enum":["available","insufficient_data","not_measured","not_applicable","unsupported"],"description":"available — it worked, and `data` is populated. insufficient_data — we measure this and there is not enough history yet; retrying later may work. not_measured — we do not compute this for this vault; nothing is broken, it is not in scope. not_applicable — the metric makes no economic sense here, and never will. unsupported — our methodology cannot read this implementation. That one is ours to fix."},"observed":{"type":"number","description":"How much of the input we hold. Present only with `required`: one of them alone is a number with no denominator, which reads as precision and carries none.","x-unit":"count"},"required":{"type":"number","description":"How much the measure needs before it will report.","x-unit":"count"},"unit":{"type":"string","description":"What `observed` and `required` are counted in — fills, days, observations."},"reasonCode":{"type":"string","description":"Stable and machine-readable. Present on every answer that is not `available`. Branch on this; `detail` is prose and may be reworded without notice.","enum":["NO_DEPOSITOR_REGISTER","NO_REDEMPTION_TERMS","NO_FUNDING_WINDOW","TOO_FEW_FILLS","NO_FILL_HISTORY","NO_POSITION_SNAPSHOTS","NO_INSTRUMENT_SNAPSHOTS","NO_NAV_HISTORY","NO_REGISTRATION","NOT_HELD_BY_ANY_VAULT","NO_OFFSETTING_BOOKS","VENUE_DOES_NOT_PUBLISH_IT"]},"detail":{"type":"string","description":"Prose, for a person. May improve over time; never parse it."},"retryable":{"type":"boolean","description":"Whether asking again later could produce a result. True for insufficient_data, false for the states that describe something permanent — the difference between a client that polls sensibly and one that polls forever."},"needs":{"type":"string","description":"What would have to become true for this to be answerable. Absent where we cannot say."},"observedAt":{"type":"string","format":"date-time","description":"RFC 3339. When we last looked."}}},"AnalyticalResponse":{"type":"object","required":["slug","metric","availability","data"],"description":"The same envelope whether the analysis was produced or not. `status = available` carries a non-null `data`; every other status carries `data: null` and a `reasonCode`. A 404 from these routes means the vault does not exist — never that a measurement is missing.","properties":{"slug":{"type":"string","description":"The vault the analysis is about, as ASPERN names it."},"metric":{"type":"string","description":"Which analysis was asked for."},"availability":{"$ref":"#/components/schemas/Availability"},"data":{"description":"The analysis, or null. Null is a real answer here and is always explained by `availability`."}},"example":{"slug":"hyperliquidity-provider-hlp-dfc24b","metric":"waterfall","availability":{"status":"insufficient_data","reasonCode":"NO_FUNDING_WINDOW","detail":"Funding cannot be measured for this vault yet. Funding is reported by the venue as a level since a position opened, so it becomes a flow only when differenced across two snapshots.","retryable":true,"needs":"two consecutive position snapshots on a position that stayed open between them","observedAt":"2026-09-08T10:00:00.000Z"},"data":null}},"MetaDocument":{"type":"object","description":"Platform metadata, including the calling key’s own entitlement.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","description":"What this build is, what it holds, and what the calling key is entitled to.","properties":{"tier":{"type":"string"},"access":{"type":"string","enum":["open","gated"]},"key":{"$ref":"#/components/schemas/KeyEntitlement"},"capabilities":{"type":"array","items":{"type":"string"}},"methodologyVersion":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AnalyticalDocument":{"type":"object","description":"One analysis, with an explicit statement of whether it could be produced.","required":["data","meta","warnings"],"properties":{"data":{"$ref":"#/components/schemas/AnalyticalResponse"},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ProofDocument":{"type":"object","description":"What we can prove, and what we cannot.","required":["data","meta","warnings"],"properties":{"data":{"$ref":"#/components/schemas/Proof"},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"Examples":{"type":"object","additionalProperties":true,"properties":{"routes":{"type":"array","description":"One entry per parameterised route: the path, the parameter it names, where it goes, and values that work now.","items":{"type":"object","additionalProperties":true}},"example":{"type":"object","additionalProperties":true,"description":"A complete query string per route that needs more than one parameter. Naming a valid identifier is not the same as handing somebody something they can send: the first version of this offered instruments for /v1/cascade and every one answered 400, because the route also needs a shock."},"note":{"type":"string"}}},"ReceiptStatus":{"type":"object","additionalProperties":true,"required":["id","status","says"],"properties":{"id":{"type":"string","description":"The receipt."},"subject":{"type":"string","description":"The address the action was about."},"action":{"type":"string","description":"`payment` or `tool_call`."},"reference":{"type":"string","description":"Your evidence, as you gave it."},"chain":{"type":["string","null"],"description":"The chain you named, if any."},"amountUsd":{"type":["number","null"],"description":"The amount you stated, if any.","x-unit":"usd"},"recordedAt":{"type":"string","description":"When you recorded it."},"status":{"type":"string","enum":["claimed","verified","contradicted","not-found","unverifiable"],"description":"What we found when we read it; `claimed` until then."},"outcomeAt":{"type":["string","null"],"description":"When it was judged."},"says":{"type":"string","description":"What was found, or why it is still a claim."}}},"ReceiptStatusDocument":{"type":"object","description":"What became of one receipt you recorded.","required":["data","meta","warnings"],"properties":{"data":{"$ref":"#/components/schemas/ReceiptStatus"},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ReportIssue":{"type":"object","additionalProperties":true,"required":["issued","says","holds"],"properties":{"issued":{"type":"array","description":"Every issued report this digest names: one for the full digest, up to five for a 12-digit id.","items":{"type":"object","additionalProperties":true,"properties":{"digest":{"type":"string","description":"SHA-256 of the report’s canonical JSON, 64 hex digits."},"slug":{"type":"string","description":"The vault the report is about."},"issuedAt":{"type":"string","description":"When we issued it."},"readAt":{"type":["string","null"],"description":"When its readings were taken."},"methodology":{"type":["string","null"],"description":"The methodology it was composed under."},"build":{"type":["string","null"],"description":"The deploy that issued it."}}}},"says":{"type":"string","description":"The answer in a sentence."},"holds":{"type":"string","description":"What this record keeps, and that it keeps none of the content."}}},"ReportIssueDocument":{"type":"object","description":"Whether we issued a report with this digest, and when. No content.","required":["data","meta","warnings"],"properties":{"data":{"$ref":"#/components/schemas/ReportIssue"},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ExamplesDocument":{"type":"object","description":"What each parameterised route currently answers to, so a client need not discover the boundary by collecting 404s.","required":["data","meta","warnings"],"properties":{"data":{"$ref":"#/components/schemas/Examples"},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ChecksDocument":{"type":"object","description":"The manifest: every claim with the source that tests it, and how many of them a consumer can run without us.","required":["data","meta","warnings"],"properties":{"data":{"$ref":"#/components/schemas/Checks"},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"DependenciesData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"coverage":{"type":"object","description":"Both denominators: by count the coverage is thin, by capital it is broad, and a reader is entitled to whichever they were about to assume.","properties":{"vaults":{"type":["integer","number"],"x-unit":"count"},"vaultsTotal":{"type":["integer","number"],"x-unit":"count"},"usd":{"type":"number","x-unit":"usd"},"usdTotal":{"type":"number","x-unit":"usd"},"why":{"type":"string"}}},"keys":{"type":["integer","number"],"description":"Distinct owner, curator and guardian addresses.","x-unit":"count"},"largest":{"type":["null","object"],"properties":{"address":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":["integer","number"],"x-unit":"count"},"share":{"type":["null","number"],"x-unit":"decimal-fraction"}}},"renounced":{"type":"object","description":"Owner reads as the zero address: the keys were given up. NOT the same as unread, which is reported as unknown.","properties":{"vaults":{"type":["integer","number"],"x-unit":"count"},"usd":{"type":"number","x-unit":"usd"},"why":{"type":"string"}}},"bands":{"type":"array","items":{"type":"object","properties":{"band":{"type":"string"},"vaults":{"type":["integer","number"],"x-unit":"count"},"usd":{"type":"number","x-unit":"usd"}}}},"top":{"type":"array","description":"Absent without a plan; `withheld` names what was removed.","items":{"type":"object","properties":{"address":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"},"roles":{"type":"array","items":{"type":"string"}},"rolesOverlap":{"type":"boolean"},"sample":{"type":"array","items":{"type":"string"}}}}},"withheld":{"type":"string"},"unresolved":{"type":"object","properties":{"vaults":{"type":"number","x-unit":"count"},"usd":{"type":"number","x-unit":"usd"},"why":{"type":"string"}}},"controllerKinds":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"vaults":{"type":"number","x-unit":"count"},"usd":{"type":"number","x-unit":"usd"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"RwaData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"classes":{"type":"object","description":"NEVER SUM THESE. A named instrument, a stablecoin reserve and a synthetic position are three different claims at three different sizes. `measured: false` means the class is not readable at all, which is not zero.","properties":{"tokenised":{"type":"object","properties":{"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"},"measured":{"type":"boolean"},"byBasis":{"type":"array","items":{"type":"object","properties":{"basis":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"}}}}}},"reserve":{"type":"object","properties":{"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"},"measured":{"type":"boolean"},"byIssuer":{"type":"array","items":{"type":"object","properties":{"issuer":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"},"symbols":{"type":"array","items":{"type":"string"}},"products":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"},"reserveBasis":{"type":"string"},"currency":{"type":["null","string"]},"reserveSource":{"type":["null","string"]}}}},"reserveBasis":{"type":"string"},"attestor":{"type":["null","string"]},"cadence":{"type":["null","string"]},"lastReportDate":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."}}}}}},"synthetic":{"type":"object","properties":{"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"},"venues":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"at":{"type":"string"}}}},"measured":{"type":"boolean"},"basis":{"type":"string"},"attributed":{"type":"boolean"}}},"collateral":{"type":"object","properties":{"usd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"vaults":{"type":"number","x-unit":"count"},"measured":{"type":"boolean"}}},"offchain":{"type":"object","properties":{"usd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"vaults":{"type":"number","x-unit":"count"},"measured":{"type":"boolean"}}}}},"agentTokenisedUsd":{"type":"number","description":"Of the named instruments, how much sits in software-managed vaults.","x-unit":"usd"},"crypto":{"type":"object","properties":{"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":["integer","number"],"x-unit":"count"},"why":{"type":"string"}}},"unclassified":{"type":"object","properties":{"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":["integer","number"],"x-unit":"count"},"why":{"type":"string"},"symbols":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"}}}}}},"noUnderlying":{"type":"object","properties":{"usd":{"type":"number","x-unit":"usd"},"vaults":{"type":["integer","number"],"x-unit":"count"},"why":{"type":"string"}}},"holdings":{"type":"array","description":"Absent without a plan; `withheld` names what was removed.","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"platformSlug":{"type":"string"},"platformName":{"type":"string"},"symbol":{"type":"string"},"chain":{"type":"string"},"address":{"type":"string"},"issuer":{"type":["null","string"]},"represents":{"type":"string"},"basis":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"agentManaged":{"type":"boolean"},"operator":{"type":"string"},"operatorMode":{"type":"string"},"operatorModeConfidence":{"type":"number","x-unit":"decimal-fraction"}}}},"withheld":{"type":"string"},"operatorAutomatedTokenisedUsd":{"type":"number","x-unit":"usd"},"operatorAutomatedVaults":{"type":"number","x-unit":"count"},"instruments":{"type":"number","x-unit":"count"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"LifecycleData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"rails":{"type":"array","description":"Six rails on seven rungs. The rungs are never added together; only Settled is comparable across rails.","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"unit":{"type":"string"},"caveat":{"type":"string"},"levels":{"type":"object","description":"Per rung, one of three shapes: counted (a number), unexpressed (the protocol has no such stage), or unread (it emits it and we do not read it). Collapsing these into a zero is the error this structure exists to prevent.","properties":{"registered":{"type":"object","properties":{"kind":{"type":"string"},"count":{"type":"number","x-unit":"count"},"of":{"type":"string"},"why":{"type":"string"}}},"requested":{"type":"object","properties":{"kind":{"type":"string"},"why":{"type":"string"},"count":{"type":"number","x-unit":"count"},"of":{"type":"string"}}},"funded":{"type":"object","properties":{"kind":{"type":"string"},"why":{"type":"string"},"count":{"type":"number","x-unit":"count"},"of":{"type":"string"}}},"delivered":{"type":"object","properties":{"kind":{"type":"string"},"why":{"type":"string"},"count":{"type":"number","x-unit":"count"},"of":{"type":"string"}}},"settled":{"type":"object","properties":{"kind":{"type":"string"},"count":{"type":"number","x-unit":"count"},"of":{"type":"string"},"why":{"type":"string"}}},"validated":{"type":"object","properties":{"kind":{"type":"string"},"why":{"type":"string"},"count":{"type":"number","x-unit":"count"},"of":{"type":"string"}}},"repeated":{"type":"object","properties":{"kind":{"type":"string"},"count":{"type":"number","x-unit":"count"},"of":{"type":"string"},"why":{"type":"string"}}}}},"readAt":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"PerimeterData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"note":{"type":"string"},"dydx":{"type":"object","properties":{"at":{"type":"string"},"markets":{"type":"object","properties":{"total":{"type":"number","x-unit":"count"},"active":{"type":"number","x-unit":"count"},"openInterestUsd":{"type":"number","x-unit":"usd"},"volume24hUsd":{"type":"number","x-unit":"usd"}}},"perMarket":{"type":"object","properties":{"vaults":{"type":"number","x-unit":"count"},"points":{"type":"number","x-unit":"count"},"equityUsd":{"type":"number","x-unit":"usd"},"pnlUsd":{"type":"number","x-unit":"usd"},"losing":{"type":"number","x-unit":"count"},"winning":{"type":"number","x-unit":"count"},"unreconciled":{"type":"string"},"worst":{"type":"array","items":{"type":"object","properties":{"ticker":{"type":"string"},"equityUsd":{"type":"number","x-unit":"usd"},"pnlUsd":{"type":"number","x-unit":"usd"},"points":{"type":"number","x-unit":"count"},"from":{"type":"string"},"to":{"type":"string"}}}},"best":{"type":"array","items":{"type":"object","properties":{"ticker":{"type":"string"},"equityUsd":{"type":"number","x-unit":"usd"},"pnlUsd":{"type":"number","x-unit":"usd"},"points":{"type":"number","x-unit":"count"},"from":{"type":"string"},"to":{"type":"string"}}}}}},"megavault":{"type":"object","properties":{"equityUsd":{"type":"number","x-unit":"usd"},"totalPnlUsd":{"type":"number","x-unit":"usd"},"points":{"type":"number","x-unit":"count"},"from":{"type":"string"},"to":{"type":"string"},"subaccountEquityUsd":{"type":"number","x-unit":"usd"},"subaccounts":{"type":"number","x-unit":"count"},"openPerpetuals":{"type":"number","x-unit":"count"},"unreconciledUsd":{"type":"number","x-unit":"usd"}}},"attribution":{"type":"object","properties":{"addressesHeld":{"type":"number","x-unit":"count"},"addressesRead":{"type":"number","x-unit":"count"},"why":{"type":"string"},"cosmosAddressesInCorpus":{"type":"number"},"corpusSize":{"type":"number"}}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AssetsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"asOf":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"vaultCount":{"type":"number","x-unit":"count"},"grossUsd":{"type":"number","x-unit":"usd"},"netUsd":{"type":"number","x-unit":"usd"},"directionalSkew":{"type":"number","x-unit":"decimal-fraction"},"openInterestUsd":{"type":"number","x-unit":"usd"},"coverageRatio":{"type":"number","x-unit":"decimal-fraction"},"coverageSuspect":{"type":"boolean"},"topVaultShare":{"type":"number","x-unit":"decimal-fraction"},"vaults":{"type":["null","number"],"x-unit":"count"}}}},"note":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"IndexData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"name":{"type":"string"},"fullName":{"type":"string"},"base":{"type":"number","x-unit":"index-level"},"from":{"type":"string"},"to":{"type":"string"},"method":{"type":"object","properties":{"constituents":{"type":"number","x-unit":"count"},"weighting":{"type":"string"},"capWeight":{"type":"number","x-unit":"decimal-fraction"},"rebalanceDays":{"type":"number","x-unit":"days"},"minTvlUsd":{"type":"number","x-unit":"usd"},"minConstituents":{"type":"number","x-unit":"count"},"survivorship":{"type":"string"}}},"universeSize":{"type":"number","x-unit":"count"},"startedAt":{"type":"string"},"skippedThinPeriods":{"type":"number","x-unit":"count"},"startNote":{"type":"string"},"totalReturn":{"type":"number","x-unit":"decimal-fraction"},"maxDrawdown":{"type":"number","x-unit":"decimal-fraction"},"weakPeriods":{"type":"number","x-unit":"count"},"coverageNote":{"type":"string"},"points":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"value":{"type":"number","x-unit":"usd"},"periodReturn":{"type":"number","x-unit":"decimal-fraction"},"measured":{"type":"number","x-unit":"count"},"coverage":{"type":"number","x-unit":"decimal-fraction"},"died":{"type":"array","items":{"type":["object","string"]}}}}},"constituents":{"type":"array","items":{"type":"object","properties":{"vault":{"type":"string"},"name":{"type":["string","null"],"description":"The vault’s display name, or null where it has none; nothing is invented in its place. `vault` is the stable identifier."},"weight":{"type":"number","x-unit":"decimal-fraction"},"address":{"type":["string","null"],"description":"The vault contract address where it has one."}}}},"asOf":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"BenchmarkData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"unit":{"type":"string"},"means":{"type":"string"}}}},"frequency":{"type":"string"},"gaps":{"type":"string"},"points":{"type":"array","items":{"type":"array","items":{"type":"number"}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"FreshnessData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"asOf":{"type":"string"},"scheduler":{"type":"object","properties":{"startedAt":{"type":"string"},"sourceFingerprint":{"type":"string"}}},"summary":{"type":"object","properties":{"jobs":{"type":"number","x-unit":"count"},"enabled":{"type":"number","x-unit":"count"},"neverRun":{"type":"number","x-unit":"count"},"late":{"type":"number","x-unit":"count"},"failing":{"type":"number","x-unit":"count"},"noCode":{"type":"number","x-unit":"count"},"overCeiling":{"type":"number","x-unit":"count"},"nearCeiling":{"type":"number"}}},"jobs":{"type":"array","items":{"type":"object","properties":{"job":{"type":"string"},"enabled":{"type":"boolean"},"everyMinutes":{"type":"number"},"ceilingMinutes":{"type":["null","number"]},"overCeiling":{"type":"boolean"},"nearCeiling":{"type":"boolean"},"hasNoCode":{"type":"boolean"},"lastRunAt":{"type":["null","string"]},"ageMinutes":{"type":["null","number"]},"neverRun":{"type":"boolean"},"lastOk":{"type":["boolean","null"]},"lastDurationSeconds":{"type":["null","number"],"x-unit":"seconds"},"late":{"type":"boolean"},"lastError":{"type":["null","string"]}}}},"codeCheckRan":{"type":"boolean"},"servedAt":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"RiskResultData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"exposureUsd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"},"unpriced":{"type":"array"},"lookThrough":{"type":"array"},"scenarios":{"type":"array"},"worst":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"because":{"type":"string"},"caveats":{"type":"array","items":{"type":"string"}},"unknownHoldings":{"type":"array"},"illiquidHoldings":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string"},"name":{"type":"string"},"exposureUsd":{"type":"number","x-unit":"usd"},"withdrawableUsd":{"type":"number","x-unit":"usd"},"withdrawableShare":{"type":"number","x-unit":"decimal-fraction"},"note":{"type":"string"}}}},"flaggedHoldings":{"type":"array"},"withoutMarginState":{"type":"array","items":{"type":["object","string"]}},"crowding":{"type":"object","properties":{"asOf":{"type":"string"},"items":{"type":"array"},"summary":{"type":"string"}}},"concentration":{"type":"object","properties":{"effectiveBets":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"summary":{"type":"string"}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"StressData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"instrument":{"type":"string"},"asOf":{"type":"string"},"markPx":{"type":"number"},"measured":{"type":"number","x-unit":"count"},"unmeasured":{"type":"number"},"totalEquityUsd":{"type":"number","x-unit":"usd"},"firstBreakAt":{"type":"number","x-unit":"timestamp"},"assumption":{"type":"string"},"volatility":{"type":"object","properties":{"sigmaDaily":{"type":["null","number"]},"horizonDays":{"type":"number","x-unit":"days"},"sigmaOverHorizon":{"type":["null","number"]},"observations":{"type":"number","x-unit":"count"},"sampleSpanDays":{"type":["null","number"],"x-unit":"days"},"scale":{"type":"string"},"note":{"type":"string"},"noProbability":{"type":"string"}}},"ladder":{"type":"array","items":{"type":"object","properties":{"shockPct":{"type":"number","x-unit":"decimal-fraction"},"sigmas":{"type":"number"},"priceAt":{"type":"number","x-unit":"timestamp"},"liquidatedVaults":{"type":"number","x-unit":"count"},"equityAtRiskUsd":{"type":"number","x-unit":"usd"},"exposedNotionalUsd":{"type":"number","x-unit":"usd"},"shareOfEquity":{"type":"number","x-unit":"decimal-fraction"},"vaults":{"type":"array","items":{"type":["object","string"]}}}}},"breakPrices":{"type":"object","properties":{"onTheWayDown":{"type":"array","items":{"type":"object","properties":{"vault":{"type":"string"},"name":{"type":"string"},"price":{"type":"number","x-unit":"usd"}}}},"onTheWayUp":{"type":"array","items":{"type":"object","properties":{"vault":{"type":"string"},"name":{"type":"string"},"price":{"type":"number","x-unit":"usd"}}}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CascadeData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"instrument":{"type":"string"},"shock":{"type":"number"},"rounds":{"type":"array","items":{"type":"object","properties":{"round":{"type":"number"},"priceMove":{"type":"object","properties":{"BTC":{"type":"number"},"ARB":{"type":"number"},"GMX":{"type":"number"},"MELANIA":{"type":"number"},"PUMP":{"type":"number"},"MINA":{"type":"number"},"HYPE":{"type":"number"},"LIT":{"type":"number"},"PENDLE":{"type":"number"},"UNI":{"type":"number"},"TAO":{"type":"number"}}},"liquidated":{"type":"array","items":{"type":"object","properties":{"vaultId":{"type":"string"},"name":{"type":"string"},"equityBeforeUsd":{"type":"number","x-unit":"usd"},"equityUsd":{"type":"number","x-unit":"usd"},"equityLostUsd":{"type":"number","x-unit":"usd"},"forcedSaleUsd":{"type":"number","x-unit":"usd"},"instruments":{"type":"array","items":{"type":"string"}}}}},"forcedFlowUsd":{"type":"object","properties":{"ARB":{"type":"number"},"BTC":{"type":"number"},"GMX":{"type":"number"},"MELANIA":{"type":"number"},"PUMP":{"type":"number"},"MINA":{"type":"number"},"HYPE":{"type":"number"},"LIT":{"type":"number"},"PENDLE":{"type":"number"},"UNI":{"type":"number"},"TAO":{"type":"number"}}},"impact":{"type":"object","properties":{"ARB":{"type":"number"},"BTC":{"type":"number"},"GMX":{"type":"number"},"MELANIA":{"type":"number"},"PUMP":{"type":"number"},"MINA":{"type":"number"},"HYPE":{"type":"number"},"LIT":{"type":"number"},"PENDLE":{"type":"number"},"UNI":{"type":"number"},"TAO":{"type":"number"}}},"equityLostUsd":{"type":"number","x-unit":"usd"},"equityAtRiskUsd":{"type":"number","x-unit":"usd"}}}},"firstRound":{"type":"number"},"additional":{"type":"number"},"totalLiquidations":{"type":"number"},"totalEquityLostUsd":{"type":"number","x-unit":"usd"},"totalEquityAtRiskUsd":{"type":"number","x-unit":"usd"},"finalPriceMove":{"type":"object","properties":{"BTC":{"type":"number"},"ARB":{"type":"number"},"GMX":{"type":"number"},"MELANIA":{"type":"number"},"PUMP":{"type":"number"},"MINA":{"type":"number"},"HYPE":{"type":"number"},"LIT":{"type":"number"},"PENDLE":{"type":"number"},"UNI":{"type":"number"},"TAO":{"type":"number"}}},"unpriced":{"type":"array"},"impactBasis":{"type":"object","properties":{"ARB":{"type":"string"},"BTC":{"type":"string"},"GMX":{"type":"string"},"MELANIA":{"type":"string"},"PUMP":{"type":"string"},"MINA":{"type":"string"},"HYPE":{"type":"string"},"LIT":{"type":"string"},"PENDLE":{"type":"string"},"UNI":{"type":"string"},"TAO":{"type":"string"}}},"converged":{"type":"boolean"},"because":{"type":"string"},"caveats":{"type":"array","items":{"type":"string"}},"shockContext":{"type":"object","properties":{"sigmaDaily":{"type":["null","number"]},"horizonDays":{"type":"number","x-unit":"days"},"sigmas":{"type":["null","number"]},"noProbability":{"type":"string"}}},"liquidityCoverage":{"type":"object","properties":{"instrumentsWithDepth":{"type":"number"},"instrumentsFromVolatilityModel":{"type":"number"},"instrumentsFromQuotedDepth":{"type":"number"},"instrumentsTracked":{"type":"number"},"note":{"type":"string"}}},"positionsAsOf":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CorrelationData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"universe":{"type":"object","properties":{"vaults":{"type":"number","x-unit":"count"},"agentManagedOnly":{"type":"boolean"}}},"effectiveBets":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"effectiveBetsFromMeasured":{"type":"number"},"pairsMeasured":{"type":"number"},"pairsTotal":{"type":"number"},"summary":{"type":"string"},"pairs":{"type":"array","items":{"type":"object","properties":{"a":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}}},"b":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}}},"sameTrade":{"type":"boolean"},"residual":{"type":"object","properties":{"r":{"type":"number"},"n":{"type":"number"},"ciLow":{"type":"number"},"ciHigh":{"type":"number"},"distinguishable":{"type":"boolean"},"because":{"type":"string"}}},"raw":{"type":"object","properties":{"r":{"type":"number"},"n":{"type":"number"},"ciLow":{"type":"number"},"ciHigh":{"type":"number"},"distinguishable":{"type":"boolean"},"because":{"type":"string"}}},"verdict":{"type":"string"}}}},"marketFactor":{"type":"object","properties":{"medianVarianceExplained":{"type":"number"},"note":{"type":"string"}}},"truncatedTo":{"type":"number"},"method":{"type":"object","properties":{"factor":{"type":"string"},"interval":{"type":"string"},"limitation":{"type":"string"}}},"asOf":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"VaultsRedemptionData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"vault":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}}},"terms":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"asOf":{"type":"string"},"positionsAsOf":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"coverage":{"type":"object","properties":{"holders":{"type":"number"},"capped":{"type":"boolean"},"observedEquityUsd":{"type":"number","x-unit":"usd"},"tvlUsd":{"type":"number","x-unit":"usd"},"share":{"type":"number","x-unit":"decimal-fraction"},"because":{"type":"string"}}},"top1Share":{"type":"number","x-unit":"decimal-fraction"},"top5Share":{"type":"number","x-unit":"decimal-fraction"},"top10Share":{"type":"number","x-unit":"decimal-fraction"},"hhi":{"type":"number"},"lockedUsd":{"type":"number","x-unit":"usd"},"lockedShare":{"type":"number","x-unit":"decimal-fraction"},"lastUnlock":{"type":["null","number"]},"grossNotionalUsd":{"type":"number","x-unit":"usd"},"leverageNow":{"type":"number"},"maintenanceUsd":{"type":"number","x-unit":"usd"},"withdrawableUsd":{"type":["null","number"],"x-unit":"usd"},"scenarios":{"type":"array","items":{"type":"object","properties":{"holders":{"type":"number"},"label":{"type":"string"},"withdrawnUsd":{"type":"number","x-unit":"usd"},"shareOfObserved":{"type":"number","x-unit":"decimal-fraction"},"equityAfterUsd":{"type":"number","x-unit":"usd"},"leverageAfter":{"type":"number"},"mustSellUsd":{"type":"number","x-unit":"usd"},"breachesMaintenance":{"type":"boolean"},"emptiesVault":{"type":"boolean"},"exceedsLiquidity":{"type":"boolean"},"unmetUsd":{"type":["null","number"],"x-unit":"usd"},"because":{"type":"string"}}}},"because":{"type":"string"},"lending":{"type":["null","object"],"properties":{"borrowedUsd":{"type":"number","x-unit":"usd"},"idleUsd":{"type":"number","x-unit":"usd"},"exitBasis":{"enum":["measured","floor","unread"]},"asOf":{"type":"string"}}},"lockedByUtilisation":{"type":["boolean","null"]}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ChangesData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"recordingSince":{"type":"string"},"byKind":{"type":"object","properties":{"identity.rated":{"type":"number"},"control.guardian.removed":{"type":"number"},"flow.in":{"type":"number"},"vault.new":{"type":"number"},"asset.repriced":{"type":"number"},"flow.out":{"type":"number"},"exit.freed":{"type":"number"},"risk.fell":{"type":"number"},"identity.registered":{"type":"number"},"observation.raised":{"type":"number"},"exit.locked":{"type":"number"},"crowding.crossed":{"type":"number"},"control.guardian.set":{"type":"number"},"check.disagreed":{"type":"number"},"control.curator":{"type":"number"},"work.quoted":{"type":"number"},"risk.rose":{"type":"number"},"vault.died":{"type":"number"},"price.changed":{"type":"number"},"control.owner":{"type":"number"},"denomination.corrected":{"type":"number"},"work.settled":{"type":"number"},"price.withdrawn":{"type":"number"},"vault.reopened":{"type":"number"}}},"items":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"kind":{"type":"string"},"headline":{"type":"string"},"usd":{"type":["null","number"],"x-unit":"usd"},"target":{"type":["null","string"]},"vault":{"type":["null","object"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"platform":{"type":"string"}}},"detail":{"type":"object","properties":{"added":{"type":"number"},"chain":{"type":"string"},"share":{"type":["number","null"],"minimum":0,"x-unit":"decimal-fraction","description":"The flow as a multiple of the vault’s capital (1 = 100%). It can exceed 1: a vault that took in six times what it holds turned its money over. Null where it cannot be computed (no capital to divide by), never zero."},"total":{"type":"number","x-unit":"count"},"rated":{"type":"number","x-unit":"decimal-fraction"},"agents":{"type":"number"},"ratings":{"type":"number"},"inUsd":{"type":"number","x-unit":"usd"},"netUsd":{"type":"number","x-unit":"usd"},"outUsd":{"type":"number","x-unit":"usd"},"tvlUsd":{"type":"number","x-unit":"usd"},"to":{"type":["null","number","string"],"x-unit":"timestamp"},"from":{"type":["null","number","object","string"],"properties":{"skew":{"type":"number"},"coverage":{"type":"number","x-unit":"decimal-fraction"}},"x-unit":"timestamp"},"delta":{"type":"number"},"skew":{"type":"number"},"coverage":{"type":"number","x-unit":"decimal-fraction"},"jobs":{"type":"number","x-unit":"count"},"rail":{"type":"string"},"observation":{"type":"string"},"peakUsd":{"type":"number","x-unit":"usd"},"lifecycle":{"enum":["live","dead","unlaunched","unknown",null],"description":"The vault lifecycle, the same vocabulary as Vault.lifecycle; null where the change is not about a vault."},"wasLocked":{"type":"boolean"},"suppliedUsd":{"type":"number","x-unit":"usd"},"because":{"type":["null","string"]},"changed":{"type":"number"},"examples":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string"},"url":{"type":"string"},"from":{"type":"string"}}}},"now":{"type":["null","string"]},"was":{"type":["null","string"]},"discovered":{"type":"number"},"withdrawn":{"type":"number"},"gap":{"type":"number"},"said":{"type":"string"},"check":{"type":"string"},"route":{"type":"string"},"actual":{"type":"number"},"metric":{"type":"string"},"subject":{"type":"string"},"expected":{"type":"number"}}},"eventId":{"type":"string"}}}},"method":{"type":"object","properties":{"threshold":{"type":"string"},"firstRun":{"type":"string"},"recovery":{"type":"string"}}},"asOf":{"type":"string"},"readEveryMinutes":{"type":"number"},"stale":{"type":"boolean"},"newestChangeAt":{"type":"string"},"withdrawn":{"type":"object","properties":{"inWindow":{"type":"number"},"byKind":{"type":"object","properties":{"control.guardian.removed":{"type":"number"},"control.guardian.set":{"type":"number"}}},"says":{"type":"string"}}}},"required":["items","asOf","recordingSince"]},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"LiquidityData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"asOf":{"type":"string"},"registerDays":{"type":"number","x-unit":"days"},"summary":{"type":"object","properties":{"vaultsRead":{"type":"number"},"suppliedUsd":{"type":"number","x-unit":"usd"},"withdrawableUsd":{"type":"number","x-unit":"usd"},"lockedVaults":{"type":"number","x-unit":"count"},"lockedUsd":{"type":"number","x-unit":"usd"}}},"collateral":{"type":"object","properties":{"attributedUsd":{"type":"number","x-unit":"usd"},"unattributedUsd":{"type":"number","x-unit":"usd"},"attributedPlatforms":{"type":"array","items":{"type":"string"}},"lockedUsd":{"type":"number","x-unit":"usd"},"concentration":{"type":"number","x-unit":"decimal-fraction"},"items":{"type":"array","items":{"type":"object","properties":{"collateral":{"type":"string"},"suppliedUsd":{"type":"number","x-unit":"usd"},"lockedUsd":{"type":"number","x-unit":"usd"}}}}}},"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"nameQualifier":{"type":["null","string"]},"platform":{"type":"string"},"chain":{"type":"string"},"suppliedUsd":{"type":"number","x-unit":"usd"},"borrowedUsd":{"type":"number","x-unit":"usd"},"withdrawableUsd":{"type":"number","x-unit":"usd"},"utilisation":{"type":"number","x-unit":"decimal-fraction"},"locked":{"type":"boolean"},"daysLocked":{"type":"number"},"history":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"utilisation":{"type":"number","x-unit":"decimal-fraction"},"withdrawableUsd":{"type":"number","x-unit":"usd"}}}}}}},"method":{"type":"object","properties":{"measured":{"type":"string"},"limitation":{"type":"string"}}},"snapshotDate":{"type":"string"},"ageMinutes":{"type":"number"},"readEveryMinutes":{"type":"number"},"stale":{"type":"boolean"},"detailRequires":{"type":"string"},"note":{"type":"string"},"population":{"type":"object","properties":{"inRegister":{"type":"number"},"outside":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"vaults":{"type":"number","x-unit":"count"},"tvlUsd":{"type":"number","x-unit":"usd"}}}},"lendingVaultsMissing":{"type":"number"},"says":{"type":"string"}}}},"required":["asOf","snapshotDate","ageMinutes","readEveryMinutes","stale","summary"]},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"LiquidityUnmovedData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"asOf":{"type":"string"},"measured":{"type":"number","x-unit":"count"},"reacted":{"type":"number"},"stillStuck":{"type":"number"},"totalStuckUsd":{"type":"number","x-unit":"usd"},"longestDays":{"type":"number","x-unit":"days"},"vaults":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"operator":{"type":["null","string"]},"suppliedUsd":{"type":"number","x-unit":"usd"},"days":{"type":"number","x-unit":"days"},"atLeast":{"type":"boolean"},"collateral":{"type":"array","items":{"type":["object","string"]}},"because":{"type":"string"}}}},"withheld":{"type":"number"},"upgrade":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ExposureNettingData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"asOf":{"type":"string"},"note":{"type":"string"},"operators":{"type":"array","items":{"type":"object","properties":{"operator":{"type":"string"},"name":{"type":"string"},"vaults":{"type":"number","x-unit":"count"},"grossUsd":{"type":"number","x-unit":"usd"},"netUsd":{"type":"number","x-unit":"usd"},"hiddenByNettingUsd":{"type":"number","x-unit":"usd"},"directionality":{"type":"number","x-unit":"decimal-fraction"},"crossesMargin":{"type":"boolean"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"OperatorsExposureData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"operator":{"type":"string"},"name":{"type":"string"},"asOf":{"type":"string"},"vaults":{"type":["array","number"],"items":{"type":["object","string"]},"x-unit":"count"},"agentManagedVaults":{"type":"number","x-unit":"count"},"marginAccounts":{"type":"number"},"venues":{"type":"array","items":{"type":["object","string"]}},"totalGrossUsd":{"type":"number","x-unit":"usd"},"totalNetUsd":{"type":"number","x-unit":"usd"},"directionality":{"type":["null","number"],"x-unit":"decimal-fraction"},"note":{"type":"string"},"instruments":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"netUsd":{"type":"number","x-unit":"usd"},"grossUsd":{"type":"number","x-unit":"usd"},"directionality":{"type":"number","x-unit":"decimal-fraction"},"nettedAwayShare":{"type":"number","x-unit":"decimal-fraction"},"marginAccounts":{"type":"number"},"venues":{"type":"array","items":{"type":"string"}},"offsetCrossesMargin":{"type":"boolean"}}}},"misleadingIfReportedGross":{"type":"array"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"VaultsExecutionData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"VaultsTradesData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"vault":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}}},"fills":{"type":"number"},"trades":{"type":"number"},"wins":{"type":"number"},"losses":{"type":"number"},"winRate":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"avgWinUsd":{"type":"number","x-unit":"usd"},"avgLossUsd":{"type":"number","x-unit":"usd"},"payoff":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"profitFactor":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"medianHeldHours":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"unattributed":{"type":"number"},"verdict":{"type":"string"},"because":{"type":"string"},"instruments":{"type":"array"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ForcedExitsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"observed":{"type":"object","properties":{"vaultsLiquidated":{"type":"number"},"vaultsDeleveraged":{"type":"number"},"vaultsSettled":{"type":"number"},"stressEvents":{"type":"number"},"note":{"type":"string"}}},"clusters":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"vaults":{"type":"array","items":{"type":"string"}},"events":{"type":"number","x-unit":"count"},"instruments":{"type":"array","items":{"type":"string"}},"notionalUsd":{"type":"number","x-unit":"usd"},"because":{"type":"string"}}}},"vaults":{"type":"array","items":{"type":"object","properties":{"vault":{"type":"string"},"name":{"type":"string"},"liquidated":{"type":"number"},"deleveraged":{"type":"number"},"settled":{"type":"number"},"pnlUsd":{"type":"number","x-unit":"usd"},"notionalUsd":{"type":"number","x-unit":"usd"},"lastAt":{"type":"string"},"instruments":{"type":"array","items":{"type":"string"}},"because":{"type":"string"}}}},"marketLiquidations":{"type":"object","properties":{"count":{"type":"number","x-unit":"count"},"notionalUsd":{"type":"number","x-unit":"usd"},"recent":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"instrument":{"type":"string"},"notionalUsd":{"type":"number","x-unit":"usd"}}}},"note":{"type":"string"}}},"asOf":{"type":"string"},"readEveryMinutes":{"type":"number"},"stale":{"type":"boolean"},"eventsFrom":{"type":"string"},"eventsTo":{"type":"string"},"events":{"type":"number","x-unit":"count"},"truncated":{"type":"boolean"},"truncationReason":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"truncationNote":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"registerBuiltAt":{"type":"string"},"registerMissing":{"type":"boolean"}},"required":["asOf","events","truncated","observed"]},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CrowdingHistoryData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"days":{"type":"number","x-unit":"days"},"note":{"type":"string"},"instruments":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"points":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"grossUsd":{"type":"number","x-unit":"usd"},"coverageRatio":{"type":["null","number"],"x-unit":"decimal-fraction"},"coverageSuspect":{"type":"boolean"},"vaults":{"type":"number","x-unit":"count"},"deltaWow":{"type":["null","number"]}}}},"pointsPerSeries":{"type":"number"}}}},"requested":{"type":"number"},"windowDays":{"type":"number","x-unit":"days"},"elapsedWindowDays":{"type":"number","x-unit":"days"},"calendarDatesCovered":{"type":"number"},"windowFrom":{"type":"string"},"windowTo":{"type":"string"},"datesCovered":{"type":"number"},"windowNote":{"type":"string"},"ordering":{"type":"object","properties":{"instruments":{"type":"string"},"points":{"type":"string"}}},"oldestObservationAt":{"type":"string"},"newestObservationAt":{"type":"string"},"asOf":{"type":"string"},"observations":{"type":"number","x-unit":"count"},"servedAt":{"type":"string"}},"required":["elapsedWindowDays","calendarDatesCovered","ordering","instruments"]},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"FundingData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"asOf":{"type":"string"},"instruments":{"type":"number","x-unit":"count"},"netCarryToTrackedUsdPerDay":{"type":"number","x-unit":"usd-per-day"},"collectingUsdPerDay":{"type":"number","x-unit":"usd-per-day"},"payingUsdPerDay":{"type":"number","x-unit":"usd-per-day"},"extremes":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"hourlyRate":{"type":"number","x-unit":"decimal-fraction"},"annualisedPct":{"type":"number","x-unit":"decimal-fraction"},"longsPay":{"type":"boolean"},"openInterestUsd":{"type":"number","x-unit":"usd"},"dayVolumeUsd":{"type":"number","x-unit":"usd"},"trackedNetUsd":{"type":"number","x-unit":"usd"},"trackedGrossUsd":{"type":"number","x-unit":"usd"},"trackedVaults":{"type":"number","x-unit":"count"},"carryToTrackedUsdPerDay":{"type":"number","x-unit":"usd-per-day"}}}},"method":{"type":"object","properties":{"sign":{"type":"string"},"annualisation":{"type":"string"},"limitation":{"type":"string"}}},"instrumentsWithoutRate":{"type":"number","x-unit":"decimal-fraction"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"MarketsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"asOf":{"type":"string"},"counted":{"type":"object","properties":{"live":{"type":"number"},"thin":{"type":"number"},"dead":{"type":"number"}}},"exposureAtRisk":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"state":{"type":"string"},"notionalUsd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"}}}},"notionalUsd":{"type":"number","x-unit":"usd"},"instruments":{"type":"number","x-unit":"count"},"because":{"type":"string"}}},"dead":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"markVsOracle":{"type":"number"},"because":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"LeadFollowData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"window":{"type":"object","properties":{"days":{"type":"number","x-unit":"days"},"fills":{"type":"number"},"since":{"type":"string"},"requestedDays":{"type":"number","x-unit":"days"},"effectiveDays":{"type":"number","x-unit":"days"},"coveredFrom":{"type":"string"},"coveredTo":{"type":"string"},"decisions":{"type":"number"},"rowsExamined":{"type":"number"},"truncated":{"type":"boolean"},"truncationReason":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"note":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."}}},"pairs":{"type":"array","items":{"type":"object","properties":{"leader":{"type":"string"},"follower":{"type":"string"},"instrument":{"type":"string"},"observed":{"type":"number","x-unit":"count"},"expected":{"type":"number"},"z":{"type":"number"},"asymmetry":{"type":"number"},"leaderTrades":{"type":"number"},"followerTrades":{"type":"number"},"episodes":{"type":"array","items":{"type":"object","properties":{"at":{"type":"number"},"leaderUsd":{"type":"number","x-unit":"usd"},"leaderSide":{"type":["null","string"]},"followerAt":{"type":"number","x-unit":"timestamp"},"followerUsd":{"type":"number","x-unit":"usd"},"followerSide":{"type":["null","string"]}}}},"sizeRatio":{"type":["null","number"],"x-unit":"decimal-fraction"},"ratioSpread":{"type":["null","number"],"x-unit":"multiple"},"detail":{"type":"string"},"because":{"type":"string"},"null":{"type":"object","properties":{"shifts":{"type":"number"},"mean":{"type":"number"},"sd":{"type":"number"},"sampleSd":{"type":"number"},"sdFloored":{"type":"boolean"},"max":{"type":"number"},"exceedsAllShifts":{"type":"boolean"},"pPermutation":{"type":"number"},"pPermutationFloor":{"type":"number"},"formula":{"type":"string"}}}}}},"method":{"type":"object","properties":{"null":{"type":"string"},"bar":{"type":"string"},"limitation":{"type":"string"},"reproducibility":{"type":"string"},"whatTheNullCanSupport":{"type":"string"}}},"asOf":{"type":"string"},"census":{"type":"object","properties":{"instrumentsSeen":{"type":"number"},"instrumentsTested":{"type":"number"},"orderedPairsTested":{"type":"number"},"passedZ":{"type":"number"},"passedAsymmetry":{"type":"number"},"minZ":{"type":"number"},"minAsymmetry":{"type":"number"},"minObserved":{"type":"number"},"windowMs":{"type":"number","x-unit":"seconds"},"mergeMs":{"type":"number","x-unit":"seconds"},"shifts":{"type":"number"},"bonferroniAlphaPerTest":{"type":"number"},"bonferroniZ":{"type":"number"}}}},"required":["window","pairs","method"]},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentsRailsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"at":{"type":"string"},"owners":{"type":"number"},"railAddresses":{"type":"number"},"both":{"type":"number"},"rails":{"type":"array","items":{"type":"object","properties":{"rail":{"type":"string"},"role":{"type":"string"},"addresses":{"type":"number","x-unit":"count"},"registered":{"type":"number"}}}},"cohorts":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"owners":{"type":"number"},"crossed":{"type":"number"},"chain":{"type":"string"},"chainOwners":{"type":"number"}}}},"work":{"type":"object","properties":{"acpJobs":{"type":"number"},"acpJobsByRegistered":{"type":"number"},"acpUsd":{"type":"number","x-unit":"usd"},"acpUsdByRegistered":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"mechDeliveries":{"type":"number"},"mechDeliveriesByRegistered":{"type":"number"}}},"floor":{"type":"boolean"},"note":{"type":"string"},"asOf":{"type":"string"},"cards":{"type":"object","properties":{"distinct":{"type":"number"},"ownersSharingACard":{"type":"number"},"largestSharedCard":{"type":"number"}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"address":{"type":"string"},"claims":{"type":"object","properties":{"registrations":{"type":"number","x-unit":"count"},"onChains":{"type":"array"},"names":{"type":"array"},"services":{"type":"array"},"declaresX402":{"type":"boolean"},"firstRegistered":{"type":["string","null"],"format":"date-time","description":"When the first registration of this address was made. Null where no registration is held."}}},"behaviour":{"type":"object","properties":{"economicallyActive":{"type":"boolean"},"payments":{"type":"object","properties":{"sent":{"type":"number"},"received":{"type":"number"},"sentUsd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"receivedUsd":{"type":["number","null"],"minimum":0,"x-unit":"USD","description":"Paid to this address on the rails we read, in USD. 0 is a measured nothing; null means no payment evidence is held."},"firstSeen":{"type":["string","null"],"format":"date-time","description":"The first payment seen. Null where no payment evidence is held."},"lastSeen":{"type":["string","null"],"format":"date-time","description":"The latest payment seen. Null where no payment evidence is held."}}},"work":{"type":"object","properties":{"jobsSold":{"type":"number"},"jobsBought":{"type":"number"},"earnedUsd":{"type":["number","null"],"minimum":0,"x-unit":"USD","description":"Earned for completed work on the rails we read, in USD. 0 is a measured nothing; null means no work evidence is held."},"spentUsd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."}}},"capital":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."}}},"evidence":{"type":"object","properties":{"linkedBy":{"type":"string"},"strength":{"type":"string"},"limitation":{"type":"string"}}},"namespace":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"asOf":{"type":"string"},"readers":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"readAt":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentsClaimsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"checkedAt":{"type":"string"},"claims":{"type":"number"},"selfClaims":{"type":"number"},"cross":{"type":"object","properties":{"found":{"type":"number"},"absent":{"type":"number"},"unread":{"type":"number"}}},"states":{"type":"object","properties":{"found":{"type":"string"},"absent":{"type":"string"},"unread":{"type":"string"}}},"pairs":{"type":"array","items":{"type":"object","properties":{"registeredOn":{"type":"string"},"claims":{"type":"string"},"claimedChain":{"type":["null","string"]},"caip":{"type":"string"},"state":{"type":"string"},"selfClaim":{"type":"boolean"},"count":{"type":"number","x-unit":"count"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentsWorkData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"at":{"type":"string"},"rails":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"kind":{"type":"string"},"rail":{"type":"string"},"chains":{"type":"array","items":{"type":"string"}},"events":{"type":"number","x-unit":"count"},"parties":{"type":"number"},"partiesAre":{"type":"string"},"from":{"type":["null","string"]},"to":{"type":["null","string"]},"usd":{"type":["null","number"],"x-unit":"usd"},"unit":{"type":"string"},"scope":{"type":"object","properties":{"counts":{"type":"string"},"excludes":{"type":"string"},"contracts":{"type":"array","items":{"type":["object","string"]}},"blocks":{"type":"array","items":{"type":"object","properties":{"chain":{"type":"string"},"from":{"type":"number","x-unit":"timestamp"},"to":{"type":"number","x-unit":"timestamp"}}}}}},"href":{"type":"string"}}}},"note":{"type":"string"},"asOf":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentsDeliveryData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"jobs":{"type":"number","x-unit":"count"},"completed":{"type":"number"},"refused":{"type":"number"},"expired":{"type":"number"},"stillOpen":{"type":"number"},"noPhaseSeen":{"type":"number"},"ended":{"type":"number"},"completionRateOfEnded":{"type":["null","number"],"x-unit":"decimal-fraction"},"paidUsd":{"type":"number","x-unit":"usd"}}}},"denominator":{"type":"string"},"minJobsForARecord":{"type":"number"},"asOf":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CapitalDeploymentData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"usd":{"type":"number","x-unit":"usd"},"deploymentReadableUsd":{"type":"number","x-unit":"usd"},"vaults":{"type":"number","x-unit":"count"},"kinds":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"vaults":{"type":"number","x-unit":"count"},"usd":{"type":"number","x-unit":"usd"},"deploymentReadableUsd":{"type":"number","x-unit":"usd"},"weWouldRead":{"type":"string"}}}},"note":{"type":"string"},"asOf":{"type":"string"},"oldestObservationAt":{"type":"string"},"readingsDated":{"type":"number"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AssetsDenominationsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"usd":{"type":"number","x-unit":"usd"},"checkedUsd":{"type":"number","x-unit":"usd"},"assets":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"claims":{"type":"string"},"vaults":{"type":"number","x-unit":"count"},"usd":{"type":"number","x-unit":"usd"},"priceUsd":{"type":["null","number"],"x-unit":"usd"},"peg":{"type":"string"},"offByBps":{"type":["null","number"]}}}},"states":{"type":"object","properties":{"holds":{"type":"string"},"off":{"type":"string"},"contract":{"type":"string"},"unpriced":{"type":"string"},"implausible":{"type":"string"}}},"asOf":{"type":"string"},"oldestObservationAt":{"type":"string"},"readingsDated":{"type":"number"},"priceAsOf":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"AgentsPayersData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"at":{"type":"string"},"rules":{"type":"object","properties":{"hoursCovered":{"type":"number"},"minSpanDays":{"type":"number","x-unit":"days"},"minPayments":{"type":"number","x-unit":"count"}}},"payers":{"type":"number","x-unit":"count"},"payments":{"type":"number","x-unit":"count"},"once":{"type":"object","properties":{"payers":{"type":"number","x-unit":"count"},"payments":{"type":"number","x-unit":"count"}}},"occasional":{"type":"object","properties":{"payers":{"type":"number","x-unit":"count"},"payments":{"type":"number","x-unit":"count"}}},"alwaysOn":{"type":"object","properties":{"payers":{"type":"number","x-unit":"count"},"payments":{"type":"number","x-unit":"count"},"registered":{"type":"number"}}},"registered":{"type":"object","properties":{"payers":{"type":"number","x-unit":"count"},"payments":{"type":"number","x-unit":"count"}}},"topTenPayments":{"type":"number","x-unit":"count"},"buckets":{"type":"array","items":{"type":"object","properties":{"bucket":{"type":"string"},"payers":{"type":"number","x-unit":"count"},"payments":{"type":"number","x-unit":"count"}}}},"note":{"type":"string"},"attested":{"type":"object","properties":{"payers":{"type":"number","x-unit":"count"},"payments":{"type":"number","x-unit":"count"}}},"retention":{"type":"array","items":{"type":"object","properties":{"days":{"type":"number","x-unit":"days"},"eligible":{"type":"number"},"returned":{"type":"number","x-unit":"decimal-fraction"}}}},"asOf":{"type":"string"},"narrowing":{"type":"object","properties":{"held":{"type":"number"},"clean":{"type":"number"},"dated":{"type":"number"},"withPayee":{"type":"number"},"priced":{"type":"number"}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ResolveResultData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"resolver":{"type":"string"},"method":{"type":"string"},"question":{"type":"object","properties":{"kind":{"type":"string"},"vault":{"type":"string"},"from":{"type":"number","x-unit":"timestamp"},"to":{"type":"number","x-unit":"timestamp"},"threshold":{"type":"number"}}},"verdict":{"type":"string"},"measured":{"type":["null","number"],"x-unit":"count"},"coverage":{"type":"object","properties":{"observedFrom":{"type":["null","number"]},"observedTo":{"type":["null","number"]},"observations":{"type":"number","x-unit":"count"},"spansQuestion":{"type":"boolean"}}},"because":{"type":"string"},"evidence":{"type":"object","properties":{"observations":{"type":"number","x-unit":"count"},"from":{"type":"string"},"to":{"type":"string"}}},"resolvedAt":{"type":"string"},"collateral":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}},"hash":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"VaultsAssessmentData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"document":{"type":"object","properties":{"vault":{"type":"string"},"chain":{"type":"string"},"name":{"type":"string"},"agentId":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"agentRegistry":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"assessedAt":{"type":"string"},"methodology":{"type":"string"},"assessments":{"type":"array","items":{"type":"object","properties":{"tag":{"type":"string"},"score":{"type":"number"},"observations":{"type":["null","number"],"x-unit":"count"},"confidence":{"type":["null","number"],"x-unit":"decimal-fraction"},"because":{"type":"string"}}}},"limitations":{"type":"array","items":{"type":"string"}},"observations":{"type":"array"}}},"feedbackHash":{"type":"string"},"alsoPublished":{"type":"object","properties":{"note":{"type":"string"},"risk":{"type":"object","properties":{"score":{"type":["null","number"]},"band":{"type":["null","string"]},"measured":{"type":"number","x-unit":"count"},"locked":{"type":"boolean"},"realised":{"type":"boolean"}}},"lending":{"type":["null","object"],"properties":{"idleUsd":{"type":"number","x-unit":"usd"},"borrowedUsd":{"type":"number","x-unit":"usd"},"withdrawableShare":{"type":"number","x-unit":"decimal-fraction"}}},"observations":{"type":"array"},"observationsAsOf":{"type":"string"}}},"erc8004":{"type":"object","properties":{"standard":{"type":"string"},"calls":{"type":"array","items":{"type":"object","properties":{"agentId":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"value":{"type":"number","x-unit":"usd"},"valueDecimals":{"type":"number"},"tag1":{"type":"string"},"tag2":{"type":"string"},"feedbackURI":{"type":"string"},"feedbackHash":{"type":"string"}}}},"note":{"type":"string"},"publishing":{"type":"string"}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"RegistryData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"note":{"type":"string"},"demonstrationCount":{"type":"number","x-unit":"count"},"demonstrationNote":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"address":{"type":"string"},"chain":{"type":"string"},"venue":{"type":"string"},"management":{"type":"string"},"name":{"type":"string"},"thesis":{"type":"string"},"instruments":{"type":"array","items":{"type":"string"}},"maxLeverage":{"type":"number","x-unit":"multiple"},"maxDrawdownPct":{"type":"number","x-unit":"decimal-fraction"},"strategyHash":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"oversight":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"model":{"type":["null","string"]},"modelVersion":{"type":["null","string"]},"promptHash":{"type":["null","string"]},"configHash":{"type":["null","string"]},"codeRef":{"type":["null","string"]},"dataSources":{"type":["null","string"]},"declaredOn":{"type":"string"},"status":{"type":"string"},"vault":{"type":["null","string"]},"signedText":{"type":"string"},"signature":{"type":"string"},"signer":{"type":"string"},"digest":{"type":"string"},"strategyLodged":{"type":"boolean"},"isDemonstration":{"type":"boolean"},"batch":{"type":["null","object"],"properties":{"day":{"type":"string"},"root":{"type":"string"},"leafCount":{"type":"number","x-unit":"count"},"chain":{"type":"string"},"txHash":{"type":"string"},"anchoredAt":{"type":"string"},"proof":{"type":"array","items":{"type":"string"}},"proofChecked":{"type":"boolean"},"proofState":{"type":"string"}}},"reclassifiedAfterAnchoringAt":{"type":"string"}}}},"total":{"type":"number","x-unit":"count"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"LineageData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"methodologyVersion":{"type":"string"},"methodologyVersions":{"type":"array","items":{"type":"string"}},"fields":{"type":"object","properties":{"source":{"type":"string"},"sourceEventId":{"type":"string"},"chainId":{"type":"string"},"blockNumber":{"type":"string"},"observedAt":{"type":"string"},"computedAt":{"type":"string"},"methodologyVersion":{"type":"string"},"coverageScope":{"type":"string"},"confidence":{"type":"string"}}},"note":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"DifferencesData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"differences":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string"},"subject":{"type":["null","string"]},"source":{"type":"string"},"sourceUrl":{"type":"string"},"theirValue":{"type":"number"},"theirUnit":{"type":"string"},"theirAsOf":{"type":"string"},"theirFigureObtained":{"type":"string"},"ourValue":{"type":"number"},"ourUnit":{"type":"string"},"ourAsOf":{"type":"string"},"ratio":{"type":"number","x-unit":"decimal-fraction"},"state":{"type":"string"},"explains":{"type":"string"}}}},"note":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"LimitsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"charging":{"type":"boolean"},"surfaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"where":{"type":"string"},"what":{"type":"string"},"mode":{"type":"string"},"rowsInFull":{"type":"number"},"rowsWithFieldWithheld":{"type":"number"},"fieldWithheld":{"type":"string"},"unlocks":{"type":"string"}}}},"note":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"HistoryCapitalData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"days":{"type":"number","x-unit":"days"},"reconstructedDays":{"type":"number","x-unit":"days"},"caveat":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"machineUsd":{"type":"number","x-unit":"usd"},"otherUsd":{"type":"number","x-unit":"usd"},"defiTotalUsd":{"type":"number","x-unit":"usd"},"vaultCount":{"type":"number","x-unit":"count"},"machineCount":{"type":"number","x-unit":"count"},"reconstructed":{"type":"boolean"}}}},"asOf":{"type":"string"},"oldestObservationAt":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"TradingData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"note":{"type":"string"},"gmx":{"type":"object","properties":{"at":{"type":"string"},"chains":{"type":"array","items":{"type":"object","properties":{"chain":{"type":"string"},"markets":{"type":"number"},"listed":{"type":"number"},"openInterestUsd":{"type":"number","x-unit":"usd"},"liquidityUsd":{"type":"number","x-unit":"usd"},"longUsd":{"type":"number","x-unit":"usd"},"shortUsd":{"type":"number","x-unit":"usd"}}}},"unreachable":{"type":"array"},"complete":{"type":"boolean"},"openInterestUsd":{"type":"number","x-unit":"usd"},"liquidityUsd":{"type":"number","x-unit":"usd"},"utilisation":{"type":"number","x-unit":"decimal-fraction"},"longUsd":{"type":"number","x-unit":"usd"},"shortUsd":{"type":"number","x-unit":"usd"},"markets":{"type":"number"},"top":{"type":"array","items":{"type":"object","properties":{"chain":{"type":"string"},"name":{"type":"string"},"oiUsd":{"type":"number","x-unit":"usd"},"longUsd":{"type":"number","x-unit":"usd"},"shortUsd":{"type":"number","x-unit":"usd"},"liquidityUsd":{"type":"number","x-unit":"usd"}}}},"assetClass":{"type":"string"},"note":{"type":"string"}}},"gmxAccounts":{"type":"object","properties":{"at":{"type":"string"},"chains":{"type":"array","items":{"type":"object","properties":{"chain":{"type":"string"},"positions":{"type":"number","x-unit":"count"},"accounts":{"type":"number"},"sizeUsd":{"type":"number","x-unit":"usd"},"collateralUsd":{"type":"number","x-unit":"usd"},"unpricedCollateral":{"type":"number"},"unrealizedPnlUsd":{"type":"number","x-unit":"usd"}}}},"unreachable":{"type":"array"},"complete":{"type":"boolean"},"positions":{"type":"number","x-unit":"count"},"accounts":{"type":"number"},"sizeUsd":{"type":"number","x-unit":"usd"},"collateralUsd":{"type":"number","x-unit":"usd"},"unrealizedPnlUsd":{"type":"number","x-unit":"usd"},"venueLeverage":{"type":"number"},"leverageBands":{"type":"array","items":{"type":"object","properties":{"band":{"type":"string"},"count":{"type":"number","x-unit":"count"}}}},"leverage":{"type":"object","properties":{"median":{"type":"number"},"p90":{"type":"number"},"max":{"type":"number"},"over10x":{"type":"number"},"over25x":{"type":"number"},"measured":{"type":"number","x-unit":"count"}}},"thinnest":{"type":"array","items":{"type":"object","properties":{"chain":{"type":"string"},"market":{"type":"string"},"sizeUsd":{"type":"number","x-unit":"usd"},"equityUsd":{"type":"number","x-unit":"usd"},"buffer":{"type":"number"}}}},"thinnestFloorUsd":{"type":"number","x-unit":"usd"},"attributable":{"type":"object","properties":{"addressesHeld":{"type":"number","x-unit":"count"},"matched":{"type":"number"},"positions":{"type":"number","x-unit":"count"},"sizeUsd":{"type":"number","x-unit":"usd"},"rows":{"type":"array"}}},"leverageFieldCheck":{"type":"object","properties":{"checked":{"type":"number"},"within25pct":{"type":"number","x-unit":"decimal-fraction"},"ratioMedian":{"type":"number","x-unit":"decimal-fraction"},"ratioP10":{"type":"number","x-unit":"decimal-fraction"},"ratioP90":{"type":"number","x-unit":"decimal-fraction"},"reading":{"type":"string"}}},"basis":{"type":"string"},"method":{"type":"string"},"caveat":{"type":"string"},"withheld":{"type":"array","items":{"type":"string"}}}},"agentCredit":{"type":"object","properties":{"at":{"type":"string"},"protocol":{"type":"string"},"chains":{"type":"array","items":{"type":"object","properties":{"chain":{"type":"string"},"addresses":{"type":"number","x-unit":"count"},"asked":{"type":"number"},"withPosition":{"type":"number"},"collateralUsd":{"type":"number","x-unit":"usd"},"debtUsd":{"type":"number","x-unit":"usd"},"headroomUsd":{"type":"number","x-unit":"usd"},"baseUnit":{"type":"string"},"unread":{"type":"boolean"}}}},"unread":{"type":"array"},"complete":{"type":"boolean"},"addresses":{"type":"number","x-unit":"count"},"asked":{"type":"number"},"withPosition":{"type":"number"},"collateralUsd":{"type":"number","x-unit":"usd"},"debtUsd":{"type":"number","x-unit":"usd"},"headroomUsd":{"type":"number","x-unit":"usd"},"utilisation":{"type":"number","x-unit":"decimal-fraction"},"withDebt":{"type":"number"},"belowTwo":{"type":"number"},"belowOnePointTwo":{"type":"number"},"riskiest":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"collateralUsd":{"type":"number","x-unit":"usd"},"debtUsd":{"type":"number","x-unit":"usd"},"headroomUsd":{"type":"number","x-unit":"usd"},"ltv":{"type":"number"},"liquidationThreshold":{"type":"number"},"healthFactor":{"type":"number"}}}},"largest":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"collateralUsd":{"type":"number","x-unit":"usd"},"debtUsd":{"type":"number","x-unit":"usd"},"headroomUsd":{"type":"number","x-unit":"usd"},"ltv":{"type":"number"},"liquidationThreshold":{"type":"number"},"healthFactor":{"type":["null","number"]}}}},"positions":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"collateralUsd":{"type":"number","x-unit":"usd"},"debtUsd":{"type":"number","x-unit":"usd"},"headroomUsd":{"type":"number","x-unit":"usd"},"ltv":{"type":"number"},"liquidationThreshold":{"type":"number"},"healthFactor":{"type":["null","number"]}}}},"method":{"type":"string"},"caveat":{"type":"string"},"protocols":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"basis":{"type":"string"},"asked":{"type":"number"},"positions":{"type":"number","x-unit":"count"},"collateralUsd":{"type":"number","x-unit":"usd"},"debtUsd":{"type":"number","x-unit":"usd"},"complete":{"type":"boolean"}}}},"notRead":{"type":"array","items":{"type":"string"}},"euler":{"type":"object","properties":{"asked":{"type":"number"},"positions":{"type":"number","x-unit":"count"},"addresses":{"type":"number","x-unit":"count"},"complete":{"type":"boolean"},"pricedUsd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"borrowersKnown":{"type":"number"},"oursAmongThem":{"type":"number"},"zeroMeans":{"type":"string"},"why":{"type":"string"},"rows":{"type":"array"}}},"compound":{"type":"object","properties":{"markets":{"type":"number"},"asked":{"type":"number"},"positions":{"type":"number","x-unit":"count"},"addresses":{"type":"number","x-unit":"count"},"debtUsd":{"type":"number","x-unit":"usd"},"complete":{"type":"boolean"},"rows":{"type":"array"}}},"morpho":{"type":"object","properties":{"positions":{"type":"number","x-unit":"count"},"addresses":{"type":"number","x-unit":"count"},"collateralUsd":{"type":"number","x-unit":"usd"},"debtUsd":{"type":"number","x-unit":"usd"},"suppliedUsd":{"type":"number","x-unit":"usd"},"complete":{"type":"boolean"},"batchesFailed":{"type":"number"},"addressesAsked":{"type":"number"},"addressesHeld":{"type":"number","x-unit":"count"},"rows":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"market":{"type":"string"},"collateralUsd":{"type":"number","x-unit":"usd"},"debtUsd":{"type":"number","x-unit":"usd"},"suppliedUsd":{"type":"number","x-unit":"usd"},"healthFactor":{"type":["null","number"]}}}}}},"withheld":{"type":"array","items":{"type":"string"}}}},"calibration":{"type":"object","properties":{"at":{"type":"string"},"wallets":{"type":"number"},"walletsAsked":{"type":"number"},"trades":{"type":"number"},"buys":{"type":"number"},"scored":{"type":"number"},"unresolvedMarket":{"type":"number"},"unknownToken":{"type":"number"},"marketsLookedUp":{"type":"number"},"brier":{"type":"number"},"baseline":{"type":"number"},"baselineMeans":{"type":"string"},"hitRate":{"type":"number","x-unit":"decimal-fraction"},"meanForecast":{"type":"number"},"bands":{"type":"array","items":{"type":"object","properties":{"from":{"type":"number","x-unit":"timestamp"},"to":{"type":"number","x-unit":"timestamp"},"forecasts":{"type":"number"},"meanForecast":{"type":"number"},"happened":{"type":"number"}}}},"byAddress":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"forecasts":{"type":"number"},"brier":{"type":"number"},"hitRate":{"type":"number","x-unit":"decimal-fraction"},"meanForecast":{"type":"number"},"stakedUsd":{"type":"number","x-unit":"usd"}}}},"basis":{"type":"string"},"method":{"type":"string"},"caveat":{"type":"string"},"edge":{"type":"object","properties":{"outcomes":{"type":"number"},"markets":{"type":"number"},"meanPrice":{"type":"number"},"happened":{"type":"number"},"excess":{"type":"number"},"z":{"type":"number"}}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"RevenueData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"note":{"type":"string"},"prices":{"type":"object","properties":{"at":{"type":"string"},"cardsWithEndpoint":{"type":"number"},"endpoints":{"type":"number"},"rootsAsked":{"type":"number"},"rootSample":{"type":"number"},"complete":{"type":"boolean"},"answers":{"type":"object","properties":{"quoted":{"type":"number"},"priced-unreadable":{"type":"number"},"open":{"type":"number"},"gated":{"type":"number"},"refusing":{"type":"number"},"unreachable":{"type":"number"}}},"claims":{"type":"object","properties":{"cardsDeclaringX402":{"type":"number"},"declaredButDidNotQuote":{"type":"number"},"quotedWithoutDeclaring":{"type":"number"}}},"catalogue":{"type":"object","properties":{"resources":{"type":"number"},"sellers":{"type":"number"},"median":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"bands":{"type":"array","items":{"type":"object","properties":{"band":{"type":"string"},"count":{"type":"number","x-unit":"count"}}}},"note":{"type":"string"}}},"probe":{"type":"object","properties":{"median":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"min":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"max":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"pricedInUnknownAsset":{"type":"number"},"measured":{"type":"number","x-unit":"count"}}},"quotes":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"registrations":{"type":"number","x-unit":"count"},"usd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"amount":{"type":"string"},"asset":{"type":"string"},"network":{"type":"string"}}}},"agreement":{"type":"object","properties":{"asked":{"type":"number"},"same":{"type":"number"},"different":{"type":"number"},"noLongerPriced":{"type":"number"},"unreachable":{"type":"number"},"examples":{"type":"array","items":{"type":"object","properties":{"resource":{"type":"string"},"listed":{"type":"string"},"quoted":{"type":"string"}}}}}},"movement":{"type":"object","properties":{"added":{"type":"number"},"changed":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"}}}},"withdrawn":{"type":"number"},"comparable":{"type":"boolean"}}},"method":{"type":"string"},"caveat":{"type":"string"}}},"treasury":{"type":"object","properties":{"at":{"type":"string"},"earners":{"type":"number"},"pricedEarners":{"type":"number"},"pricedEarnedUsd":{"type":"number","x-unit":"usd"},"outcomes":{"type":"object","properties":{"spentOnARailAfterEarning":{"type":"number"},"lentIntoAVaultWeRead":{"type":"number"},"holdingABalanceWeCanRead":{"type":"number"},"tradingOnAVenueWeRead":{"type":"number"},"noneOfThoseVisible":{"type":"number"}}},"spentOnlyBeforeEarning":{"type":"number"},"heldUsd":{"type":"number","x-unit":"usd"},"balanceCoverage":{"type":"object","properties":{"addressesRead":{"type":"number","x-unit":"count"},"earnersAmongThem":{"type":"number"},"paidInKnown":{"type":"number"},"balancesAsked":{"type":"number"},"stillHolding":{"type":"number"},"chainsUnread":{"type":"number"},"byChainAsked":{"type":"object","properties":{"polygon":{"type":"number"},"base":{"type":"number","x-unit":"index-level"},"ethereum":{"type":"number"},"arbitrum":{"type":"number"},"optimism":{"type":"number"}}}}},"tradedBy":{"type":"object","properties":{"capital.gmxAccounts":{"type":"number"},"capital.ostium":{"type":"number"},"commerce.polymarket":{"type":"number"}}},"largestUnexplained":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"usd":{"type":"number","x-unit":"usd"},"events":{"type":"number","x-unit":"count"}}}},"reach":{"type":"number"},"method":{"type":"string"},"caveat":{"type":"string"}}},"asOf":{"type":"string"},"pricesAsOf":{"type":"string"},"treasuryAsOf":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"PreflightData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"proposal":{"type":"object","properties":{"to":{"type":"string"},"amountUsd":{"type":"number","x-unit":"usd"},"chain":{"type":"string"},"resource":{"type":"string"},"format":{"type":"object","properties":{"kind":{"type":"string"},"chain":{"type":"string"},"network":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"coverage":{"type":"string"},"says":{"type":"string"}}}}},"asOf":{"type":"string"},"verdict":{"type":"string"},"says":{"type":"string"},"verdicts":{"type":"object","properties":{"nothing-against-it":{"type":"string"},"look-first":{"type":"string"},"cannot-say":{"type":"string"}}},"findings":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"tone":{"type":"string"},"evidence":{"type":"string"},"says":{"type":"string"},"kind":{"type":"string"}}}},"observations":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"tone":{"type":"string"},"evidence":{"type":"string"},"says":{"type":"string"},"kind":{"type":"string"}}}},"listing":{"type":"object","properties":{"resource":{"type":"string"},"payTo":{"type":"string"},"amount":{"type":"number","x-unit":"usd"},"network":{"type":"string"},"description":{"type":"string"},"amountRaw":{"type":"string"},"asset":{"type":"string"}}},"received":{"type":"object","properties":{"payments":{"type":"number","x-unit":"count"},"largestUsd":{"type":"number","x-unit":"usd"},"medianUsd":{"type":"number","x-unit":"usd"}}},"check":{"type":"string"},"limits":{"type":"string"},"againstListing":{"type":"object","properties":{"price":{"type":"string"},"listedAmount":{"type":"number"},"listedAsset":{"type":"string"},"payee":{"type":"string"},"network":{"type":"string"},"settlementHistory":{"type":"string"},"settledOn":{"type":"array","items":{"type":"object","properties":{"chain":{"type":"string"},"payments":{"type":"number","x-unit":"count"}}}},"listingAge":{"type":"object","properties":{"days":{"type":"number","x-unit":"days"},"says":{"type":"string"}}},"endpoint":{"type":"object","properties":{"outcome":{"type":"string"},"probedAt":{"type":"string","description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"says":{"type":"string"}}},"says":{"type":"string"}}},"againstEndpoint":{"type":"object","properties":{"quoted":{"type":"boolean"},"why":{"type":["null","string"]},"price":{"type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"asOf":{"type":["null","string"],"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"amountRaw":{"type":["null","number"]},"amount":{"type":"number","x-unit":"usd"},"asset":{"type":["null","string"]},"network":{"type":["null","string"]},"payTo":{"type":"string"},"says":{"type":"string"}}}},"lead":{"type":"string"},"liveQuoteMatchesCatalogue":{"type":"boolean","description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"liveQuoteMatchesCatalogueWhy":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"againstQuote":{"type":"string"},"disagreements":{"type":"array"}}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"IdentifyData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"given":{"type":"string"},"looksLike":{"type":"string"},"address":{"type":"string"},"format":{"type":"object","properties":{"kind":{"type":"string"},"chain":{"type":"string"},"coverage":{"type":"string"},"says":{"type":"string"}}},"evidence":{"type":"array","items":{"type":"object","properties":{"how":{"type":"string"},"detail":{"type":"string"}}}},"candidates":{"type":"array"},"says":{"type":"string"},"check":{"type":"string"},"kinds":{"type":"object","properties":{"address":{"type":"string"},"transaction":{"type":"string"},"endpoint":{"type":"string"},"host":{"type":"string"},"agent-id":{"type":"string"},"unrecognised":{"type":"string"}}},"limits":{"type":"string"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ServiceData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"endpoint":{"type":"string"},"host":{"type":"string"},"declaredBy":{"type":"array","items":{"type":"object","properties":{"owner":{"type":"string"},"agentId":{"type":"string"},"chain":{"type":"string"},"protocol":{"type":"string"},"declaredTools":{"type":"array"}}}},"latest":{"type":"object","properties":{"day":{"type":"string"},"outcome":{"type":"string"},"latencyMs":{"type":"number","x-unit":"seconds"},"httpStatus":{"type":"number"},"name":{"type":"string"},"version":{"type":"string"},"protocolVersion":{"type":"string"},"observed":{"type":"array","items":{"type":"string"}}}},"history":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"outcome":{"type":"string"},"latencyMs":{"type":"number","x-unit":"seconds"},"httpStatus":{"type":"number"},"name":{"type":"string"},"version":{"type":"string"},"protocolVersion":{"type":"string"},"observed":{"type":"array","items":{"type":"string"}}}}},"drift":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"says":{"type":"string"},"outcomes":{"type":"object","properties":{"serving":{"type":"string"},"no-handshake":{"type":"string"},"not-a-card":{"type":"string"},"unreachable":{"type":"string"},"gated":{"type":"string"},"error":{"type":"string"}}},"check":{"type":"string"},"limits":{"type":"string"},"price":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"measured":{"type":"object","properties":{"evidence":{"type":"string"},"days":{"type":"number","x-unit":"days"},"serving":{"type":"number"},"outcomeCounts":{"type":"object","properties":{"serving":{"type":"number"}}},"latencyMsMedian":{"type":"number","x-unit":"decimal-fraction"},"latencyMsWorst":{"type":"number"},"firstRead":{"type":"string"},"lastRead":{"type":"string"},"says":{"type":"string"}}},"handshake":{"type":"string"},"unpaidProbe":{"type":"object","properties":{"outcome":{"type":"string"},"probedAt":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"httpStatus":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"latencyMs":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"quoted":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"detail":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"says":{"type":"string"}}},"manifest":{"type":"object","properties":{"hash":{"type":"string"},"tools":{"type":"array","items":{"type":"string"}},"protocolVersion":{"type":"string"},"firstSeen":{"type":"string"},"lastSeen":{"type":"string"},"days":{"type":"number","x-unit":"days"},"says":{"type":"string"}}},"changes":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string"},"added":{"type":"array","items":{"type":"string"}},"removed":{"type":"array"},"protocolVersion":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"from":{"type":"string"},"to":{"type":"string"}}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"X402EndpointsData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"resource":{"type":"string"},"payTo":{"type":"string"},"priceUsd":{"type":["null","number"],"x-unit":"usd"},"priceRaw":{"type":"string"},"asset":{"type":"string"},"network":{"type":"string"},"description":{"type":"string"},"listedAt":{"type":"string"},"seenByUs":{"type":"object","properties":{"state":{"type":"string"},"knocks":{"type":"number"},"answered":{"type":"number"},"lastKnocked":{"type":["null","string"],"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"downAtLeastHours":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"downAtMostHours":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."}}}}}},"count":{"type":"number","x-unit":"count"},"says":{"type":"string"},"capped":{"type":"boolean"}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"TestPurchaseData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"resource":{"type":"string"},"quotedRaw":{"type":["null","number"]},"quotedUsd":{"type":"number","description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero.","x-unit":"usd"},"payee":{"type":["null","string"]},"network":{"type":["null","string"]},"steps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"asks":{"type":"string"},"state":{"type":"string"},"stops":{"type":"boolean"},"says":{"type":"string"},"short":{"type":"string"},"code":{"type":"number"}}}},"verdict":{"type":"string"},"decidedAt":{"type":["null","string"]},"says":{"type":"string"},"cannotSee":{"type":"array","items":{"type":"string"}},"rehearsed":{"type":"boolean"},"live":{"type":"boolean"},"probedAt":{"type":"string"},"askedWithUnfilled":{"type":"array"},"headline":{"type":"string"},"because":{"type":["null","string"]},"walkedPastTheStop":{"type":"boolean"},"askedWith":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"knockedOn":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"history":{"type":"object","properties":{"knocks":{"type":"number"},"answered":{"type":"number"},"since":{"type":"string"},"lastAnswered":{"type":"string","description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"lastKnocked":{"type":"string"},"longestFailureRun":{"type":"number"},"runs":{"type":"array","items":{"type":"object","properties":{"outcome":{"type":"string"},"answered":{"type":"boolean"},"from":{"type":"string"},"to":{"type":"string"},"knocks":{"type":"number"}}}},"state":{"type":"string"},"downAtLeastHours":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"downAtMostHours":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero. Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."},"says":{"type":"string"}}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"CapitalPortfolioData":{"type":"object","description":"Observed, not designed. This shape was derived by calling the operation and recording what came back, and it is re-derived and compared on every deploy. Types are what was seen. Fields listed under `required` are the ones this API commits to returning, declared by hand rather than inferred — everything else is what was observed, and an absent measurement is a real answer here rather than a fault. Required means present, never non-null.","required":["data","meta","warnings"],"properties":{"data":{"type":"object","properties":{"asked":{"type":"number"},"resolved":{"type":"number"},"notHeld":{"type":"array"},"holdings":{"type":"number"},"positionUsd":{"type":"number","x-unit":"usd"},"positionsNotStated":{"type":"number"},"exit":{"type":"object","properties":{"declared":{"type":"object","properties":{"holdings":{"type":"number"},"positionUsd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."}}},"behind-a-queue":{"type":"object","properties":{"holdings":{"type":"number"},"positionUsd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."}}},"floor-only":{"type":"object","properties":{"holdings":{"type":"number"},"positionUsd":{"description":"Observed only as null so far; the type it carries when present has not been recorded. Null means unavailable or not measured, never zero."}}},"unread":{"type":"object","properties":{"holdings":{"type":"number"},"positionUsd":{"type":"number","x-unit":"usd"}}}}},"coverage":{"type":"object","properties":{"risk":{"type":"number"},"exit":{"type":"number"},"control":{"type":"number"},"markets":{"type":"number"}}},"byRiskBand":{"type":"object","properties":{"moderate":{"type":"number"},"low":{"type":"number"}}},"byControlBand":{"type":"object","properties":{"thin":{"type":"number"}}},"sharedControllers":{"type":"array"},"sharedMarkets":{"type":"array"},"sharedVenues":{"type":"array"},"says":{"type":"string"},"cannotSee":{"type":"array","items":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"Problem":{"type":"object","description":"An RFC 9457 problem document. Served as `application/problem+json` on every failure except 402, which carries the x402 payment offer instead.","required":["type","title","status","code","detail"],"properties":{"type":{"type":"string","format":"uri","description":"A stable URI for this kind of failure."},"title":{"type":"string","description":"What went wrong, in a sentence that does not change per request."},"status":{"type":"integer","minimum":400,"maximum":599,"description":"The HTTP status, repeated here so the body stands alone."},"code":{"type":"string","description":"The machine token to switch on, e.g. invalid_parameter, not_found, rate_limited."},"detail":{"type":"string","description":"What went wrong with THIS request, and where possible what to do instead."},"instance":{"type":"string","description":"The path that produced it."},"request_id":{"type":"string","description":"Also sent as X-Request-Id. Quote it and we can find the request in our logs."},"invalid_params":{"type":"array","description":"Present on 400. Every parameter at fault, not only the first.","items":{"type":"object","required":["name","reason"],"properties":{"name":{"type":"string"},"value":{"type":"string","description":"The value we could not use, echoed back."},"reason":{"type":"string"}}}}}}},"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Issued from the account page."},"payment":{"type":"apiKey","in":"header","name":"X-PAYMENT","description":"Settle in-request: `<chain>:<txHash>` for a transfer already sent. Read on chain during the call and credited immediately."}}},"security":[{"apiKey":[]}],"tags":[{"name":"Ratings","description":"What we think of a strategy. Free, the argument is worth more to us published than sold."},{"name":"Record","description":"What each vault and operator actually did, read from the chain rather than reported to us."},{"name":"Risk","description":"What a shock costs you: look-through exposure, liquidation distance, forced selling."},{"name":"Market","description":"The market around a position, crowding, correlation, who leads and who follows."},{"name":"History","description":"Series over time. Every point is a measurement taken then, never a backfill of what we believe now."},{"name":"Judgement","description":"Commit to a decision before executing, reveal it afterwards, and let anyone check the two match."},{"name":"Attestation","description":"Whether a sequence is intact, checkable without trusting us."},{"name":"Alerts","description":"Watches you arm, and the webhooks they fire."},{"name":"Account","description":"Your balance, quota, plans and this document."}],"webhooks":{"watch.fired":{"post":{"tags":["Alerts"],"summary":"A watch you armed has crossed its threshold.","description":"Sent to every active endpoint registered for this event, at most once per watch per crossing.\n\n**Verifying.** Each request carries `x-aspern-signature: t=<unix-seconds>,v1=<hex>`, where the hex is HMAC-SHA256 over the exact string `<t>.<raw request body>` keyed by your webhook secret. Sign the BYTES you received: re-serialising the parsed JSON produces a different signature and the delivery becomes unverifiable.\n\n**Replay.** Reject a timestamp more than 300 seconds from your own clock. Compare the digest with a constant-time comparison.\n\n**Retries.** A non-2xx is retried with exponential backoff from one minute, doubling, capped at six hours, with up to 20% jitter added, never subtracted, so a retry is never earlier than its backoff. A 4xx other than 408 and 429 is treated as permanent and not retried: you understood and refused.\n\n**Ordering and duplicates.** Delivery is at-least-once and not ordered. Use the `id` to make your handler idempotent.","requestBody":{"required":true,"content":{"application/json":{"example":{"id":"whd_2f8a1c","event":"watch.fired","createdAt":"2026-08-27T09:14:02.117Z","watch":{"id":"wch_91b2","kind":"drawdown","target":"morpho-steakhouse-usdc","threshold":0.05},"observed":{"value":0.062,"at":"2026-08-27T09:12:00.000Z"},"subject":{"slug":"morpho-steakhouse-usdc","name":"Steakhouse USDC","chain":"ethereum"}}}}},"responses":{"200":{"description":"Accepted. Any 2xx stops retries."},"4XX":{"description":"Understood and refused, not retried, except 408 and 429."},"5XX":{"description":"Retried with backoff."}}}},"webhook.test":{"post":{"tags":["Alerts"],"summary":"A test delivery, sent when you ask for one.","description":"Identical in shape and signing to a real event, so a receiver that verifies this one verifies all of them. Sent on demand from the account page, the only way to find out your endpoint rejects our signature before a real alert depends on it.","requestBody":{"required":true,"content":{"application/json":{"example":{"id":"whd_test_01","event":"webhook.test","createdAt":"2026-08-27T09:00:00.000Z"}}}},"responses":{"200":{"description":"Accepted."}}}}},"paths":{"/v1/vaults":{"get":{"tags":["Ratings"],"summary":"The vault universe, filterable.","description":"A vault absent here is one we do not observe, not one that does not exist.\n\nFree.","operationId":"getVaults","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultList"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"q","in":"query","required":false,"description":"Name or address fragment.","schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"description":"e.g. hyperliquid, solana, base.","schema":{"type":"string"}},{"name":"platform","in":"query","required":false,"description":"A platform id as /v1/platforms lists it and every vault carries in `platformId`, e.g. `morpho` or `morpho-v2`. The display name is also accepted, case-insensitively.","schema":{"type":"string"}},{"name":"agentManaged","in":"query","required":false,"description":"Restrict to machine-managed. `machineManaged` is accepted as a synonym.","schema":{"type":"boolean"}},{"name":"minTvl","in":"query","required":false,"description":"Floor on stated size.","schema":{"type":"number"}},{"name":"earned","in":"query","required":false,"description":"in-line | beating | short — what a holder ACTUALLY earned against what the venue advertises. Matches only the vaults where the two are COMPARABLE. The answer’s `warnings` carry that population with its id, its definition and a count taken when you asked, because a figure typed into a description goes wrong silently. A vault whose venue quotes nothing, whose share price never moves, or whose history is too short is excluded rather than counted as in-line, and the answer carries a warning saying so.","schema":{"type":"string"}},{"name":"minOwnShare","in":"query","required":false,"description":"Floor on the share of the vault its LEADER holds, 0 to 1. Readable on some venues only, and the answer’s `warnings` carry the count with its population id, so a floor here excludes every other venue, where the figure is ABSENT rather than zero, and the answer carries a warning saying so. What the chain shows is who holds the shares, not whose money they are: a large holding is evidence of alignment, never proof.","schema":{"type":"number"}},{"name":"maxRisk","in":"query","required":false,"description":"Ceiling on the published risk score. Scored for a minority of open vaults; the rest are excluded by this filter because they have no score, which is not the same as scoring well.","schema":{"type":"number"}},{"name":"closed","in":"query","required":false,"description":"Include vaults we have recorded as shut. Excluded by default.","schema":{"type":"boolean"}},{"name":"lifecycle","in":"query","required":false,"description":"live | dead | unlaunched | unknown. `dead` reaches the failures in one call rather than past eleven hundred rows of survivors, and implies closed=true. `unlaunched` is a vault nobody ever deposited into, which is not a failure.","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"'csv' returns a spreadsheet rather than JSON. Needs export.bulk, so this otherwise-free route answers 402 for that one value.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Default 50, capped at 100, or 1000 with export.bulk.","schema":{"type":"number"}},{"name":"offset","in":"query","required":false,"description":"","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/operators/{slug}/check":{"get":{"tags":["Ratings"],"summary":"The operator check: who runs the money, and how much of it is their own. Free, and needs no key.","description":"The question that follows the vault check, in an answer rather than the 533KB document /v1/operators/{slug} returns. `ownShare` is readable on Hyperliquid and Drift only — 584 of 3,394 open vaults, 17% — because those two publish the leader’s holding; elsewhere it is ABSENT, not zero, and `cannotSee` says which. The median is taken over the strategies we can read and describes those, not the manager. And what the chain shows is who holds the shares, not whose money they are: the address running a vault can be a treasury or a custodian holding for others, so a large own-share is evidence of alignment and never proof.\n\nFree.","operationId":"getOperatorsBySlugCheck","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperatorCheck"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"Operator slug.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}/check":{"get":{"tags":["Ratings"],"summary":"The vault check: what the record shows about one vault before putting money in. Free, and needs no key.","description":"The counterpart of /v1/agents/{address}/check, for capital rather than counterparties. The headline is REALISED against ADVERTISED — what a holder actually earned set against what the venue says the vault yields — and it ships with its own `comparability`, because a realised figure drawn from too short or too sparse a window is not a comparison and must never be read as one. Rates are decimal fractions: 0.0432 is 4.32% a year. `cannotSee` lists what we could not establish for this vault, in its own field rather than as an absence a reader has to notice. Answered at the PUBLIC tier whatever key is sent, so the same URL never means two different things.\n\nFree.","operationId":"getVaultsBySlugCheck","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultCheck"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}":{"get":{"tags":["Ratings"],"summary":"One vault: metrics, value series, positions, execution quality, and what evidence exists for it.","description":"The `available` block is free at every tier and states what this platform HOLDS for the vault, fills, positions, funding accrual, liquidation prices, whether or not the key may read it. An absence and a paywall are different facts: a 402 from /v1/funding or /v1/stress means the data exists and the tier does not carry it. `performance.execution` carries turnover, taker share and fee basis points where the vault has traded enough for them to mean anything, and null where it has not.\n\nFree.","operationId":"getVaultsBySlug","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/operators":{"get":{"tags":["Ratings"],"summary":"Operator cohorts, survivors and failures kept in.","description":"Free.","operationId":"getOperators","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperatorList"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"description":"Default 50, capped at 200.","schema":{"type":"number"}},{"name":"offset","in":"query","required":false,"description":"","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/operators/{slug}":{"get":{"tags":["Ratings"],"summary":"One operator and its whole book.","description":"Free.","operationId":"getOperatorsBySlug","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperatorDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/assets":{"get":{"tags":["Ratings"],"summary":"Instruments and who holds them.","description":"Free.","operationId":"getAssets","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/index":{"get":{"tags":["Ratings"],"summary":"The machine-managed capital index, with its constituents.","description":"Requires `index.read` — PUBLIC or PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getIndex","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"from","in":"query","required":false,"description":"ISO date, inclusive.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"ISO date, inclusive.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/reports/{digest}":{"get":{"tags":["Ratings"],"summary":"Whether ASPERN issued a due-diligence report, from the digest printed on it.","description":"The proof of issue and nothing of the content: the report is sold per vault and is not kept behind a public address, so this says that a document with this digest was issued, for which vault, when, and on what methodology and build. The digest is SHA-256 over the report’s canonical JSON (keys sorted, no whitespace), never over the bytes of a PDF. Reports issued before 2026-10-25 were not recorded; the two sample reports are recorded from the moment they were last regenerated, so their ids can be checked too.\n\nFree.","operationId":"getReportsByDigest","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportIssueDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"A valid request whose named resource cannot be produced. `not_issued`: No report with this digest was issued: it was changed after issue, it did not come from us, or it predates 2026-10-25. Not retryable by repeating the same request; the body says what would change the answer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"digest","in":"path","required":true,"description":"The full 64-hex-digit digest from a report’s closing lines, or the 12-digit document id printed on its pages.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/benchmark/{symbol}":{"get":{"tags":["Ratings"],"summary":"A benchmark series to compare against.","description":"We keep a series for a SHORT list of symbols, not for everything that has a price. A 404 here means we hold no series for that symbol, never that the symbol is unknown, and the body lists the ones we do hold. Our own verifier read nine symbols out of /v1/vaults, got 404 on all nine, and reported a documented route that answers nothing.\n\nFree.","operationId":"getBenchmarkBySymbol","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"A valid request whose named resource cannot be produced. `not_found`: No benchmark series for that symbol. The response carries `available`, which is every symbol we keep one for. Not retryable by repeating the same request; the body says what would change the answer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"symbol","in":"path","required":true,"description":"A symbol we keep a benchmark series for. The 404 body lists them.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/dependencies":{"get":{"tags":["Capital"],"summary":"How much capital stands behind each owner, curator and guardian key.","description":"Ranked by dollars behind a key, not vaults per key — nine vaults holding a billion and nineteen holding half of that are different findings. Ownership renounced to the zero address is its own state and never folded into unknown: one means nobody can change the vault, the other means we could not read it. The named keys need a plan; the aggregate does not. `rolesOverlap` is true where more than one of owner, curator and guardian is held by the same party. False means the roles we could read are held apart, which is not proof they are different people.\n\nFree.","operationId":"getDependencies","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependenciesData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/rwa":{"get":{"tags":["Capital"],"summary":"Real-world exposure by class, never summed across classes.","description":"A tokenised Treasury bill and a USDC balance are both “RWA exposure” in a press release and nothing alike in a risk report; on our numbers they differ by a factor of thirty. The classes are separate figures and there is no total. The holdings list needs a plan; the class totals do not. `attributed` is whether an exposure could be placed with a named issuer or instrument; false means unattributed in our reading, never that nobody holds it.\n\nFree.","operationId":"getRwa","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RwaData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/lifecycle":{"get":{"tags":["Commerce"],"summary":"Six agent-commerce rails on one seven-rung ladder.","description":"The rungs are never added together: a registration, a request and a settlement answer different questions, and a total mixing them lets a rail with a chatty request event outrank one where money moves. An empty cell says which of three things it is — never happened, cannot happen on this rail, or we do not read it.\n\nFree.","operationId":"getLifecycle","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifecycleData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/trading":{"get":{"tags":["Capital"],"summary":"Four perpetual venues, every open GMX position, and what attributable agents owe.","description":"The exposure figures are NOT one measurement and there is deliberately no total — GMX, dYdX and Avantis publish open interest, Ostium is summed notional over a capped sample and is a floor. Leverage is size over collateral computed here; the venue’s own leverage field disagrees on two positions in five and the ratio is published rather than either being called correct. Named positions need a plan; the shape of the book does not.\n\nFree.","operationId":"getTrading","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradingData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/revenue":{"get":{"tags":["Commerce"],"summary":"What agent work is advertised at, and what happens to the money afterwards.","description":"A published price is not a sale. The treasury residual is our own reach and not agent behaviour: revenue moved to an exchange, to an unlinked treasury address, or onto a chain we do not read look identical from here, so it is unexplained rather than withdrawn. Two of the four outcomes are bounded by our coverage rather than by behaviour.\n\nFree.","operationId":"getRevenue","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/coverage/measures":{"get":{"tags":["Reference"],"summary":"Five coverage measures, each with its own numerator, denominator and population.","description":"They are not comparable with one another and are never summed. Position notional is divided by notional, never by capital: a levered book cannot inflate a capital figure.\n\nFree.","operationId":"getCoverageMeasures","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverageMeasures"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/x402/evidence":{"get":{"tags":["Commerce"],"summary":"x402 payments by what can be shown about them: route, facilitator, candidate; and every payment split into settled, service-linked and delivery-evidenced.","description":"An authorised EIP-3009 transfer proves a transfer, not an x402 payment. No tier is protocol-confirmed: the HTTP 402 receipt never reaches a chain.\n\nFree.","operationId":"getX402Evidence","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402Evidence"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/perimeter":{"get":{"tags":["Reference"],"summary":"Venue-level readings behind the coverage perimeter.","description":"The perimeter itself is a page, because its coverage claims are checked against the database at read time; a cached copy would be exactly the drift it exists to catch.\n\nFree.","operationId":"getPerimeter","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerimeterData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/coverage/exit-lifecycle":{"get":{"tags":["Risk"],"summary":"How much of the way out we can see, phase by phase: a request filed, something set aside to claim, money that actually left, and an attempt that failed.","description":"FOUR PHASES AND WE READ THREE. The fourth, a redemption somebody attempted and could not complete, we do not read at all and it is listed anyway with the reason: no vault state records a failed attempt, so it would need every transaction sent to each contract and its receipt, and a zero there would say nobody was turned away. FOUR STATES PER PHASE, never collapsed into \"missing\": `read`, `exempt` (the phase cannot exist — a synchronous redeem settles in the transaction that asks, so nothing is ever filed and nothing set aside), `subjectRefuses` (the phase EXISTS and the contract will not expose it — an ERC-7540 vault carrying neither standard getter; no work of ours closes this) and `unread` (which is the work). THERE IS NO SINGLE LIFECYCLE PERCENTAGE and there will not be one: the phases have different denominators, so averaging them would produce a figure no phase is answerable for. `byCapitalApplicable` divides by the capital the phase COULD be read for, which is the total less the exempt.\n\nFree.","operationId":"getCoverageExitLifecycle","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitLifecycleCoverage"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/coverage/endpoints":{"get":{"tags":["Account"],"summary":"How well we know whether declared endpoints answer: two populations, counts by state, and how recently each was asked.","description":"NOT a status page and not one uptime number. The states mean different things and are counted apart: a 402 is an x402 seller doing what it advertises, a 401 or 403 is credentials we do not hold, a 3xx is a move we chose not to follow, and a timeout describes OUR attempt rather than the host — only `fault: true` states are the endpoint failing. The two populations have their own denominators and are never summed: the HOSTS registered identities declare, probed daily under a deadline that sometimes expires before every host is reached, and the x402 RESOURCES sellers list, where a state is published only after three knocks because one failure is not a finding. A host the last run did not reach keeps whatever an earlier day found, which is a memory and not a reading, and `notAsked` says how many. Whether a 402 offer can actually be signed needs the response BODY and is not read here.\n\nFree.","operationId":"getCoverageEndpoints","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointCoverage"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/freshness":{"get":{"tags":["Account"],"summary":"How old every figure on this platform is, and which readers have stopped.","description":"A job that has NEVER run is not a job that ran long ago — neverRun says the first, an old timestamp the second. Late is measured against each job’s own cadence, with two intervals of grace, because one threshold cannot describe an hourly job and a daily one. `hasNoCode` marks a scheduled job with no runner — it cannot run and nothing else here would say so — but it is read from a list the scheduler writes, and where that is missing the list is empty and every job comes back false. `codeCheckRan` says whether it was written: false makes every `hasNoCode` on the answer unusable rather than merely absent, because the reassuring value is the default. `lastOk` is the last RUN’s outcome and says nothing about one now in flight. `overCeiling` and `nearCeiling` are false for THREE reasons and only one is good news: the job ran inside its ceiling, or no ceiling is configured for it, or it has never recorded a duration. Read `ceilingMinutes` and `neverRun` beside them before treating false as a pass.\n\nFree.","operationId":"getFreshness","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/meta":{"get":{"tags":["Ratings"],"summary":"Counts, capabilities your key holds, and the standing limitations.","description":"Free.","operationId":"getMeta","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/platforms":{"get":{"tags":["Ratings"],"summary":"Every platform we hold vaults for, with the stable id /v1/vaults?platform= filters by.","description":"The id is stable and is what every vault carries as `platformId`; the name is a display label and may change. A platform with no open vault is still listed, with its count at zero.\n\nFree.","operationId":"getPlatforms","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformList"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/risk":{"post":{"tags":["Risk"],"summary":"Price a holding you already have: look-through exposure and what a move costs you.","description":"Losses are pro rata on vault equity; a waterfall or first-loss tranche will not lose pro rata.\n\nRequires `risk.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"postRisk","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskResultData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskRequest"},"examples":{"oneHolding":{"summary":"Price a single holding against two shocks.","value":{"holdings":[{"vault":"hyperliquidity-provider-hlp-dfc24b","usd":1000000}],"shocks":[-0.1,-0.2]}}},"example":{"holdings":[{"vault":"hyperliquidity-provider-hlp-dfc24b","usd":1000000}],"shocks":[-0.1,-0.2]}}}},"x-lifecycle":"active"}},"/v1/stress":{"get":{"tags":["Risk"],"summary":"Who is liquidated as one instrument moves, and at what named price.","description":"Only the named instrument moves, so every figure is a floor.\n\nRequires `stress.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getStress","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StressData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"A valid request whose named resource cannot be produced. `not_held`: The instrument is known and no vault we can measure holds it, so there is no ladder to build. A different instrument, or a later read after a vault takes the position, would change the answer. Not retryable by repeating the same request; the body says what would change the answer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"instrument","in":"query","required":true,"description":"","schema":{"type":"string"}},{"name":"scale","in":"query","required":false,"description":"'sigma' places rungs by distance rather than round numbers.","schema":{"type":"string"}},{"name":"sigmas","in":"query","required":false,"description":"Comma-separated rungs, in standard deviations, replacing the defaults.","schema":{"type":"string"}},{"name":"horizonDays","in":"query","required":false,"description":"Default 30.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/cascade":{"get":{"tags":["Risk"],"summary":"The forced selling that follows a first round, and where it lands.","description":"Impact from quoted depth reads about four times below the volatility model; the response says which was used. `converged` false means the simulation hit its round ceiling with liquidations still arriving, so the totals are a floor rather than the end of the cascade.\n\nRequires `cascade.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getCascade","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CascadeData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"instrument","in":"query","required":true,"description":"","schema":{"type":"string"}},{"name":"shock","in":"query","required":true,"description":"Fractional move, -0.95 to 0.95.","schema":{"type":"number"}},{"name":"horizonDays","in":"query","required":false,"description":"Default 30. Sets the volatility window behind the impact model.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/correlation":{"get":{"tags":["Risk"],"summary":"Whether vaults are the same trade once the market is removed.","description":"Every figure carries its overlapping days and an interval; an indistinguishable pair says so. `sameTrade` IS A BOOLEAN WHOSE FALSE MEANS THREE THINGS, and which one it is has to be read off `residual`: residual null means we could not compute it, `residual.distinguishable` false means we could not tell the correlation apart from zero at all, and only a populated, distinguishable residual below the threshold means the pair is measurably NOT one trade. Counting every false as “different trades” folds two kinds of ignorance into a finding, which is the one reading this field must not be given. `agentManagedOnly` echoes your own request rather than describing the data: true is the agent-managed cohort, false the whole universe.\n\nRequires `correlation.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getCorrelation","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrelationData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"vaults","in":"query","required":false,"description":"Comma-separated slugs, two to twelve. Omit for the cohort.","schema":{"type":"string"}},{"name":"agentManaged","in":"query","required":false,"description":"Restrict the cohort to machine-managed vaults.","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Default 20, capped at 50.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}/exits":{"get":{"tags":["Risk"],"summary":"What actually left this vault, beside what the venue says could.","description":"A LEVEL and a FLOW, kept apart and never divided by one another: `declaredWithdrawableUsd` is what could be taken out at this instant, and every figure under `windows` is a sum over a period. We record withdrawals that SETTLED, so this does not see an attempt that reverted, a queue or notice period somebody waited through, or a gate that refused them before they submitted — which means an empty register is “nobody withdrew” OR “nobody could” and cannot be read as either. `largestEverUsd` is the most useful line: somebody actually got that much out, on a day we can name, which is evidence about the past and never a promise about today. AND WHERE THERE IS NO CAPACITY FIGURE AT ALL, `capacityRefusal` says WHY, which is the field to read before concluding we have a gap: `whose` is `the-contract` where the answer does not exist to be read and asking again returns the same thing, `ours` where the work is still ours, and `neither` where the exit IS read and simply does not run through this contract. On the vaults whose strategy walk ended in attested accounting it carries `postedValue`: a party POSTS what the vault is worth rather than deriving it, and `selectorReturnedThePosting` is true where what `maxWithdraw` answered IS that posted figure — byte for byte on the largest of them. It is never false, because a figure that does not match may be our own unit assumption rather than the contracts disagreeing.\n\nFree.","operationId":"getVaultsBySlugExits","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitRegister"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}},{"name":"exitAmountUsd","in":"query","required":false,"description":"A position to weigh the exit against, in US dollars. With it the answer carries `exitCapacity`: whether that much is inside what the vault declares withdrawable RIGHT NOW, and separately whether a single withdrawal at least that large has ever been recorded. Two readings, never averaged, and `unknown` where the evidence is not there. Without it `exitCapacity` still describes the capacity itself and the four amount-dependent fields are null.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}/redemption":{"get":{"tags":["Risk"],"summary":"What a withdrawal does to the strategy behind it, and whether it could be paid at all.","description":"The venue returns at most a hundred depositors, so holder counts are floors. For a lending vault the binding constraint is liquidity rather than margin: scenarios carry exceedsLiquidity and unmetUsd, and a null withdrawableUsd means unread rather than unlimited. Three flags about one withdrawal, and none is a verdict: `emptiesVault` leaves nothing behind; `breachesMaintenance` is computed only where the withdrawal is neither zero nor emptying, so its false can mean the test did not apply; `lockedByUtilisation` is NULL where idle or TVL is unread and false where it was measured and the vault is not locked.\n\nRequires `redemption.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getVaultsBySlugRedemption","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticalDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}},{"name":"exitAmountUsd","in":"query","required":false,"description":"OPTIONAL, and the answer is useful without it. With a position named, `exitCapacity` weighs that size against what the vault declares withdrawable at the last reading. `largestEverUsd` is NULL here rather than zero because this route does not read flow history; /v1/vaults/{slug}/exits answers that half and keeps the two apart.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/changes":{"get":{"tags":["Risk"],"summary":"What changed: which vault stopped being exitable, which died, which raised a new observation.","description":"The feed began when it began, nothing before that was missed, it was not yet running. A change on a vault holding under $50,000 is not announced. `wasLocked` describes the state BEFORE the change being reported, not after it.\n\nFree.","operationId":"getChanges","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangesData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"kind","in":"query","required":false,"description":"exit.locked | exit.freed | vault.died | vault.reopened | observation.raised","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"How far back. Default 30.","schema":{"type":"number"}},{"name":"minUsd","in":"query","required":false,"description":"Floor on the capital behind the change.","schema":{"type":"number"}},{"name":"limit","in":"query","required":false,"description":"Default 50.","schema":{"type":"number"}},{"name":"offset","in":"query","required":false,"description":"","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/liquidity":{"get":{"tags":["Risk"],"summary":"Which lending vaults cannot be withdrawn from today, and how long that has been true.","description":"Read for Euler, Morpho and Lista. A vault absent here is one whose liquidity we do not read, never one with none locked, and the history begins the day we started keeping it, because a market’s past free liquidity needs an archive node nobody offers free on BNB.\n\nFree.","operationId":"getLiquidity","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiquidityData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"locked","in":"query","required":false,"description":"Only the vaults nothing can be withdrawn from.","schema":{"type":"boolean"}},{"name":"minUsd","in":"query","required":false,"description":"Floor on capital.","schema":{"type":"number"}},{"name":"days","in":"query","required":false,"description":"How much history to return per vault. Default 30.","schema":{"type":"number"}},{"name":"limit","in":"query","required":false,"description":"Default 50.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/liquidity/unmoved":{"get":{"tags":["Risk"],"summary":"How long each book has sat fully lent, and whether anybody acted.","description":"ANSWERS EVERY CALLER, and the capability named here is what the naming part costs rather than what the route needs to reply. The totals are complete at any tier; the books, their curators and what each is lent against come with a plan or one call at a time over x402 — send a PAYMENT-SIGNATURE on this same URL. A public caller gets 200 with two rows and `withheld` counting the rest, never a 402, so a generated client should not expect one. Times the consequence, not the control: we do not hold LTV or caps, so this measures how long a depositor could not leave rather than when a parameter was changed. A duration marked \"atLeast\" began before our readings did, and the register starts the day we started keeping it.\n\nRequires `reactivity.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getLiquidityUnmoved","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiquidityUnmovedData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"minUsd","in":"query","required":false,"description":"Floor on the capital stuck.","schema":{"type":"number"}},{"name":"collateral","in":"query","required":false,"description":"Restrict to one collateral.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Default 50.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/exposure/netting":{"get":{"tags":["Risk"],"summary":"Where longs and shorts cancel, and where they only appear to.","description":"`crossesMargin` is true where any instrument in the book shares a margin account with another, so the offsets are not independent. False means none of the instruments we read do, which is not a statement about instruments we do not read.\n\nRequires `positions.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getExposureNetting","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExposureNettingData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/operators/{slug}/exposure":{"get":{"tags":["Risk"],"summary":"One operator’s book across every vault it runs.","description":"`offsetCrossesMargin` is true where an offsetting position sits in a different margin account, so the two do not net in a liquidation even though they net on paper.\n\nRequires `positions.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getOperatorsBySlugExposure","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperatorsExposureData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}/waterfall":{"get":{"tags":["Record"],"summary":"Gross to net, and whether it was earned by being right or by being paid to wait.","description":"Measured over the window funding can be measured over, not the vault’s lifetime.\n\nRequires `waterfall.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getVaultsBySlugWaterfall","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticalDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}/execution":{"get":{"tags":["Record"],"summary":"Taker share, fee rate and how it gets filled.","description":"Answers the analytical envelope like its siblings: `status = available` carries data, and a vault with too few fills carries `data: null`, a reasonCode, and how many fills it has against how many the measure needs. It used to answer a bare error object with a 200, which made it the one route a client had to special-case.\n\nRequires `fills.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getVaultsBySlugExecution","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticalDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}/trades":{"get":{"tags":["Record"],"summary":"Hit rate, payoff and holding period, rebuilt from the venue’s own open and close labels.","description":"A high win rate beside a payoff below one is the signature of selling optionality.\n\nRequires `trades.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getVaultsBySlugTrades","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticalDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/forced-exits":{"get":{"tags":["Record"],"summary":"What the venue did against a book’s will, and when several went at once.","description":"Observed, not modelled, the only thing here that can contradict the stress ladder. `truncated` means the field walk hit its ceiling, so the field list is partial rather than complete.\n\nRequires `forced.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getForcedExits","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForcedExitsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/crowding":{"get":{"tags":["Market"],"summary":"Who is in the same trade, and what share of the venue that is.","description":"`coverageSuspect` IS FALSE FOR TWO DIFFERENT REASONS and `coverageRatio` tells them apart: a ratio we measured and found ordinary, or no ratio at all because the venue publishes no open interest to compare against. Reading false as “coverage is sound” hands our ignorance to a reader as a clean bill of health, in the one case that most deserves the caveat. Where `coverageRatio` is null the share figures beside it describe what WE can see and not what the market holds. A ratio above 2 is the suspect case: gross counts both sides of a book and a venue’s open interest counts one, so approaching 2 is ordinary and past it something is being counted twice.\n\nRequires `crowding.summary` — PUBLIC or PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getCrowding","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrowdingDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"instrument","in":"query","required":false,"description":"Restrict to one instrument.","schema":{"type":"string"}},{"name":"members","in":"query","required":false,"description":"Include cluster membership. Needs a plan.","schema":{"type":"boolean"}},{"name":"asOf","in":"query","required":false,"description":"Read the book as it stood. Pins to the newest snapshot at or before this instant, and the reply says which one it landed on.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/crowding/history":{"get":{"tags":["Market"],"summary":"Whether a crowd is building or dispersing.","description":"Requires `crowding.timeseries` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getCrowdingHistory","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrowdingHistoryData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"A valid request whose named resource cannot be produced. `no_history`: The instrument is known and we hold no snapshots spanning the window asked for, so there is no series. A shorter window, or a later read once more days are collected, would change the answer. Not retryable by repeating the same request; the body says what would change the answer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"instrument","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/funding":{"get":{"tags":["Market"],"summary":"What holding a perpetual costs or pays, and who is on each side.","description":"Annualised simple. A vault collecting today can be paying tomorrow. `longsPay` has THREE states: true, false, and NULL where the question has no answer, either because we hold no rate or because the rate is exactly zero and neither side pays. It was two-state until 2026-09-27, when a quarter of recent instrument rows turned out to be exactly zero and were being published as shorts paying. `instrumentsWithoutRate` counts what every total leaves out.\n\nRequires `funding.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getFunding","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"description":"Default 25.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/markets":{"get":{"tags":["Market"],"summary":"Whether an instrument is still a market, and how much notional is marked in ones that are not.","description":"Requires `markets.read` — PUBLIC or PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getMarkets","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/lead-follow":{"get":{"tags":["Market"],"summary":"Pairs whose trades follow one another sooner than chance accounts for.","description":"It does not say copying. A shared vendor, one operator, or the same obvious level all look identical from a timestamp. `sdFloored` says the standard deviation used was the floor rather than the sample’s own, which happens on thin samples and makes the z understate. `exceedsAllShifts` is true when no shifted recount reached the observed value, the strongest this permutation test can say, and it is still bounded by `pPermutationFloor`. `truncated` means the field walk hit its ceiling, so the field list is partial.\n\nRequires `leadfollow.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getLeadFollow","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadFollowData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"days","in":"query","required":false,"description":"Default 7.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/agents/rails":{"get":{"tags":["Agents"],"summary":"How many registered agent identities ever appear on a rail that moves money.","description":"A floor: the registry side is the identity token’s holder and the rail side is whoever paid, so an operator using two keys reads as absent. Three rails are read — ACP, the Olas mech marketplace, x402.\n\nFree.","operationId":"getAgentsRails","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentsRailsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/agents/{address}":{"get":{"tags":["Record"],"summary":"One address: what it claims to be, what the chain records it doing, and how the two were joined.","description":"Claims and behaviour are listed separately and never blended — a registration is somebody saying what they are, a payment is the chain recording what they did. 326,023 addresses hold an ERC-8004 identity and about five hundred have ever appeared on a rail that moves money, so `economicallyActive` is false for almost all of them. An operator that registers with one key and transacts with another appears as a registration with no behaviour, and this cannot tell that from an identity that has never done anything. `declaresX402` is true where at least one of its registrations says so; false means none of the cards we read mention x402, which is a fact about the cards and not about whether it sells anything.\n\nFree.","operationId":"getAgentsByAddress","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"address","in":"path","required":true,"description":"The address to profile.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/agents/{address}/check":{"get":{"tags":["Record"],"summary":"The counterparty check: what the chain says about an address before you pay or hire it.","description":"Dimensions with their evidence class, never a score. Independent means a counterparty this address has never paid back; only the two-way loop is tested — and `independence` now measures what that caveat has always only admitted, by finding payers that share an obscure third party with another payer of the same address. x402 counts a payment only where the recipient lists a paid resource in the x402 catalogue, so a plain token transfer is not a sale. An address never paid on a rail we read answers 200 with that observation.\n\nFree.","operationId":"getAgentsByAddressCheck","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterpartyCheck"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"address","in":"path","required":true,"description":"An EVM address (0x…), a Cardano payment address (addr1…) or a Solana address. Another chain’s address answers 422 chain_not_read, naming what it is.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/agents/{address}/profile":{"get":{"tags":["Record"],"summary":"Agent economic profile: four readings of one economic subject on one page — revenue quality, delivery reliability, economic dependencies and operating health.","description":"A composition of the figures the single-address check already carries, from the same nightly row and the same functions, so it cannot disagree with the endpoints it summarises. THERE IS NO SCORE ON TOP and there will not be one: a composite would be the figure every reader quotes and none can check, and it would average a measured quantity with an unmeasured one until neither is visible. Each block keeps its own counts and its own denominator, a block we have not computed is null rather than a row of zeros, and `cannotSee` names what no block here can reach — revenue off our rails, dependencies that are not payments, and whether delivered work was any good.\n\nRequires `business.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getAgentsByAddressProfile","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProfile"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"address","in":"path","required":true,"description":"An EVM address (0x…), a Cardano payment address (addr1…) or a Solana address. Another chain’s address answers 422 chain_not_read, naming what it is.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/service":{"get":{"tags":["Record"],"summary":"Is a declared service endpoint answering, what does it offer, and who declares it.","description":"Three facts kept apart: what an identity DECLARES, what a probe OBSERVED, and the readings behind it. A failed probe is an availability fact and never evidence of bad faith — one bad day and a dead service are identical in a single reading, which is why the history comes with it. Drift between declared and observed is computed only where both are known, because a probe that read no capabilities is silence rather than an empty offering. We probe what registered identities declare; anything else is outside our reading rather than absent.\n\nFree.","operationId":"getService","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"url","in":"query","required":true,"description":"The absolute http(s) URL of the endpoint.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/identify":{"get":{"tags":["Record"],"summary":"Which party is this, from whatever you hold: a transaction hash, a URL, a hostname or an ERC-8004 registration number.","description":"One party or none, NEVER a pick between several — where more than one matches they are all listed and `address` is null, because naming one would be an identification the evidence does not support. A transaction’s payee is the Transfer event’s recipient, never the transaction’s `to`, which is the token contract. A link through a hostname or a declared endpoint is the subject’s own claim and never our verification of control. An identifier we cannot resolve is not evidence against it.\n\nFree.","operationId":"getIdentify","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentifyData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"q","in":"query","required":true,"description":"An address, a transaction hash, an http(s) URL, a hostname, or an ERC-8004 registration number, optionally as `chain:id`.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/evidence":{"get":{"tags":["Record"],"summary":"Every edge we hold about one subject, each carrying where it came from.","description":"The same party lives in half a dozen tables here, each with its own route and shape. This is the one answer to “what do you know, and how do you know it”. Every edge carries `source`, `observedAt` (when the world was in that state), `asOf` (when WE read it — never the same field, because a fresh read of a stale fact is not a fresh fact), a `confidence` that names what it is a confidence IN, its own `coverage` sentence, and the `method` that established it. Edges are NEVER summed: `declared` is the subject speaking, `observed` is our reading, `derived` is arithmetic over the others, and folding them together rebuilds the reputation score this exists to replace. It infers no identity — a shared host or funder is emitted as exactly that, because being the same party is a conclusion no join supports. What we looked for and did not find is listed, so a thin subject cannot read as a complete picture.\n\nFree.","operationId":"getEvidence","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceGraph"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"subject","in":"query","required":true,"description":"An address, or the http(s) URL of an endpoint.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/claim/challenge":{"get":{"tags":["Record"],"summary":"A sentence to sign, proving you control an address.","description":"A signature proves you hold the private key for that address, as of now. It does NOT prove who you are, does NOT prove you own whatever business is behind it, and authorises no payment or transaction. The challenge is derived from the address, a ten-minute window and a server secret rather than stored, so there is no nonce to create, expire or leak; a signature is therefore valid for at most twice that window, which is stated rather than hidden. EVM only: a Cardano or Solana key signs differently and is not supported here yet.\n\nFree.","operationId":"getClaimChallenge","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimChallenge"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"address","in":"query","required":true,"description":"The 0x address you are proving control of.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/claim/verify":{"post":{"tags":["Record"],"summary":"Check a signature against the challenge for that address.","description":"A failed proof answers 200 with `ok: false`, not an error status: nothing went wrong with the request, we asked a question and the answer was no, and an error would make a correct refusal look like a malfunction. A valid signature from a DIFFERENT key is reported as such rather than as invalid, because which of the two it is matters. Nothing is stored yet: proving control does not currently change what any page shows.\n\nFree.","operationId":"postClaimVerify","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimResult"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimProof"}}}},"x-lifecycle":"active"}},"/v1/evaluate":{"get":{"tags":["Record"],"summary":"One answer about a proposed action: a decision, a limit, and the rule that decided.","description":"The decision depends on the AMOUNT, the ACTION, the policy you name and how much we actually read, which is why the same subject can be `allow` at one size and `abstain` at another. `allow` means nothing we could check objects, up to `maxAmountUsd`, and is never a statement that the action is safe: nothing here sees what it is for or what was agreed. `review` means something we READ does not match. `abstain` means we did not read enough to have an opinion, which is OUR gap and must never be read as approval. `unsupported` means the policy has no rule for this action. A rule whose evidence we do not hold appears in `missingEvidence`, lowers `coverage`, and is never counted as an objection. An unknown `policy` is refused rather than silently replaced with the default.\n\nFree.","operationId":"getEvaluate","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionEvaluation"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"action","in":"query","required":true,"description":"pay, connect_mcp, call_tool or allocate_capital.","schema":{"type":"string"}},{"name":"subject","in":"query","required":true,"description":"The address, endpoint URL or vault slug the action is about.","schema":{"type":"string"}},{"name":"amountUsd","in":"query","required":false,"description":"What you are about to commit. Left out, the amount rules report that they did not run.","schema":{"type":"number"}},{"name":"chain","in":"query","required":false,"description":"The chain it settles on.","schema":{"type":"string"}},{"name":"resource","in":"query","required":false,"description":"The endpoint being bought, where it differs from the subject.","schema":{"type":"string"}},{"name":"policy","in":"query","required":false,"description":"A version or slug from /v1/policies. Defaults to conservative-v1.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/policies":{"get":{"tags":["Record"],"summary":"Every policy a decision can be made under, with every rule.","description":"Published in full, including to the parties being evaluated: a rule nobody can read is a rule nobody can correct, and the population we evaluate is the one best placed to tell us when a rule is wrong. A decision carries the policy version it was made under, so an answer given today can be reproduced after the rules change.\n\nFree.","operationId":"getPolicies","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyList"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/agents/dependencies":{"post":{"tags":["Record"],"summary":"What several agents rest on AT ONCE, with a shared counterparty kept strictly apart from a dependency.","description":"Finding that three agents paid the same address is one join and tells you almost nothing: on our rails one address is paid by 71 agents across 4,100 payments and another by three agents once each. Four tests must all hold before the word dependency is used — repeated (more than one payment), one-way (it never pays them back, because money moving both directions is trade between peers), sustained (spanning more than a day, so a burst is not read as an arrangement) and shared (more than one of the agents asked about). All four are published on every party so you can draw the line somewhere else. Anything short is a `shared-counterparty` with the failed test named, listed as a LEAD. The concentration line counts dependencies only. A party just ONE agent pays is left out entirely; that is free on /v1/agents/{address}/check. Most shared infrastructure — a cloud region, a model provider on a card, one operator’s keys — leaves no payment at all, so what this finds is a FLOOR on the concentration that exists.\n\nRequires `business.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"postAgentsDependencies","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dependencies"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependenciesRequest"}}}},"x-lifecycle":"active"}},"/v1/x402/endpoints":{"get":{"tags":["Record"],"summary":"Which endpoints an address sells, or which ones match some text. The seller’s own catalogue entry, never our reading of it.","description":"A listing is not evidence that the endpoint answers, nor that the price is still what it says: /v1/test-purchase knocks on it. `priceUsd` is the price the seller published and `priceRaw` is the figure in the asset’s own base units, which are different claims and are both carried. Nothing matching means nothing in the catalogue WE read matches, which is our reach rather than evidence that the seller publishes nothing.\n\nFree.","operationId":"getX402Endpoints","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402EndpointsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"payee","in":"query","required":false,"description":"An address, to list what it sells.","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Part of a URL, matched case-insensitively.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Default 20, capped at 100.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/x402/disagreements":{"get":{"tags":["Record"],"summary":"Which catalogued endpoints ask to be paid at an address their own listing does not name. The counts are free; the list needs a plan.","description":"A disagreement is between two statements by the SAME party — their catalogue listing and their live endpoint — so it is theirs to explain and never ours to resolve. It is not evidence of fraud: a seller may have moved their payee and not relisted. Measured only over the endpoints WE have knocked on, which is our reach rather than the catalogue, and `comparable` is the denominator because an endpoint naming no payee cannot disagree. `items` is NULL without a plan rather than empty, since an empty list would say we found none; any SINGLE endpoint is free wherever it is asked about.\n\nFree.","operationId":"getX402Disagreements","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402Disagreements"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return once a plan is held. Default 50, capped at 200.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/test-purchase":{"get":{"tags":["Record"],"summary":"Walk the whole purchase of an x402 endpoint without paying: what it charges now, whether its own listing agrees, what the record says about its payee, and whether the price held between the decision and the signature.","description":"Each step can STOP the purchase and the first one that does is the answer, which is what separates this from a report. An unanswered question is never rounded up to a passed one: the verdict is `cannot-tell`, not `would-proceed`. We knock only on endpoints already in the x402 catalogue we read, because fetching a URL because a request named it would make us a prober-for-hire pointed at somebody else’s host, and at most one live handshake a minute per resource, shared by everybody. Nothing here is a promise about what arrives: only paying and reading the answer establishes that, which is the half that needs your own wallet.\n\nFree.","operationId":"getTestPurchase","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPurchaseData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"resource","in":"query","required":true,"description":"The http(s) endpoint to rehearse buying. It must be one the x402 catalogue already holds.","schema":{"type":"string"}},{"name":"policy","in":"query","required":false,"description":"A policy version or slug to decide under. Defaults to conservative-v1.","schema":{"type":"string"}},{"name":"fill.*","in":"query","required":false,"description":"A value for a slot the seller’s own URL declares, e.g. `fill.doi=10.1000/xyz` for a resource listed as `…?doi={doi}`. Only declared slots are accepted; a name the template does not contain is refused rather than ignored. Values are percent-encoded and the result is verified to reach the same origin and path shape as the catalogue entry, so a value can never choose the host. A filled rehearsal is always a live knock and is NOT recorded into the endpoint history, because two different questions in one run series would look like a price that moved.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/evidence/regressions":{"get":{"tags":["Reference"],"summary":"Readings we had at the previous check and do not have now, per fact, with the vaults named.","description":"FREE, for the reason /v1/coverage/capital is: this is a statement about OUR reliability, and one nobody can audit is marketing. A REGRESSION IS NOT A FAULT — a vault that stopped publishing a figure has broken nothing of ours, and a reading withdrawn because it was wrong is a good day — but it may never be silent, which is what this route exists to prevent. `checked: false` means the comparison has not run or could not be read and is NOT a clean result: `lost: []` beside it says nothing. Vaults that CLOSED are not counted, because a closed vault takes its readings with it. It compares the last two checks and not the whole history, so it says what changed rather than how long something has been missing.\n\nFree.","operationId":"getEvidenceRegressions","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceRegressions"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/knock":{"post":{"tags":["Record"],"summary":"Knock on an x402 endpoint and get what it served. Without a payment this reads its terms; with an authorisation you signed yourself, it carries that to the seller and hands you the answer.","description":"WE NEVER HOLD YOUR KEY. You sign; we carry the envelope, because a seller’s host sends no CORS headers to a browser and that failure is indistinguishable from the endpoint being down. A 200 means the seller ACCEPTED the authorisation, NOT that money has settled: settlement needs somebody to submit it on chain, and `settlement` beside the answer is the seller saying so rather than us. A 402 on a knock that CARRIED a payment is the seller refusing what you signed, reported as `rejected` because it is a different fact from the first 402. IT DOES NOT ESTABLISH THAT NOTHING WAS SPENT: the seller held your authorisation before they answered, and their status code does not report what they did with it. `settlementState` and `authorizationState` carry that separately, and both read `unknown` / `presented-may-still-be-usable` here. Check the transaction and the authorisation before signing again. `accepts` carries every set of terms the seller offered and `offer` the one a browser wallet can meet, which is often not the first: where none can be, `fault` names why in a sentence. We knock only on endpoints already in the x402 catalogue we read, because fetching a URL because a request named it would make us a prober-for-hire pointed at somebody else’s host; at most one UNPAID handshake a minute per endpoint, shared by everybody, while a paid one is never made to wait on a signature that would expire; and never on our own host, because what we sell has one set of terms and one door. An answer bigger than 512 KB is handed back as text rather than parsed, since half a list drawn as a whole one is a figure we could not stand behind. The seller’s answer is yours and is not stored; what we keep is that the knock happened and how it went. `describe: true` adds `blocks`, the same reading our own pages draw, always as a stranger’s payload: no unit added, no tone inferred, nothing drawn that would claim their numbers are parts of one whole.\n\nFree.","operationId":"postKnock","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Knock"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnockRequest"}}}},"x-lifecycle":"active"}},"/v1/agents/{address}/business":{"get":{"tags":["Record"],"summary":"Does this agent have a business: six questions about its customers, its revenue, its deliveries, its costs and its identity.","description":"Nearly every figure behind this has been computed nightly for weeks and published nowhere a reader would find it; what this adds is the assembly and four refusals the data invites and does not support. An ADDRESS is not a customer: one customer can hold twenty and twenty can share a funder, so the independence figure is a floor. A PAYMENT is not a delivery: the busiest agents settle on rails that carry money without carrying a job, and \"no delivery record\" there is a statement about our reach, not about the agent. A SHARED FUNDER is not an identity, so a link is published as demonstrated or as merely co-occurring and the second is never promoted. A COST we cannot see is not a cost that is not there. There is deliberately NO SCORE over the six, because a number would average \"thousands paid this\" against \"we hold no delivery record\", and the second is about us.\n\nRequires `business.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getAgentsByAddressBusiness","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentBusiness"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"address","in":"path","required":true,"description":"The agent’s address.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/exits/screen":{"get":{"tags":["Record"],"summary":"Which vaults have ever actually paid an amount like yours, in one withdrawal or across a day.","description":"THREE ANSWERS AND THE MIDDLE ONE IS THE FINDING: `paid-in-one` is a single settled withdrawal at least this large; `paid-across-a-day` is that much leaving in one day and never in one go, which is a different fact rather than a weaker version of the first; `never-asked-this-size` is not a refusal and not a failure, because most vaults have never been asked. A vault with no withdrawal history at all is counted in NEITHER and reported separately, since unread is not untested. Declared liquidity is a level at an instant and what has left is a flow over time; the two are never divided by one another here and no ratio between them is returned. Nothing in it is a forecast.\n\nRequires `action.check` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getExitsScreen","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitScreen"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"amountUsd","in":"query","required":true,"description":"The size you are weighing, in US dollars. Required: \"can I get out\" has no answer without one.","schema":{"type":"number"}},{"name":"limit","in":"query","required":false,"description":"How many vaults to list, 1 to 100. The counts cover the whole population either way.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}/exit-confidence":{"get":{"tags":["Record"],"summary":"What evidence says about getting a PARTICULAR amount out of this vault, as six readings rather than a score.","description":"The register beside this says what has LEFT; this asks the question a holder has, which is about them and about a size. Six components, each with its own verdict, and the answer is the WORST of them rather than an average: a queue in front of you is not offset by a long history, it happens before your turn. An `unknown` outranks a `supports`, because a gap we could not read must not be counted as a pass; `not-asked` marks a component whose input you did not send and `not-applicable` one this venue does not have at all; neither is a gap in our record and neither lowers the summary. A withdrawable figure is a FLOOR on venues whose vaults lend into markets holding their own free liquidity, and the component says so. NOTHING HERE IS A GUARANTEE of withdrawal and the word does not appear: a vault that has paid everybody for a year can stop tomorrow.\n\nRequires `action.check` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getVaultsBySlugExitConfidence","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExitConfidence"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}},{"name":"amountUsd","in":"query","required":false,"description":"What you are thinking of taking out, in dollars. Left out, the sizing component reports `not-asked` rather than passing.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/check-action":{"post":{"tags":["Record"],"summary":"One check before an agent signs: the counterparty, the calldata, the seller’s listing, the endpoint and the policy, and — the point — what they say about EACH OTHER.","description":"Its five parts are each free on their own routes. What this adds is the comparison between them, which is where the losses live: the bytes paying an address you never checked, a policy allowing a payment for a path that is not served, a listing naming a payee the calldata does not. Every cross-check names BOTH readings that disagree and none of them is an accusation — the record can be wrong. A cross-check can only make the verdict worse, never better, because a comparison is not evidence that something the policy objected to is fine. SEND `calldata`, `chain` AND `from` AND IT IS ALSO SIMULATED: one `eth_call` at the latest block, where the node executes the transaction and throws the result away, so nothing is signed, broadcast or spent. A revert is the strongest finding here, because every other reading argues about whether you SHOULD send it and this one is that it will not work. It is NOT a state diff: a transaction that succeeds can still do something other than what you wanted. It runs against the current block, so one that succeeds here can revert when it lands two blocks later, and a node that refuses is reported as our gap rather than as a failure. Parts that did not run are listed under `ran` with why, because a check that did not happen must never look like one that passed.\n\nRequires `action.check` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"postCheckAction","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckAction"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckActionRequest"}}}},"x-lifecycle":"active"}},"/v1/preflight":{"get":{"tags":["Record"],"summary":"Is there anything against THIS payment: the amount, the chain and the endpoint, against what the address has actually done.","description":"Three verdicts and the third is never a weak yes: nothing-against-it, look-first, and cannot-say, which is what a chain we do not read or a proposal with nothing to check returns. It never says a payment is safe — it cannot see what the payment is for or what the two parties agreed. A listed price is the seller’s own published figure and can be stale; an amount above anything an address has received is unusual rather than wrong, and absence on a chain is not evidence against it.\n\nFree.","operationId":"getPreflight","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreflightData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"to","in":"query","required":true,"description":"The address about to be paid.","schema":{"type":"string"}},{"name":"amountUsd","in":"query","required":false,"description":"What is about to be sent, in dollars. Left out, the amount checks say they were not run rather than passing.","schema":{"type":"number"}},{"name":"chain","in":"query","required":false,"description":"The chain it is about to be sent on, e.g. base.","schema":{"type":"string"}},{"name":"resource","in":"query","required":false,"description":"The http(s) URL of the endpoint being bought, where there is one. This is the sharpest check available: its catalogue entry carries the seller’s own price and payee, and where we have probed the endpoint, what IT demanded in its own 402 is compared against both — with every disagreement kept rather than resolved. `againstEndpoint.price.againstQuote` answers in one word whether the amount is an exact-match, below-quote, above-quote or unknown against that live demand, and BELOW IS NOT A PASS: less than what the endpoint is asking does not buy the call unless its terms allow a partial payment, which we cannot see.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/agents/{address}/history":{"get":{"tags":["Record"],"summary":"What one agent’s record looked like on each of the last N days.","description":"PAID: one cent a call over x402, the median price of this rail, where payment is enabled on the deployment. The check itself stays free. This is a record we keep rather than one the chain gives away, and it begins on the day we started keeping it (2026-09-22), which the answer states rather than implying with an empty series.\n\nFree.","operationId":"getAgentsByAddressHistory","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterpartyHistory"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This call is priced per request over x402 and no accepted payment arrived. The body is the x402 v2 offer — the amount, the asset, the network in CAIP-2 and the address to pay — and the same object is repeated base64-encoded in the PAYMENT-REQUIRED header. Sign an \"exact\" authorisation for the amount in `accepts` and send it back in PAYMENT-SIGNATURE. Where the deployment cannot settle, the call is answered free instead and says so rather than quoting a price it could not collect.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"address","in":"path","required":true,"description":"An EVM or Cardano address.","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"How far back, 1 to 365. Default 90.","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/counterparty/bulk":{"post":{"tags":["Record"],"summary":"Check up to fifty addresses in one call, each with its observations, and what the SET shares underneath.","description":"PAID TWO WAYS, and they buy different things. One cent a call over x402 where payment is enabled, priced per call rather than per address, buys the per-address rows. The `shared` block — the parties that two or more of these addresses pay — needs `dependency.shared`, on Analyst and above: it is the one answer no per-address row can contain and no public figure holds, because the input is your own shortlist. Without it the block says so and names the capability rather than being absent. An address on a chain we do not read carries `readable: false` rather than a row of zeros.\n\nFree.","operationId":"postCounterpartyBulk","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterpartyBulk"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This call is priced per request over x402 and no accepted payment arrived. The body is the x402 v2 offer — the amount, the asset, the network in CAIP-2 and the address to pay — and the same object is repeated base64-encoded in the PAYMENT-REQUIRED header. Sign an \"exact\" authorisation for the amount in `accepts` and send it back in PAYMENT-SIGNATURE. Where the deployment cannot settle, the call is answered free instead and says so rather than quoting a price it could not collect.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/coverage/capital":{"get":{"tags":["Risk"],"summary":"How much of the market each vault reading actually covers, by vault count AND by capital.","description":"FREE on purpose: this is a statement about OUR limits, and a coverage claim nobody can audit is marketing. NEITHER figure is \"the coverage\": `byCount` is the share of open vaults with the reading, `byCapital` the share of the capital in them, and they differ by a lot because more than half the vault COUNT is one venue’s small automated vaults. `byCapital` is null where no capital was read at all. Says what we CAN read and never whether a vault is any good; which vaults are missing a reading is the paid screen.\n\nFree.","operationId":"getCoverageCapital","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapitalCoverage"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/vaults/risk-dimensions":{"get":{"tags":["Risk"],"summary":"Six risks across every vault we score, and where the one word reads better than the vault does.","description":"NOTHING HERE IS A NEW MEASUREMENT: the levels are grouped from components the risk scorer already published, and the controller level is read from the controller columns and is NOT part of `band`. The population finding and every denominator are FREE; the LIST of which vaults it applies to needs `dimensions.read`, and `locked` says so rather than returning an empty list that looks like no matches. A vault never scored is counted in `denominators.neverScored` and is absent from the population, because unscored is our coverage and not a reading. On this route the evidence dimension counts components only and `coverage.cannotSeeCount` is 0 for every vault, meaning not computed here — the per-vault /v1/vaults/{slug}/check computes it properly and is free.\n\nFree.","operationId":"getVaultsRiskDimensions","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultsRiskDimensions"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/vaults/earned":{"get":{"tags":["Risk"],"summary":"What depositors actually kept, against what their vault advertised.","description":"NOT THE VAULT’S RETURN, which is what a unit held throughout would have earned. This is what the people in it kept, read from the depositor register and set against the venue’s own quote scaled to how long they have held. THE CAVEAT IS PART OF THE FIGURE: a depositor who withdrew everything is not in the register, and the ones who left after losing money are exactly the ones a return figure most needs, so this reads BETTER than the truth rather than worse. `gapPoints` is in percentage POINTS, not per cent: a depositor cannot lose more than they put in. Only vaults whose advertised rate is inside the band this platform will stand behind are listed, so a venue quoting two thousand per cent cannot lead the list with its own arithmetic. The aggregate and the six widest gaps are free; the rest of the list needs `earned.detail`, and `withheld` says how many are not here.\n\nFree.","operationId":"getVaultsEarned","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VaultsEarned"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/agents/changes":{"get":{"tags":["Agents"],"summary":"What moved in the agent record, across every agent, since a timestamp.","description":"ONE ROW PER FIELD THAT MOVED, not per address: an agent whose dealings and concentration both moved is two facts, and folding them would make you diff our answer to find out what we meant. /v1/changes is the VAULT feed and has always carried only a handful of agent events; what moves daily is the record itself, on roughly one agent in five. A day with no row for an address is a day it did not move, never a day we did not look. The feed begins at `from`, the first day held, and asking for anything earlier answers from there rather than pretending nothing happened.\n\nRequires `agents.changes` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getAgentsChanges","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChanges"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"since","in":"query","required":false,"description":"An ISO date or timestamp. The last seven days if omitted.","schema":{"type":"string"}},{"name":"address","in":"query","required":false,"description":"One address, where you want its movement rather than everybody’s.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Default 1,000, capped at 5,000. `capped` says the page was full.","schema":{"type":"number"}},{"name":"offset","in":"query","required":false,"description":"","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/counterparty/agents":{"get":{"tags":["Agents"],"summary":"Find agents by their record: rail, independent payers, dealings, ACP completion, whether their service answers, whether they pay their payers back.","description":"Every filter is a floor or an exclusion on a measured dimension, and the order is by one named dimension; there is no composite \"best\". Only addresses that have been paid are listed. A Cardano seller is listed by the enterprise address of its payment credential.\n\nFree.","operationId":"getCounterpartyAgents","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterpartyAgentList"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"rail","in":"query","required":false,"description":"x402, acp, mech or masumi: what kind of dealing.","schema":{"type":"string"}},{"name":"network","in":"query","required":false,"description":"base, polygon, ethereum, arbitrum, optimism, gnosis or cardano: where it settled. Composes with `rail`, and means the address HAS dealt there, not that it only deals there.","schema":{"type":"string"}},{"name":"service","in":"query","required":false,"description":"What it was paid FOR, matched exactly against the service names the ACP protocol recorded and the descriptions sellers published. Their words, not our classification, so the spelling is theirs: /v1/counterparty lists the commonest.","schema":{"type":"string"}},{"name":"minIndependent","in":"query","required":false,"description":"At least this many counterparties it never paid back.","schema":{"type":"number"}},{"name":"minDealings","in":"query","required":false,"description":"At least this many dealings.","schema":{"type":"number"}},{"name":"minCompletion","in":"query","required":false,"description":"Completed ACP jobs over those that ENDED, as a decimal fraction 0 to 1. A conditional rate: one agent reads 0.9776 while 38.8% of its 9,894 jobs carry no phase we could decode, so it describes a third of that agent’s work. Pair it with minOutcomeCoverage.","schema":{"type":"number"}},{"name":"minOutcomeCoverage","in":"query","required":false,"description":"The share of ALL this agent’s ACP jobs that reached an outcome at all, 0 to 1 — what minCompletion covers. Excludes every agent with no ACP jobs.","schema":{"type":"number"}},{"name":"minUsd","in":"query","required":false,"description":"At least this much priced value, USD.","schema":{"type":"number"}},{"name":"registered","in":"query","required":false,"description":"Holds a registration in a registry we read.","schema":{"type":"boolean"}},{"name":"serving","in":"query","required":false,"description":"A declared callable service answered our probe.","schema":{"type":"boolean"}},{"name":"noTwoWay","in":"query","required":false,"description":"Pays none of its payers back.","schema":{"type":"boolean"}},{"name":"notConcentrated","in":"query","required":false,"description":"No single counterparty above half of ten or more dealings.","schema":{"type":"boolean"}},{"name":"spreadSuppliers","in":"query","required":false,"description":"It pays somebody, and no single party takes more than half of what it SPENDS. The other direction from notConcentrated: an agent with forty payers and one supplier passes that one and is one supplier away from stopping. A seller with too few suppliers to have a share passes, because too few to measure is not evidence of concentration; a seller with NO suppliers does not, because nothing to measure is a different thing — that was 2,723 of the 3,121 rows this used to return. `supplierSpread=diversified` is the filter for the measured ones alone.","schema":{"type":"boolean"}},{"name":"supplierSpread","in":"query","required":false,"description":"diversified, concentrated, insufficient-data or none. The precise form of `spreadSuppliers`, which admits a seller with too few suppliers to have a share — deliberately, since too few to measure is not evidence of concentration, but indistinguishable in a list from one that was measured and found spread. `diversified` is the measured one. `none` means it pays nobody on a rail we read, which `insufficient-data` does not: the share is null for both and the supplier COUNT is what tells them apart.","schema":{"type":"string"}},{"name":"activeDays","in":"query","required":false,"description":"Paid within this many days.","schema":{"type":"number"}},{"name":"q","in":"query","required":false,"description":"Name fragment, from its registrations.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"independent (default), dealings, usd, completion, recent, paidBack, largestShare, counterparties, serving, suppliers, largestSupplierShare or spent. The last three order by what an agent rests on rather than by who rests on it.","schema":{"type":"string"}},{"name":"dir","in":"query","required":false,"description":"desc (default, largest first) or asc. A missing value sorts last either way.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Default 50, capped at 200.","schema":{"type":"number"}},{"name":"offset","in":"query","required":false,"description":"","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/counterparty":{"get":{"tags":["Agents"],"summary":"Who gets paid on the agent rails, by how many parties that stand apart from them, and how many registered identities were ever paid at all.","description":"Rebuilt nightly from the rail tables. A dealing is an x402 sale or an ACP job; the two are counted in one unit because both name the other party, and mech deliveries, which name no payer, are kept beside. Longer payment loops are not read yet.\n\nFree.","operationId":"getCounterparty","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterpartySummary"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/agents/claims":{"get":{"tags":["Agents"],"summary":"What agent cards claim about the other registries they are in, and whether the claim holds.","description":"Three states and they never merge: found, absent on a registry we read over its whole life, and unread — which is our coverage gap rather than their claim. A self-claim, naming the registry the card is already in, is counted separately and is not a link. `selfClaim` is a card naming the registry it is already in: true means the claim points at itself and establishes no link.\n\nFree.","operationId":"getAgentsClaims","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentsClaimsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/agents/work":{"get":{"tags":["Agents"],"summary":"Every rail this platform reads, counted from each rail’s own table.","description":"The units differ per rail and are named rather than added together: a channel is not a payment, a job is not a payment, and a registration is not either. A rail with no span carries no event time we can trust — the Solana registries are read by scanning the program, so the only date on a row is when we read it.\n\nFree.","operationId":"getAgentsWork","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentsWorkData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/agents/delivery":{"get":{"tags":["Agents"],"summary":"Who delivered and who did not, provider by provider, on the ACP job book.","description":"Rates are over jobs that REACHED an outcome. A job still in negotiation has not failed, and one we never saw a phase for is a gap in our reading rather than an event in the market; both are reported beside the rate rather than folded into it.\n\nRequires `delivery.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getAgentsDelivery","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentsDeliveryData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/capital/portfolio":{"get":{"tags":["Risk"],"summary":"Read the vaults you hold TOGETHER: what they share, and an exit that is not the sum of their exits.","description":"It cannot verify that you hold any of this, and nothing here is advice: no allocation percentage and no expected return, ever. The exit is reported in four figures that are never added up — declared, behind a queue, floor-only and unread — because a portfolio that is 40% readable is not a portfolio that is 40% liquid. Where you state no amount for a holding, every dollar figure counts only the holdings you priced and says so rather than summing part of a portfolio and calling it the portfolio. The exit split, the coverage and the bands are FREE, as is every per-vault reading behind them; a plan buys what the holdings SHARE.\n\nRequires `liquidity.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getCapitalPortfolio","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapitalPortfolioData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"holdings","in":"query","required":true,"description":"slug:usd,slug:usd — the amount after each slug is optional. At most 50.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/capital/deployment":{"get":{"tags":["Risk"],"summary":"How much of the capital we track we can watch being used, by kind of vault.","description":"Knowing how much a vault holds and knowing what it does with it are different readings. Every dollar counted sits in a contract anybody can check; what is missing is our reading. And where positions ARE read, a hedge on a centralised venue is invisible to us, so a one-sided book may be flat.\n\nFree.","operationId":"getCapitalDeployment","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapitalDeploymentData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/assets/denominations":{"get":{"tags":["Ratings"],"summary":"What the capital is denominated in, and whether that thing is worth what its name claims.","description":"Only a dollar claim can be checked here: there is no ether or bitcoin reference price, so those are unpriced rather than sound. A dollar-named token priced far from a dollar is a ticker collision rather than a depeg, and its price is refused.\n\nFree.","operationId":"getAssetsDenominations","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetsDenominationsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/agents/payers":{"get":{"tags":["Agents"],"summary":"Who pays on x402, separated by observable behaviour rather than by label.","description":"No class claims “agent”. They separate behaves-like-a-program from we-cannot-tell. Payments are counted, never summed across tokens.\n\nFree.","operationId":"getAgentsPayers","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentsPayersData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/resolve":{"post":{"tags":["Judgement"],"summary":"Settle a condition about a vault from our records, or decline to.","description":"Deterministic and recomputable. A window we do not fully span is refused rather than answered on the part we hold. No collateral backs it. `spansQuestion` false means the observations do not cover the window asked about, AND is also what you get when there are no observations at all; `observations` is the field that separates them.\n\nFree.","operationId":"postResolve","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveResultData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveQuestion"},"examples":{"maxDrawdownBelow":{"summary":"Did this vault stay inside a 10% drawdown over the first half of 2025?","value":{"kind":"max_drawdown_below","vault":"hyperliquidity-provider-hlp-dfc24b","from":1735689600000,"to":1751328000000,"threshold":0.1}},"returnAbove":{"summary":"Did it return more than 2% over the same window?","value":{"kind":"return_above","vault":"hyperliquidity-provider-hlp-dfc24b","from":1735689600000,"to":1751328000000,"threshold":0.02}},"instrumentExposureBelow":{"summary":"Did bitcoin stay under half the gross book?","value":{"kind":"instrument_exposure_below","vault":"hyperliquidity-provider-hlp-dfc24b","from":1735689600000,"to":1751328000000,"threshold":0.5,"instrument":"BTC"}}},"example":{"kind":"max_drawdown_below","vault":"hyperliquidity-provider-hlp-dfc24b","from":1735689600000,"to":1751328000000,"threshold":0.1}}}},"x-lifecycle":"active"}},"/v1/vaults/{slug}/due-diligence":{"get":{"tags":["Judgement"],"summary":"One vault, assembled for somebody deciding whether to fund it: what it holds, what depositors kept, how you get out, what could go wrong, who can act on it, and what we could not read.","description":"A COMPOSITION AND NOT A RECOMMENDATION. Every figure in it is published free, per vault, elsewhere here; what is bought is the assembly. It computes nothing of its own and lifts each sentence verbatim from the reading that produced it, so it cannot disagree with `vault_check` or `vault_exits`. There is NO SCORE and there will not be one: a composite is the number every reader quotes and none can check. A section with no reading says `unread` rather than going blank, and the summary counts those, because an allocator scanning for gaps needs the gap to be a word.\n\nRequires `duediligence.read` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getVaultsBySlugDueDiligence","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticalDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/vaults/{slug}/assessment":{"get":{"tags":["Judgement"],"summary":"A hash-committed assessment, in the shape ERC-8004’s Reputation Registry points at.","description":"ASPERN does not publish on chain; the call arguments are returned for whoever does.\n\nFree.","operationId":"getVaultsBySlugAssessment","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticalDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"The vault slug, or its contract address — either resolves. Case is ignored, and an address held by two vaults is refused rather than guessed.","schema":{"type":"string"}},{"name":"methodology","in":"query","required":false,"description":"Build the document at an older methodology version, so a hash issued under it stays checkable. /v1/meta lists what this build can produce.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/registry":{"post":{"tags":["Attestation"],"summary":"Pre-register a strategy before it runs. Free.","description":"Free.","operationId":"postRegistry","responses":{"200":{"description":"Already registered: the same declaration was recorded before. The body names it."},"201":{"description":"Created. The declaration was accepted and recorded.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"422":{"description":"A declaration arrived unsigned: code `signature_required`. The problem document carries the exact text to sign as extension members `textToSign`, `digest` and `how`, which is the documented first step of registering rather than a failure.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryDeclaration"}}}},"x-lifecycle":"active"},"get":{"tags":["Attestation"],"summary":"Declarations already signed.","description":"`strategyLodged` is true where a sealed strategy was committed with the declaration, and false where the declaration stands alone — not a judgement on either. `isDemonstration` marks a record WE wrote to show the format: it is not a claim by anybody and must never be counted as a declaration, and some sit inside anchored roots because they were committed before being labelled. `proofChecked` IS FALSE FOR TWO UNRELATED REASONS and `proofState` says which: `not-anchored` means the declaration has not reached a batch yet, which is a wait; `failed` means it IS anchored and the Merkle proof does not check out against the recorded root, which is evidence that something is wrong with a record we published. On a surface whose whole point is verifiability those must never read the same, so treat `proofChecked: false` alone as unusable and read `proofState`. A proof is published only where it verifies: `proof` is null in both false cases.\n\nFree.","operationId":"getRegistry","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"address","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"management","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"","schema":{"type":"number"}}],"x-lifecycle":"active"}},"/v1/commit":{"post":{"tags":["Attestation"],"summary":"Commit to a decision before executing it.","description":"Free.","operationId":"postCommit","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitRequest"}}}},"x-lifecycle":"active"}},"/v1/reveal":{"post":{"tags":["Attestation"],"summary":"Reveal it afterwards; we match it against the chain.","description":"Free.","operationId":"postReveal","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevealRequest"}}}},"x-lifecycle":"active"}},"/v1/attestation/{digest}":{"get":{"tags":["Attestation"],"summary":"Whether a sequence is intact. A gap voids the grade permanently.","description":"Free.","operationId":"getAttestationByDigest","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttestationDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"digest","in":"path","required":true,"description":"","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/openapi.json":{"get":{"tags":["Account"],"summary":"This document. Free, so it can be read before deciding whether to buy a key.","description":"Free.","operationId":"getOpenapi.json","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/plans":{"get":{"tags":["Account"],"summary":"Prices and quotas. No key needed.","description":"Free.","operationId":"getPlans","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlansDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/populations":{"get":{"tags":["Account"],"summary":"What every population key in meta.coverage.population means. Free, so a key can be resolved without scraping a page.","description":"Keys marked decomposed narrow stage by stage at /reconciliation, where every row that falls out is named along with the reason. Not decomposed is an honest state rather than a gap: inventing an intermediate stage nobody measures would imply a count that was never taken.\n\nFree.","operationId":"getPopulations","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PopulationsDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"key","in":"query","required":false,"description":"Resolve one key instead of listing all. An undeclared key answers 404, never an empty list.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/lineage":{"get":{"tags":["Account"],"summary":"What every lineage block on this API means, field by field, and why several of them are null.","description":"A vault read from a venue HTTP API has no block number and a document assembled from four readers has no single source event id. Those fields are null with a reason rather than filled with something plausible.\n\nFree.","operationId":"getLineage","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/proof":{"get":{"tags":["Account"],"summary":"The capital and payments a reader can re-derive themselves, and the gaps, weighted by capital.","description":"Nothing is corrected from these checks: a disagreement has more than one possible owner. Hyperliquid is absent by nature — an order book has no contract holding the capital to be asked. Two claims of different strength travel here: the confirmed total was asked at the head with no block recorded and cannot be repeated, while sample.rows name the block and can be. Twenty sample rows are complete at every tier; the rest are listed with the vault and contract withheld and need positions.read.\n\nFree.","operationId":"getProof","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/examples":{"get":{"tags":["Account"],"summary":"Identifiers each parameterised route currently answers to, read from the data as the request is served.","description":"Derived, never listed: a hand-kept fixture list is correct on the afternoon it is written. A name here is one the endpoint answered to a moment ago and not a promise that it will forever, because these populations change as vaults open and instruments stop being held. Free by design — a catalogue of valid inputs that itself needs a paid capability leaves the caller who most needs it still guessing.\n\nFree.","operationId":"getExamples","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExamplesDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/checks":{"get":{"tags":["Account"],"summary":"Every claim we make, written so a consumer can test it without calling us again.","description":"A check marked executable:false cannot be repeated by a machine and says why on the row. Both families in that state today are our gap rather than the source’s: the withdrawable calls were made at the head with no block recorded, and most outside comparisons were obtained by a person reading a page. Open at every tier by design — a proof somebody has to buy before they can test it is a receipt.\n\nFree.","operationId":"getChecks","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecksDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"family","in":"query","required":false,"description":"Run one group only. The families and their sizes are in every response, so this needs no separate lookup.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/differences":{"get":{"tags":["Account"],"summary":"Where our figures disagree with a public source, and the stated reason.","description":"The ratio is not an error rate: most pairs are different units over different windows. A row with state=open is a difference we have not explained, published rather than left out.\n\nFree.","operationId":"getDifferences","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DifferencesData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/limits":{"get":{"tags":["Account"],"summary":"What is withheld from an unkeyed caller, per surface, and what a plan opens.","description":"A short list is not necessarily all of the data. This says how many rows come whole, how many follow with one field withheld and which field that is, so a caller never has to infer a limit by hitting it. `charging` is whether money is being taken for this surface right now, which is a setting and not a fact about your account.\n\nFree.","operationId":"getLimits","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitsData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/account":{"get":{"tags":["Account"],"summary":"Your balance, quota and deposit address.","description":"Free.","operationId":"getAccount","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"}},"/v1/history/capital":{"get":{"tags":["History"],"summary":"Daily measured capital, split by who decides.","description":"`reconstructed: true` marks a day REBUILT from stored value history rather than observed on the day itself, and it is a different measurement wearing the same name: a rebuilt day carries today’s cohort and classification, so it is survivorship-biased backwards. Compare a run of reconstructed days with a run of observed ones and the shape of the series is partly our own construction.\n\nRequires `crowding.summary` — PUBLIC or PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getHistoryCapital","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryCapitalData"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"from","in":"query","required":false,"description":"ISO date. Defaults to a year back.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"ISO date. Defaults to today.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/collateral/{symbol}":{"get":{"tags":["Crowding"],"summary":"Which vaults lend against one collateral, and at what size.","description":"PAID. The vault answer carries the TOTALS free - how many vaults share the exposure and how much they hold - and this is which ones they are, the same split the per-market rows already make. The denominator is THE VAULTS WE TRACK and never a market: nobody publishes how much of an asset is pledged across all of lending, so this says who falls together rather than how large the fall would be. A vault lending against this asset on a venue we do not walk is absent from the crowd rather than counted at zero, and a slice named `idle` is the absence of an exposure and joins no crowd.\n\nRequires `crowding.members` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getCollateralBySymbol","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollateralCrowdDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"symbol","in":"path","required":true,"description":"The asset symbol as the venue writes it, e.g. wstETH. Case is ignored.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/watches":{"get":{"tags":["Alerts"],"summary":"Your alerts, where they deliver, and what has fired.","description":"With no webhook registered a firing is recorded and readable but reaches nothing.\n\nRequires `crowding.members` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"getWatches","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchesDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-lifecycle":"active"},"put":{"tags":["Alerts"],"summary":"Arm an alert, or change its threshold.","description":"The threshold is a fraction, not a percentage: 0.9 means 90%. The one exception is `unresolved`, which is a number of days. Changing a threshold re-arms, so the next crossing fires. `rests` is the only kind here about somebody ELSE’s dependency rather than your own exposure: at 0.5 it fires when more than half of what an agent spends goes to a single party, which nothing in that agent’s own record will show you.\n\nRequires `crowding.members` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"putWatches","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchRequest"}}}},"x-lifecycle":"active"}},"/v1/payment/inspect":{"post":{"tags":["Alerts"],"summary":"Read the transaction you are about to sign, against what you say you intend.","description":"It reads three calls and refuses to guess at any other: decoding unknown calldata without the ABI means guessing where each argument begins, and a confident wrong answer about where money goes is worse than none. `undecodable` is NOT a pass. Amounts are atomic units, never dollars, because the token owns its decimals. Anything you leave out of `expect` is reported as not compared rather than as agreeing. Nothing is stored.\n\nFree.","operationId":"postPaymentInspect","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentInspected"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentInspectRequest"}}}},"x-lifecycle":"active"}},"/v1/receipts":{"post":{"tags":["Alerts"],"summary":"Record what you did, so it can be checked later.","description":"The reference is yours and is stored as a CLAIM: we do not take your word for it, we read it. Within the hour it is judged against the payments we read from the chain, verified, contradicted, not found after two days, or unverifiable, and GET /v1/receipts/{id} returns the outcome to the key that wrote it. Until then it raises no evidence status anywhere.\n\nFree.","operationId":"postReceipts","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptRecorded"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptRequest"}}}},"x-lifecycle":"active"}},"/v1/receipts/{id}":{"get":{"tags":["Alerts"],"summary":"What became of a receipt you recorded: claimed, verified, contradicted, not found, or unverifiable.","description":"Readable only by the key that wrote it. Judged against the payments WE read from the chain, never against your word: `verified` means the transaction paid the subject and the amount agrees, `contradicted` says which of the two did not, `not-found` comes only after a two-day grace and is a statement about our reading, and a reference that is not a transaction hash is `unverifiable`. Until judged it is `claimed`, and a claim raises no evidence status anywhere.\n\nFree.","operationId":"getReceiptsById","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptStatusDocument"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"404":{"description":"A valid request whose named resource cannot be produced. `not_found`: No receipt with this id was written by this key. Not retryable by repeating the same request; the body says what would change the answer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"The id `POST /v1/receipts` returned.","schema":{"type":"string"}}],"x-lifecycle":"active"}},"/v1/watch/subject":{"put":{"tags":["Alerts"],"summary":"Be told when the answer about an address changes.","description":"The first run records a reading and reports nothing, because there is nothing yet to compare against. An unknown dimension or policy is refused rather than dropped: a watch that quietly ignores half of what you asked for is worse than no watch. One watch per subject per key; calling again edits it.\n\nFree.","operationId":"putWatchSubject","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubjectWatchSet"}}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubjectWatchRequest"}}}},"x-lifecycle":"active"}},"/v1/watches/{id}":{"delete":{"tags":["Alerts"],"summary":"Disarm an alert.","description":"Requires `crowding.members` — PRO or ENTERPRISE. Without it the call answers 402 with the amount and a deposit address.","operationId":"deleteWatchesById","responses":{"200":{"description":"The answer, with its own limitations stated inline.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"400":{"description":"A parameter is present and unreadable. `invalid_params` names every one at fault, not just the first.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"A key was supplied and is unknown, revoked or expired. Sending no key at all is not this — that is the free tier. This response carries the full rate-limit headers for the ANONYMOUS bucket, which is the bucket the caller is in: an unrecognised key is throttled by address before it is refused, and no customer plan is named because there is no customer.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}}},"402":{"description":"This capability is not carried by the caller’s tier. The body is the x402 payment offer — capability, amount and where to send it — not an error document.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Nothing of that name, or too little data to answer. The detail says which.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate or allowance exhausted. `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` are on every response; `Retry-After` is on this one.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"500":{"description":"Something failed at our end. Quote `request_id` — it is on every response and in our logs.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Watch id.","schema":{"type":"string"}}],"x-lifecycle":"active"}}},"x-aspern-environment":"production"}