{
"message": "Payment service temporarily unavailable"
}
Vault Risk V3
Batch vault ratings
Returns the v3 composite grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as { ok: false, error_code } (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.
{
"message": "Payment service temporarily unavailable"
}
Returns the V3 composite grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in a single request. The vault addresses travel in the request body because the list is variable-length and can include non-EVM addresses; the endpoint is read-only.
The batch never fails as a whole. Each result row carries its own outcome — either ok: true with a composite, or ok: false with an error_code (NOT_FOUND, INVALID_ADDRESS, UNSUPPORTED_CHAIN, or UPSTREAM_ERROR) — so one bad vault can’t sink the request.
Grading scheme to pin — selects the letter-grade band table. Default v2 (the standard 11-band scale: no E, adds C+). v1 is frozen and deprecated. Independent of the API version (v3) and of framework_version. Unknown values return 400 with the supported list.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Webacy Docs","colors":{"primary":"#00d66f","light":"#33cb8b","dark":"#279b71"},"logo":{"light":"https://mintcdn.com/webacy/PZHkbk8qJrPsQSaC/logo/light.png?fit=max\u0026auto=format\u0026n=PZHkbk8qJrPsQSaC\u0026q=85\u0026s=c1933879883f6b01ff46a6e51cfd687f","dark":"https://mintcdn.com/webacy/cDgYsLUzSZsNJNEk/logo/dark.svg?fit=max\u0026auto=format\u0026n=cDgYsLUzSZsNJNEk\u0026q=85\u0026s=e8da7717da0f291d63cc90a4cb4a91af"},"favicon":"https://mintcdn.com/webacy/LaWycqKCQaZgOW1n/favicon.ico?fit=max\u0026auto=format\u0026n=LaWycqKCQaZgOW1n\u0026q=85\u0026s=2a29ac070865d3fb96939b7c595406f9","api":{},"navbar":{"primary":{"type":"button","label":"Dashboard","href":"https://dapp.webacy.com"}},"footer":{"socials":{"x":"https://x.com/mywebacy","github":"https://github.com/Webacy-Prod"}},"contextual":{"options":["copy","claude","chatgpt","cursor"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"webacy","hasAudioNarration":false,"actualSubdomain":"webacy","customDomains":["docs.webacy.com"],"gitSource":{"type":"github","owner":"webacy-prod","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4e694c45a43d6f052ece2","collectionId":"50172f2e-c251-42e3-a524-c0a0c3326606","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4e694c45a43d6f052ece2"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4e694c45a43d6f052ece2","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Build","count":61},{"language":"default","tag":"API Reference","count":49},{"language":"default","tag":"Overview","count":29},{"language":"default","tag":"Glossary","count":25},{"language":"default","tag":"Risk Intelligence","count":21},{"language":"default","tag":"Learn","count":18},{"language":"default","tag":"Integrations","count":15},{"language":"default","tag":"Stablecoins","count":11},{"language":"default","tag":"Contract Security","count":9},{"language":"default","tag":"SDK","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".gb{display:inline-block;min-width:2.2em;padding:2px 9px;border-radius:6px;font-weight:700;font-size:.85em;line-height:1.35;text-align:center;letter-spacing:.02em;white-space:nowrap}.gb-a{background:#047857;color:#fff}.gb-b{background:#1d4ed8;color:#fff}.gb-c{background:#f59e0b;color:#1f2937}.gb-d{background:#c2410c;color:#fff}.gb-f{background:#b91c1c;color:#fff}"}],"page":{"pagePath":"api-reference/vault-risk-v3/get-vault-grades-batch","slug":"/api-reference/vault-risk-v3/get-vault-grades-batch","pageMetadata":{"title":"Batch vault ratings","openapi":"POST /v3/vaults/batch/grades","description":"Returns the v3 `composite` grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as `{ ok: false, error_code }` (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.","href":"/api-reference/vault-risk-v3/get-vault-grades-batch"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Returns the v3 \", _jsx(_components.code, {\n children: \"composite\"\n }), \" grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as \", _jsx(_components.code, {\n children: \"{ ok: false, error_code }\"\n }), \" (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,strong:`strong`,..._provideComponents(),...props.components},{Note}=_components;if(!Note)_missingMdxReference(`Note`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Returns the V3 composite grade (letter + 0–100 risk score + per-category contributors) for up to `,_jsx(_components.strong,{children:`100`}),` vaults in a single request. The vault addresses travel in the request `,_jsx(_components.strong,{children:`body`}),` because the list is variable-length and can include non-EVM addresses; the endpoint is read-only.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The batch never fails as a whole. Each result row carries its own outcome — either `,_jsx(_components.code,{children:`ok: true`}),` with a `,_jsx(_components.code,{children:`composite`}),`, or `,_jsx(_components.code,{children:`ok: false`}),` with an `,_jsx(_components.code,{children:`error_code`}),` (`,_jsx(_components.code,{children:`NOT_FOUND`}),`, `,_jsx(_components.code,{children:`INVALID_ADDRESS`}),`, `,_jsx(_components.code,{children:`UNSUPPORTED_CHAIN`}),`, or `,_jsx(_components.code,{children:`UPSTREAM_ERROR`}),`) — so one bad vault can’t sink the request.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Batch vault ratings","openapi":"POST /v3/vaults/batch/grades","description":"Returns the v3 `composite` grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as `{ ok: false, error_code }` (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.","href":"/api-reference/vault-risk-v3/get-vault-grades-batch"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Batch v3 vault composite grades","description":"Returns the v3 `composite` grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as `{ ok: false, error_code }` (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.","operationId":"getVaultGradesBatchV3","tags":["Vault Risk v3"],"security":["8ee85767-846f-46ee-a772-dedb53361909"],"parameters":["a14d82b0-58bb-4b31-9f2a-1cb550f89883"],"requestBody":"b02ebf2d-7f3f-44dd-9661-cc20b99ca350","responses":{"200":"7fc3beb2-17d5-4c27-80c5-6186d79c8930","400":"988de962-767f-4704-b9d5-daf565ea84f2","402":"a6f2f351-5b61-482f-9c3b-2cb94d882b91","403":"370bc03c-d21f-4578-9449-0c802547d54c","503":"8374e4f5-70cb-4b31-b261-159f09e912fc"},"method":"post","type":"path","servers":["fc0b7da1-74c5-4274-8588-fe57c6e13f7a","da385d44-e63f-43f6-8880-a921d943fe71","8076712c-258a-4a8a-a8c8-798d8227b259"],"path":"/v3/vaults/batch/grades","baseUrlOptions":["https://api.webacy.com","https://api-development.webacy.com","http://0.0.0.0:3030/api/v1/risk-score"],"title":"Batch v3 vault composite grades","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"a14d82b0-58bb-4b31-9f2a-1cb550f89883":{"name":"grading_scheme","in":"query","required":false,"schema":{"type":"string","enum":["v1","v2"],"default":"v2","isRequired":false,"description":"Grading scheme to pin — selects the letter-grade band table. Default `v2` (the standard 11-band scale: no `E`, adds `C+`). `v1` is frozen and **deprecated**. Independent of the API version (`v3`) and of `framework_version`. Unknown values return 400 with the supported list.","uniqueKey":"","typeLabel":"enum\u003cstring>"},"description":"Grading scheme to pin — selects the letter-grade band table. Default `v2` (the standard 11-band scale: no `E`, adds `C+`). `v1` is frozen and **deprecated**. Independent of the API version (`v3`) and of `framework_version`. Unknown values return 400 with the supported list."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tokens"],"properties":{"tokens":{"type":"array","minItems":1,"maxItems":100,"description":"Up to 100 { address, chain } tuples — the vaults to grade.","items":{"type":"object","required":["address","chain"],"properties":{"address":{"type":"string","description":"Vault contract address.","isRequired":true,"uniqueKey":"tokens.items.[INDEX].address","typeLabel":"string"},"chain":{"type":"string","description":"Chain identifier (e.g. eth, base, pol).","isRequired":true,"uniqueKey":"tokens.items.[INDEX].chain","typeLabel":"string"}},"uniqueKey":"tokens.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"tokens","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"tokens":[{"address":"0xD50DA5F859811A91fD1876C9461fD39c23C747Ad","chain":"eth"},{"address":"0x0deFfd509197aAD5207d2A55862835b467E8128F","chain":"eth"}]},"examples":{"Example":{"title":"Example","value":{"tokens":[{"address":"0xD50DA5F859811A91fD1876C9461fD39c23C747Ad","chain":"eth"},{"address":"0x0deFfd509197aAD5207d2A55862835b467E8128F","chain":"eth"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"7fc3beb2-17d5-4c27-80c5-6186d79c8930":{"headers":{"x-credit-token":{"description":"Opaque bearer token for a prepaid x402 CU balance. Send it as `x-credit-token` to spend that balance. If the balance is insufficient and a payment for its verified payer settles, the same token is topped up and returned; otherwise the paid call returns a new independent token.","schema":{"type":"string"}},"x-credit-balance-cu":{"description":"CU remaining for the returned or presented credit token after this call.","schema":{"type":"integer","minimum":0,"example":480}}},"description":"Per-vault composite grade results. The batch never fails as a whole; each row is `ok: true` with a `composite`, or `ok: false` with an `error_code`.","content":{"application/json":{"schema":{"type":"object","required":["schema_version","results"],"properties":{"schema_version":{"type":"string","example":"3.0","isRequired":true,"uniqueKey":"schema_version","typeLabel":"string"},"results":{"type":"array","items":{"oneOf":[{"type":"object","required":["address","chain","ok","composite"],"properties":{"address":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.address","typeLabel":"string"},"chain":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.chain","typeLabel":"string"},"ok":{"type":"boolean","enum":[true],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.ok","typeLabel":"enum\u003cboolean>"},"composite":{"type":"object","description":"Headline grade block. POLARITY (load-bearing): `score` is 0–100, HIGHER = WORSE (A+ = 0, F = 100) — same direction as the v2 `risk.score` on the same response. `score = max(Σ contributors·weight, upstream_risk)`: floored from below by the upstream pipeline risk.","properties":{"grading_scheme":{"type":"string","example":"v1","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.grading_scheme","typeLabel":"string"},"grade":{"oneOf":[{"type":"string","description":"Letter grade. `null` only for an unrated vault (`rated: false`).","enum":["A+","A","A-","B+","B","B-","C","C-","D","E","F"],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.grade.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Letter grade. `null` only for an unrated vault (`rated: false`).","enum":["A+","A","A-","B+","B","B-","C","C-","D","E","F"],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.grade.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.grade","typeLabel":"enum\u003cstring> | null"},"stars":{"oneOf":[{"type":"integer","description":"1–5 stars. `null` only for an unrated vault (`rated: false`).","minimum":1,"maximum":5,"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.stars.oneOf.0","typeLabel":"integer"},{"type":"null","description":"1–5 stars. `null` only for an unrated vault (`rated: false`).","minimum":1,"maximum":5,"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.stars.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.stars","typeLabel":"integer | null"},"score":{"oneOf":[{"type":"number","description":"0–100, higher = worse; rounded to one decimal. `null` only for an unrated vault (`rated: false`).","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.score.oneOf.0","typeLabel":"number"},{"type":"null","description":"0–100, higher = worse; rounded to one decimal. `null` only for an unrated vault (`rated: false`).","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.score","typeLabel":"number | null"},"contributors":{"type":"object","description":"Dense map: every WebacyCategory key is present.","additionalProperties":{"type":"object","description":"One row of `composite.contributors`: a category's resolved score and its weight under the current grading scheme.","properties":{"score":{"type":"number","description":"0–100, higher = worse. Integer.","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.contributors.additionalProperties.score","typeLabel":"number"},"weight":{"type":"number","description":"Category weight under the grading scheme (sums to 1 across categories).","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.contributors.additionalProperties.weight","typeLabel":"number"},"weighted_contribution":{"type":"number","description":"Points this category adds to the framework composite — `score × weight`, rounded to one decimal. The rounded sum across contributors approximates the framework composite (each contribution is rounded independently).","uniqueKey":"results.items.[INDEX].oneOf.0.composite.contributors.additionalProperties.weighted_contribution","typeLabel":"number"}},"required":["score","weight"],"uniqueKey":"results.items.[INDEX].oneOf.0.composite.contributors.additionalProperties","typeLabel":"object"},"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.contributors","typeLabel":"object"},"upstream_risk":{"oneOf":[{"type":"number","description":"Verbatim upstream pipeline risk (0–100, higher = worse). Acts as a lower bound on `score`. `null` when there is no upstream score (data-only vaults, e.g. Kamino on Solana awaiting native scoring) — in that case no upstream floor is applied. Guard against null before formatting.","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.upstream_risk.oneOf.0","typeLabel":"number"},{"type":"null","description":"Verbatim upstream pipeline risk (0–100, higher = worse). Acts as a lower bound on `score`. `null` when there is no upstream score (data-only vaults, e.g. Kamino on Solana awaiting native scoring) — in that case no upstream floor is applied. Guard against null before formatting.","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.upstream_risk.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.upstream_risk","typeLabel":"number | null"},"clamped_by_upstream":{"type":"boolean","description":"true iff upstream_risk exceeded the framework composite and pulled `score` up.","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.clamped_by_upstream","typeLabel":"boolean"},"score_source":{"type":"string","enum":["framework","upstream","floor","unrated"],"description":"What set the emitted `score`: `framework` when the v3 weighted composite won, `upstream` when the pipeline floor did (equivalent to `clamped_by_upstream`), `floor` when a hard guardrail floor did (a critical red flag such as a critical depeg, an exit recommendation or effectively-locked liquidity), or `unrated` for an unrated vault (`rated: false`), which has no score. When `upstream` or `floor`, `drivers` can be empty even on a bad grade.","uniqueKey":"results.items.[INDEX].oneOf.0.composite.score_source","typeLabel":"enum\u003cstring>"},"rated":{"type":"boolean","description":"Vault composites only. `false` when the vault has not been assessed (no upstream risk score and no guardrail floor): `grade`, `score` and `stars` are `null` and `score_source` is `unrated`. Render it as Unrated, never as a grade. `true` for every graded vault. Not present on RWA or stablecoin composites.","uniqueKey":"results.items.[INDEX].oneOf.0.composite.rated","typeLabel":"boolean"},"drivers":{"type":"array","description":"Ranked subcategory drivers of the grade (descending by `weighted_contribution`), each with the warn/fail criteria and evidence that drove it. Detail endpoints only (`GET /v3/vaults/{address}`, `GET /v3/rwa/{address}`); batch/list omit it. Read with `drivers_complete`: an empty `[]` is only a clean grade when `drivers_complete` is true.","items":{"type":"object","description":"One ranked subcategory driver of the grade (descending by `weighted_contribution`), with the warn/fail criteria that drove it. NOTE: for RWA, `criteria` are descriptive context, not a numeric decomposition of `score` (RWA category scores come from inverted v2 pillars, not criterion penalties).","properties":{"category":{"type":"string","example":"market_liquidity","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].category","typeLabel":"string"},"category_name":{"type":"string","example":"Market \u0026 liquidity","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].category_name","typeLabel":"string"},"score":{"type":"number","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].score","typeLabel":"number"},"weight":{"type":"number","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].weight","typeLabel":"number"},"weighted_contribution":{"type":"number","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].weighted_contribution","typeLabel":"number"},"criteria":{"type":"array","items":{"type":"object","description":"One non-pass criterion inside a composite driver — the specific warn/fail check that pulled a subcategory's score up, with the evidence behind it.","properties":{"key":{"type":"string","example":"large_holder_concentration","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].criteria.items.[INDEX].key","typeLabel":"string"},"name":{"type":"string","example":"Large-holder concentration bounded","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].criteria.items.[INDEX].name","typeLabel":"string"},"status":{"type":"string","enum":["warn","fail"],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].criteria.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"evidence":{"type":"object","description":"Underlying values behind the verdict, when available.","additionalProperties":true,"example":{"hci_10":0.34},"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].criteria.items.[INDEX].evidence","typeLabel":"object"}},"required":["key","name","status"],"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].criteria.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX].criteria","typeLabel":"object[]"}},"required":["category","category_name","score","weight","weighted_contribution","criteria"],"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers.items.[INDEX]","typeLabel":"object"},"uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers","typeLabel":"object[]"},"drivers_complete":{"type":"boolean","description":"Whether `drivers` is the complete explanation of the grade. `true` (framework-sourced) ⇒ `drivers` fully attribute it and `[]` means a genuinely clean grade. `false` (upstream-clamped) ⇒ `drivers` reflect only the framework sub-signal and can be empty even on a bad grade — render `upstream_risk`, not \"no risk\". Detail endpoints only, alongside `drivers`.","uniqueKey":"results.items.[INDEX].oneOf.0.composite.drivers_complete","typeLabel":"boolean"}},"required":["grading_scheme","grade","stars","score","contributors","upstream_risk","clamped_by_upstream"],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.0.composite","typeLabel":"object"}},"uniqueKey":"results.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["address","chain","ok","error_code"],"properties":{"address":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.1.address","typeLabel":"string"},"chain":{"type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.1.chain","typeLabel":"string"},"ok":{"type":"boolean","enum":[false],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.1.ok","typeLabel":"enum\u003cboolean>"},"error_code":{"type":"string","enum":["NOT_FOUND","INVALID_ADDRESS","UNSUPPORTED_CHAIN","UPSTREAM_ERROR"],"isRequired":true,"uniqueKey":"results.items.[INDEX].oneOf.1.error_code","typeLabel":"enum\u003cstring>"}},"uniqueKey":"results.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"results.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"results","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"schema_version":"3.0","results":[{"address":"0xD50DA5F859811A91fD1876C9461fD39c23C747Ad","chain":"eth","ok":true,"composite":{"grading_scheme":"v2","grade":"F","stars":1,"score":98.5,"contributors":{"smart_contract":{"score":0,"weight":0.2},"operational_governance":{"score":0,"weight":0.2},"asset_collateral":{"score":10,"weight":0.15},"market_liquidity":{"score":35,"weight":0.2},"counterparty":{"score":0,"weight":0.1},"hack_exploit_history":{"score":0,"weight":0.15},"chain_infrastructure":{"score":0,"weight":0}},"upstream_risk":98.5,"clamped_by_upstream":true}},{"address":"0x0000000000000000000000000000000000000000","chain":"eth","ok":false,"error_code":"NOT_FOUND"}]},"examples":{"Example":{"title":"Example","value":{"schema_version":"3.0","results":[{"address":"0xD50DA5F859811A91fD1876C9461fD39c23C747Ad","chain":"eth","ok":true,"composite":{"grading_scheme":"v2","grade":"F","stars":1,"score":98.5,"contributors":{"smart_contract":{"score":0,"weight":0.2},"operational_governance":{"score":0,"weight":0.2},"asset_collateral":{"score":10,"weight":0.15},"market_liquidity":{"score":35,"weight":0.2},"counterparty":{"score":0,"weight":0.1},"hack_exploit_history":{"score":0,"weight":0.15},"chain_infrastructure":{"score":0,"weight":0}},"upstream_risk":98.5,"clamped_by_upstream":true}},{"address":"0x0000000000000000000000000000000000000000","chain":"eth","ok":false,"error_code":"NOT_FOUND"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"988de962-767f-4704-b9d5-daf565ea84f2":{"description":"Invalid body (empty or > 100 tokens) or grading_scheme.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"a6f2f351-5b61-482f-9c3b-2cb94d882b91":{"description":"Keyless x402 payment required. Returned for a keyless caller (gateway entry `x-webacy-entry: x402`) with no prepaid CU balance or insufficient CU on the presented credit token. Identified by the base64 `PAYMENT-REQUIRED` response header; the body carries the x402 challenge (a USDC price on Base and a Stripe-minted deposit address). Pay it, then retry with the `PAYMENT-SIGNATURE` header to unlock the resource and receive a credit token. An authenticated api-key caller with a past_due/unpaid subscription may instead receive a different 402 (`Subscription payment required`, plain JSON, no `PAYMENT-REQUIRED` header).","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 challenge (network, asset, amount, payTo, resource.url). The edge rollout supplies the canonical public request path through a valid gateway claim; missing or invalid claims safely fall back to the public origin plus an internal path identifier. resource.url is not yet suitable for publishing to a public x402 discovery catalog (Coinbase's Bazaar): route-specific declarations and live paid validation are still pending.","schema":{"type":"string"}}},"content":{"application/json":{"example":{"x402Version":1,"error":"payment required"},"examples":{"Example":{"title":"Example","value":{"x402Version":1,"error":"payment required"}}},"exampleType":"examples"}},"exampleType":"examples"},"370bc03c-d21f-4578-9449-0c802547d54c":{"description":"Missing or invalid x-api-key.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"8374e4f5-70cb-4b31-b261-159f09e912fc":{"description":"x402 paywall fails CLOSED: if payment configuration is incomplete or invalid, the x402 route unexpectedly has no payment requirement, or the facilitator, credit store, or settlement is unavailable, a gated keyless request returns 503 (`Payment service temporarily unavailable`) rather than serving the resource unpaid.","content":{"application/json":{"example":{"message":"Payment service temporarily unavailable"},"examples":{"Example":{"title":"Example","value":{"message":"Payment service temporarily unavailable"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"8ee85767-846f-46ee-a772-dedb53361909":{"api_key":{"type":"apiKey","in":"header","name":"x-api-key","scopes":[],"schemeName":"api_key"}}},"servers":{"fc0b7da1-74c5-4274-8588-fe57c6e13f7a":{"url":"https://api.webacy.com","description":"Webacy Risk Score API (Production)"},"da385d44-e63f-43f6-8880-a921d943fe71":{"url":"https://api-development.webacy.com","description":"Webacy Risk Score API (Development)"},"8076712c-258a-4a8a-a8c8-798d8227b259":{"url":"http://0.0.0.0:3030/api/v1/risk-score","description":"Webacy Risk Score API - Local"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","scopes":[],"schemeName":"api_key"},"schema":{"title":"x-api-key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"api_key","name":"x-api-key"}],"title":"api_key"}]},"originalFileLocation":"openapi.json"},"subdomain":"webacy","siteName":"Webacy Docs","title":"Batch vault ratings - Webacy Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-22T14:36:24.890Z","originalFileLocation":"api-reference/vault-risk-v3/get-vault-grades-batch.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns the v3 composite grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as { ok: false, error_code } (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Webacy Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Batch vault ratings - Webacy Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns the v3 composite grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as { ok: false, error_code } (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Webacy Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://webacy.mintlify.app/_mintlify/api/og/v2?division=Vault+Risk+V3\u0026amp;title=Batch+vault+ratings\u0026amp;description=Returns+the+v3+%60composite%60+grade+%28letter+%2B+0%E2%80%93100+risk+score+%2B+per-category+contributors%29+for+up+to+100+vaults+in+one+request.+Vault+addresses+travel+in+the+POST\u0026amp;theme=13dc342d05893d147dc93219\u0026amp;signature=d9a802039b97e6ffbb9bdd8f79811d7e0d628d865512eebe2f8158ca7c3be044\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Batch vault ratings - Webacy Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns the v3 composite grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as { ok: false, error_code } (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://webacy.mintlify.app/_mintlify/api/og/v2?division=Vault+Risk+V3\u0026amp;title=Batch+vault+ratings\u0026amp;description=Returns+the+v3+%60composite%60+grade+%28letter+%2B+0%E2%80%93100+risk+score+%2B+per-category+contributors%29+for+up+to+100+vaults+in+one+request.+Vault+addresses+travel+in+the+POST\u0026amp;theme=13dc342d05893d147dc93219\u0026amp;signature=d9a802039b97e6ffbb9bdd8f79811d7e0d628d865512eebe2f8158ca7c3be044\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/webacy/BDwg8pUd_cx6RnJh/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Webacy Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00d66f\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/vault-risk-v3/get-vault-grades-batch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.webacy.com/#organization\",\"name\":\"Webacy Docs\",\"url\":\"https://docs.webacy.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/webacy/PZHkbk8qJrPsQSaC/logo/light.png?fit=max\u0026auto=format\u0026n=PZHkbk8qJrPsQSaC\u0026q=85\u0026s=c1933879883f6b01ff46a6e51cfd687f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.webacy.com#website\",\"name\":\"Webacy Docs\",\"url\":\"https://docs.webacy.com\",\"publisher\":{\"@id\":\"https://docs.webacy.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch#webpage\",\"url\":\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch\",\"name\":\"Batch vault ratings\",\"description\":\"Returns the v3 composite grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as { ok: false, error_code } (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.\",\"dateModified\":\"2026-09-22T14:36:24.890Z\",\"isPartOf\":{\"@id\":\"https://docs.webacy.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Vault Risk V3\",\"item\":\"https://docs.webacy.com/api-reference/vault-risk-v3/v3-overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Batch vault ratings\",\"item\":\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch#apireference\",\"headline\":\"Batch vault ratings\",\"name\":\"Batch vault ratings\",\"description\":\"Returns the v3 composite grade (letter + 0–100 risk score + per-category contributors) for up to 100 vaults in one request. Vault addresses travel in the POST body because the list is variable-length and may include non-EVM addresses; the endpoint is read-only. Per-vault failures are reported in-band as { ok: false, error_code } (HTTP 200) so a single bad address never fails the whole batch. POLARITY: scores 0–100, higher = worse.\",\"url\":\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch\",\"mainEntityOfPage\":{\"@id\":\"https://docs.webacy.com/api-reference/vault-risk-v3/get-vault-grades-batch#webpage\"},\"dateModified\":\"2026-09-22T14:36:24.890Z\",\"publisher\":{\"@id\":\"https://docs.webacy.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.webacy.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Webacy Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Webacy Docs","nav":{"global":null,"tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/introduction"}]},{"tab":"Build","pages":[{"title":"Build","href":"/getting-started"}]},{"tab":"Learn","pages":[{"title":"Learn","href":"/use-cases-guides-walkthroughs"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Introduction","href":"/api-reference/introduction"},{"title":"Authenticate with the Webacy API using API keys","href":"/api-reference/authentication"},{"title":"Get current API usage","openapi":"GET /usage/current","href":"/api-reference/api-usage/get-current-api-usage"},{"title":"Get API usage for specified dates","openapi":"GET /usage","href":"/api-reference/api-usage/get-api-usage-for-specified-dates"},{"title":"Get current CU usage","openapi":"GET /usage/cu","href":"/api-reference/api-usage/get-current-cu-usage"},{"title":"Get daily CU usage","openapi":"GET /usage/cu/daily","href":"/api-reference/api-usage/get-daily-cu-usage"}]},{"group":"Stablecoins","pages":[{"title":"Depeg Monitor","href":"/api-reference/depeg-monitor"},{"title":"List pegged tokens — stablecoins \u0026 RWAs","openapi":"GET /rwa","href":"/api-reference/depeg-monitor/list-pegged-tokens-with-depeg-risk"},{"title":"Get risk detail for a single stablecoin","openapi":"GET /rwa/{address}","href":"/api-reference/depeg-monitor/get-depeg-risk-detail-for-a-pegged-token"},{"title":"List Stablecoins","openapi":"GET /v3/stablecoins","href":"/api-reference/stablecoins/list-stablecoins"},{"title":"List Stablecoin Grades","openapi":"GET /v3/stablecoins/grades","href":"/api-reference/stablecoins/get-stablecoin-grades"},{"title":"Get Stablecoin Risk Detail","openapi":"GET /v3/stablecoins/{address}","href":"/api-reference/stablecoins/get-stablecoin-detail"},{"title":"Holder Concentration Index API","href":"/api-reference/holder-concentration"},{"title":"List all stablecoin and rwa holder data","openapi":"GET /rwa/hci","href":"/api-reference/holder-concentration/list-holder-concentration-index"},{"title":"Get holder concentration history for one token","openapi":"GET /rwa/hci/history","href":"/api-reference/holder-concentration/get-holder-concentration-index-history"},{"title":"List stablecoin supply flows","openapi":"GET /rwa/supply","href":"/api-reference/supply-flows/list-supply-flows"},{"title":"Get supply-flow detail for one token","openapi":"GET /rwa/supply/{symbol}","href":"/api-reference/supply-flows/get-supply-flow-detail"}]},{"group":"RWA","pages":[{"title":"RWA Risk (v3)","href":"/api-reference/rwa-v3"},{"title":"Get risk detail for a single RWA","openapi":"GET /v3/rwa/{address}","href":"/api-reference/rwa-v3/get-rwa-risk-detail"},{"title":"List RWA \u0026 stablecoin grades","openapi":"GET /v3/rwa/grades","href":"/api-reference/rwa-v3/get-rwa-grades"},{"title":"Batch structural risk data for RWAs","openapi":"POST /v3/rwa/batch/structural-health","href":"/api-reference/rwa-v3/post-batch-structural-health"}]},{"group":"Vault Risk V3","pages":[{"title":"V3 Vault Risk API Overview","href":"/api-reference/vault-risk-v3/v3-overview"},{"title":"V3 Framework Methodology","href":"/api-reference/vault-risk-v3/framework-methodology"},{"title":"Get risk data for a single vault","openapi":"GET /v3/vaults/{address}","description":"Returns the v3 Webacy-native vault decomposition: `composite` grade + per-category `contributors`, the dense `categories` criteria map, `coverage` disclosure, plus pass-through v2 `metadata` and `risk`. POLARITY: scores are 0–100, higher = worse (A+ = 0, F = 100). `composite.score` is floored from below by `upstream_risk`.","href":"/api-reference/vault-risk-v3/get-vault-risk-detail-v3"},{"title":"Batch vault ratings","openapi":"POST /v3/vaults/batch/grades","href":"/api-reference/vault-risk-v3/get-vault-grades-batch"},{"title":"Get vault risk data framework and taxonomy","openapi":"GET /v3/framework","description":"Public methodology endpoint (no API key). Returns the full criteria taxonomy plus the supported framework / grading-scheme version lists. Unknown `framework_version` pins return 400 with the supported list. Cached 5 min.","href":"/api-reference/vault-risk-v3/get-framework"}]},{"group":"Vault History","pages":[{"title":"Get Vault TVL History","openapi":"GET /vaults/{address}/tvl-history","href":"/api-reference/vault-risk/get-vault-tvl-history"},{"title":"Get Vault Share Price History","openapi":"GET /vaults/{address}/share-price-history","href":"/api-reference/vault-risk/get-vault-share-price-history"}]},{"group":"Risk Intelligence","pages":[{"title":"Risk Due Diligence","href":"/api-reference/riskdd"},{"title":"Trading Due Diligence","href":"/api-reference/tradingdd"},{"title":"Risk intelligence for an address","openapi":"GET /addresses/{address}","href":"/api-reference/threat-risks/threat-considerations-for-an-address"},{"group":"Wallet","pages":[{"title":"Check if a wallet address is sanctioned","openapi":"GET /addresses/sanctioned/{walletAddress}","href":"/api-reference/sanction-checks/check-if-wallet-address-is-sanctioned"},{"title":"Detect address poisoning on a wallet address","openapi":"GET /addresses/{address}/poisoning","href":"/api-reference/address-poisoning/detect-address-poisoning-for-a-specific-wallet-address"},{"title":"Get open approvals with risk data on a wallet address","openapi":"GET /addresses/{address}/approvals","href":"/api-reference/approval-risks/approvals-with-threat-risks"},{"title":"Get the risk profile and exposure of a wallet address","openapi":"GET /quick-profile/{walletAddress}","href":"/api-reference/exposure-risk/understand-the-risk-profile-risk-exposure-of-an-address"}]},{"group":"Transaction","pages":[{"title":"Get risk details for a transaction hash","openapi":"GET /transactions/{txHash}","href":"/api-reference/transaction-risks/risk-details-for-a-transaction"},{"title":"Simulate a raw EVM transaction for security risks","openapi":"POST /scan/{fromAddress}/transactions","href":"/api-reference/transaction-scanning/scan-raw-evm-transaction-for-security-risks"},{"title":"Simulate an EIP-712 signed message for security risks","openapi":"POST /scan/{fromAddress}/eip712","href":"/api-reference/transaction-scanning/scan-eip-712-signed-message-for-security-risks"}]},{"group":"Token","pages":[{"title":"Get economic history for a token","openapi":"GET /tokens/{tokenAddress}","href":"/api-reference/token-analysis/get-token-economic-history"},{"title":"Get pools with risk assessment for a token","openapi":"GET /tokens/{tokenAddress}/pools","href":"/api-reference/token-analysis/get-token-pools-with-risk-assessment"},{"title":"Get trending tokens with risk analysis","openapi":"GET /tokens/trending","href":"/api-reference/token-analysis/get-trending-cryptocurrencies-with-risk-analysis"},{"title":"Get Solana token risk with security indicators","openapi":"GET /trading-lite/{address}","href":"/api-reference/trading-lite/get-simplified-token-analysis-with-security-indicators"},{"title":"Get detailed early holder analysis for a token","openapi":"GET /holder-analysis/{address}","href":"/api-reference/holder-analysis/get-detailed-early-holder-analysis-for-a-token"},{"title":"Get trending liquidity pools with risk data","openapi":"GET /tokens/pools/trending","href":"/api-reference/pool-analysis/get-trending-pools-with-risk-analysis"},{"title":"Get OHLCV and risk data for a liquidity pool","openapi":"GET /tokens/pools/{poolAddress}","href":"/api-reference/pool-analysis/get-pool-ohlcv-data-with-risk-assessment"}]},{"group":"Smart Contract","pages":[{"title":"Get full risk analysis for a contract address","openapi":"GET /contracts/{contractAddress}","href":"/api-reference/contract-risk/get-a-real-time-analysis-for-a-given-contract-address"},{"title":"Get only the source-code findings for a contract address","openapi":"GET /contracts/{contractAddress}/code-analysis","href":"/api-reference/contract-risk/get-source-code-analysis-for-a-contract"},{"title":"Get verified source code for a contract address","openapi":"GET /source-code/{contractAddress}","href":"/api-reference/contract-risk/get-verified-source-code-for-a-contract"}]},{"group":"URL","pages":[{"title":"Get risk analysis of a URL","openapi":"POST /url","href":"/api-reference/url-risks/project-url-risk-analysis"}]}]}]}]},"basePath":"","title":"Batch vault ratings - Webacy Docs","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}