One route returns what Trustblock holds for a project: its published audits, the findings that still stand, recorded incidents and a flag that restates them.
1
Get your API key
Sign in at app.trustblock.run with a developer account and open Dashboard in the header. It shows your API key, your usage, your last accepted and last refused call (and why it was refused), and a button to rotate the key.
Identify the project with exactly one of domain, slug, or the pair chain and address.Authorization: Bearer <key> is the header to use. Calls that send the key in the older x-trustblock-api-key header are accepted too, on this route and on /v1/key; new integrations should not use it.
A 200 means the key works; the answer names the account, the header that carried the key and the credits left this month. The dashboard’s Test my key button makes the same call.
activeIssues lists every finding from the audits whose findings still stand, fixed ones included. Read status on each item. An audit’s findings are dropped only when the same security firm audited the same contracts again.
A finding the client acknowledged without fixing keeps status: not_fixed and carries isAcknowledged: true.
isDeemedDangerous is true when an audit whose findings still stand reports an open critical finding, or the project has a recorded incident not marked fixed. It restates the data; it is not a judgement about the project. Acknowledged findings do not set it, and High findings do not set it.
isAIScan is true when the most recent audit is an automated scan.
The query is unusable, for example chain without address.
401 / 403
No key, a key that is not recognised (for example one that was replaced), or a key sent in Authorization without Bearer . Your dashboard shows the last refused call and the reason.
402
Your API credits are exhausted.
404
No project matched, or the project exists and has no published audit. The response does not tell the two apart, and no credit is used.
The card routes answer a missing project differently: see Explorer cards.
On the dashboard, Rotate key replaces your key at once. The new key is shown so you can copy it, your remaining credits move to it, and the old key stops working on this route immediately (the explorer card routes may accept it for up to 5 minutes). You can rotate once a minute.
For the project and card routes, the key is an API key belonging to an onboarded integrator or
to an active audit provider. The publishing routes accept only an audit provider's credential.
Sending no Authorization header produces 401; sending one that is not recognised produces
403.
Every issue from every audit whose findings still stand, resolved ones included - read status on each item. The name is a misnomer and predates this document; it has never filtered by status.
An earlier audit's findings are dropped only when the same provider audited the same contracts again: a re-audit supersedes its own earlier report. A different provider's findings, and findings on contracts a later audit did not cover, remain listed.
This previously covered the most recent audit only, which meant a finding disappeared as soon as any newer audit was published, whoever wrote it and whatever it covered.
True when any audit whose findings still stand reports an unresolved critical issue, or
the project has an unresolved recorded incident. It is a restatement of the data below it,
not a judgement about the project.
It tests Critical only. An unresolved High finding does not set it, and
activeHighIssuesNumber on the card routes is published so a caller can apply its own
threshold. Whether High should set this flag is an open product question, not an oversight:
the great majority of unresolved High findings on this platform are advisories the client
read and accepted.
It excludes acknowledged findings. A Critical finding with isAcknowledged: true does
not set it: the client read the finding and accepted the risk, and this flag describes
unresolved findings nobody has accepted. Such a finding is still listed in activeIssues,
as not_fixed. Acknowledgement is recorded for findings ingested from 2026-09 onward.
Optional, added 2026-10. The informational findings of the same audits - those their provider ranks below Low - each with the provider's own word in vendorSeverity. They are never in activeIssues, and IssueSeverity has no value for them. Absent when there are none, so a response without any is unchanged.
Show child attributes
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Trustblock Docs","colors":{"primary":"#751dff","light":"#751dff","dark":"#751dff"},"favicon":"https://mintcdn.com/trustblock-148e7ceb/PQpjaaQtz0mKZVmE/favicon.svg?fit=max\u0026auto=format\u0026n=PQpjaaQtz0mKZVmE\u0026q=85\u0026s=909ec134239c888e6e91137c1ccfa9a6","logo":{"light":"https://mintcdn.com/trustblock-148e7ceb/GDKwuTCVqntzgeMe/logo/light.svg?fit=max\u0026auto=format\u0026n=GDKwuTCVqntzgeMe\u0026q=85\u0026s=20992966dab6c01ec52115cd94674a00","dark":"https://mintcdn.com/trustblock-148e7ceb/GDKwuTCVqntzgeMe/logo/dark.svg?fit=max\u0026auto=format\u0026n=GDKwuTCVqntzgeMe\u0026q=85\u0026s=c0163afa1f65ea09b61d9771bdcb7490"},"api":{"openapi":"https://api.trustblock.run/openapi.yml"},"navbar":{"links":[{"label":"Contact","href":"mailto:contact@trustblock.run"}],"primary":{"type":"button","label":"Create an account","href":"https://app.trustblock.run/sign-up?from=docs"}},"seo":{"metatags":{"og:description":"The open data layer for web3 security. Who audited what, what they found, and what's still open, across security firms. Search it, embed it, or query the API.","og:image":"https://app.trustblock.run/opengraph-image","twitter:card":"summary_large_image","twitter:description":"The open data layer for web3 security. Who audited what, what they found, and what's still open, across security firms. Search it, embed it, or query the API.","twitter:image":"https://app.trustblock.run/opengraph-image"},"indexing":"navigable"},"footer":{"socials":{"x":"https://x.com/trustblockhq","discord":"https://discord.com/invite/NbdkHYXbTx","linkedin":"https://www.linkedin.com/company/trustblockhq","youtube":"https://www.youtube.com/@TrustblockHQ"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"App","href":"https://app.trustblock.run/?from=docs","icon":"arrow-right-to-arc"},{"anchor":"X","href":"https://x.com/trustblockhq","icon":"x-twitter"},{"anchor":"Discord","href":"https://discord.com/invite/NbdkHYXbTx","icon":"discord"},{"anchor":"Blog","href":"https://trustblock.run/blog","icon":"rss"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"trustblock-148e7ceb","hasAudioNarration":false,"actualSubdomain":"trustblock-148e7ceb","customDomains":["docs.trustblock.run"],"gitSource":{"type":"github","owner":"trustblock-inc","repo":"monorepo","deployBranch":"docs","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae85a6dde528214ed1f79f6","collectionId":"b0dd0caa-f85e-444c-994f-af10793a9566","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae85a6dde528214ed1f79f6"},"entitlements":{},"buildId":"6ae85a6dde528214ed1f79f6","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Technical","count":12},{"language":"default","tag":"Guides","count":10},{"language":"default","tag":"Concept","count":6},{"language":"default","tag":"Roles","count":4},{"language":"default","tag":"Endpoints","count":4},{"language":"default","tag":"Publish an audit","count":3},{"language":"default","tag":"Explorer cards","count":3},{"language":"default","tag":"Changelog","count":1},{"language":"default","tag":"Methodology","count":1}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"rbac-expansion","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":"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":"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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"technical/security-api","slug":"/technical/security-api","pageMetadata":{"title":"Security Data API","icon":"bolt","description":"A project's published audits, the findings that still stand and any recorded incidents.","openapi":"get /v1/project/security","og:image":"https://docs.trustblock.run/images/og/technical-security-api.png","twitter:image":"https://docs.trustblock.run/images/og/technical-security-api.png","href":"/technical/security-api"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"A project’s published audits, the findings that still stand and any recorded incidents.\"\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={a:`a`,code:`code`,img:`img`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Step,Steps,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`One route returns what Trustblock holds for a project: its published audits, the findings that still stand, recorded incidents and a flag that restates them.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Get your API key`,children:_jsxs(_components.p,{children:[`Sign in at `,_jsx(_components.a,{href:`https://app.trustblock.run?from=docs`,children:`app.trustblock.run`}),` with a developer account and open `,_jsx(_components.strong,{children:`Dashboard`}),` in the header. It shows your API key, your usage, your last accepted and last refused call (and why it was refused), and a button to rotate the key.\n`,_jsx(_components.img,{src:`https://ipfs.trustblock.run/ipfs/QmVpq3SwBm581cKvGweXktTSHXsgrKmfsf3Xm1z8j6dDu4/Connect.gif`,alt:`Sign in`})]})}),_jsxs(Step,{title:`Send it as a bearer token`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.trustblock.run/v1/project/security?slug=uniswap\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$TRUSTBLOCK_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Identify the project with exactly one of `,_jsx(_components.code,{children:`domain`}),`, `,_jsx(_components.code,{children:`slug`}),`, or the pair `,_jsx(_components.code,{children:`chain`}),` and `,_jsx(_components.code,{children:`address`}),`.`]}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Authorization: Bearer \u003ckey>`}),` is the header to use. Calls that send the key in the older `,_jsx(_components.code,{children:`x-trustblock-api-key`}),` header are accepted too, on this route and on `,_jsx(_components.code,{children:`/v1/key`}),`; new integrations should not use it.`]})]}),_jsxs(Step,{title:`Check your key (no credit used)`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.trustblock.run/v1/key\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$TRUSTBLOCK_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`200`}),` means the key works; the answer names the account, the header that carried the key and the credits left this month. The dashboard’s `,_jsx(_components.strong,{children:`Test my key`}),` button makes the same call.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`reading-the-response`,children:`Reading the response`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`activeIssues`}),` lists every finding from the audits whose findings still stand, fixed ones included. Read `,_jsx(_components.code,{children:`status`}),` on each item. An audit’s findings are dropped only when the same security firm audited the same contracts again.`]}),`\n`,_jsxs(_components.li,{children:[`A finding the client acknowledged without fixing keeps `,_jsx(_components.code,{children:`status: not_fixed`}),` and carries `,_jsx(_components.code,{children:`isAcknowledged: true`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`isDeemedDangerous`}),` is true when an audit whose findings still stand reports an open `,_jsx(_components.strong,{children:`critical`}),` finding, or the project has a recorded incident not marked fixed. It restates the data; it is not a judgement about the project. Acknowledged findings do not set it, and High findings do not set it.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`isAIScan`}),` is true when the most recent audit is an automated scan.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`credits-and-errors`,children:`Credits and errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Status`}),_jsx(_components.th,{style:{textAlign:`left`},children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:_jsx(_components.code,{children:`200`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`The project’s state. One API credit is used.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`The query is unusable, for example `,_jsx(_components.code,{children:`chain`}),` without `,_jsx(_components.code,{children:`address`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:[_jsx(_components.code,{children:`401`}),` / `,_jsx(_components.code,{children:`403`})]}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`No key, a key that is not recognised (for example one that was replaced), or a key sent in `,_jsx(_components.code,{children:`Authorization`}),` without `,_jsx(_components.code,{children:`Bearer `}),`. Your dashboard shows the last refused call and the reason.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:_jsx(_components.code,{children:`402`})}),_jsx(_components.td,{style:{textAlign:`left`},children:`Your API credits are exhausted.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,style:{textAlign:`left`},children:_jsx(_components.code,{children:`404`})}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`No project matched, `,_jsx(_components.strong,{children:`or`}),` the project exists and has no published audit. The response does not tell the two apart, and no credit is used.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The card routes answer a missing project differently: see `,_jsx(_components.a,{href:`/technical/explorer-cards`,children:`Explorer cards`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`rotating-your-key`,children:`Rotating your key`}),`\n`,_jsxs(_components.p,{children:[`On the dashboard, `,_jsx(_components.strong,{children:`Rotate key`}),` replaces your key at once. The new key is shown so you can copy it, your remaining credits move to it, and the old key stops working on this route immediately (the explorer card routes may accept it for up to 5 minutes). You can rotate once a minute.`]})]})}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":"Security Data API","icon":"bolt","description":"A project's published audits, the findings that still stand and any recorded incidents.","openapi":"get /v1/project/security","og:image":"https://docs.trustblock.run/images/og/technical-security-api.png","twitter:image":"https://docs.trustblock.run/images/og/technical-security-api.png","href":"/technical/security-api"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Reading the response","slug":"reading-the-response","depth":2,"children":[]},{"title":"Credits and errors","slug":"credits-and-errors","depth":2,"children":[]},{"title":"Rotating your key","slug":"rotating-your-key","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Project security"],"operationId":"getProjectSecurityState","summary":"Get a project's security state","description":"A project's published audits, the findings that still stand and any recorded incidents.","security":["e22d081f-713a-4400-892a-77eee28ab61d"],"parameters":["2c18095a-5ee6-4c23-857b-1e5d83a7d442","89394d09-a7e2-4d9d-9761-45018ae2bdf8","a4bffe0e-0bb7-466a-92c5-3fc5e62f6f04","7a562f4d-3564-4977-9fbf-386b31b3f8cf"],"responses":{"200":"22bf10e4-a923-46ab-b269-cf4e5eab1f13","400":"1b3615cf-5ed0-48d1-8027-8ed3df965ac3","401":"987510bb-4a92-4d56-8b07-247ded2ff610","402":"18dbf357-a5e6-4278-90c3-a7ce7b069ed2","403":"c59a2ecd-2e76-4601-8185-1fb1aeadc5ba","404":"ed616428-4290-458a-ab11-d060d81a4413"},"method":"get","type":"path","servers":["75b31ab2-2524-4fc3-bd64-e67acde4ccb7"],"path":"/v1/project/security","baseUrlOptions":["https://api.trustblock.run"],"title":"Get a project's security state","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"2c18095a-5ee6-4c23-857b-1e5d83a7d442":{"in":"query","name":"domain","required":false,"schema":{"type":"string","isRequired":false,"description":"The project's domain, for example `example.com`.","uniqueKey":"","typeLabel":"string"},"description":"The project's domain, for example `example.com`.","example":"uniswap.org"},"89394d09-a7e2-4d9d-9761-45018ae2bdf8":{"in":"query","name":"slug","required":false,"schema":{"type":"string","isRequired":false,"description":"The project's Trustblock slug.","uniqueKey":"","typeLabel":"string"},"description":"The project's Trustblock slug."},"a4bffe0e-0bb7-466a-92c5-3fc5e62f6f04":{"in":"query","name":"chain","required":false,"schema":{"type":"string","description":"Chain of a contract belonging to the project. Must be sent with `address`.\nThe chains Trustblock records contracts on.","enum":["ethereum","polygon","avalanche","bnbchain","arbitrum","optimism","fantom","zksync","base","polygonZkEvm","scroll","blast","starknet","solana","stellar","sui","tron","injective","ton","plume","peaq","lukso","mina","astar","vana","fiveire","zircuit","cosmoshub","osmosis","neutron","terra","sei","juno","stargaze","dymension","archway","noble","stride","persistence","xrpl","sonic","linea","monad","mantle","megaeth","gnosis","plasma","berachain","celo","hyperevm","unichain","seievm","robinhood","arc","taiko","fraxtal","abstract","worldchain","apechain","xdc","katana","stable","opbnb","bttc","memecore"],"isRequired":false,"uniqueKey":"","typeLabel":"enum\u003cstring>"},"description":"Chain of a contract belonging to the project. Must be sent with `address`."},"7a562f4d-3564-4977-9fbf-386b31b3f8cf":{"in":"query","name":"address","required":false,"schema":{"type":"string","isRequired":false,"description":"Address of a contract belonging to the project. Must be sent with `chain`.","uniqueKey":"","typeLabel":"string"},"description":"Address of a contract belonging to the project. Must be sent with `chain`."}},"responses":{"22bf10e4-a923-46ab-b269-cf4e5eab1f13":{"description":"The project's security state.","content":{"application/json":{"schema":{"type":"object","required":["name","domain","url","audits","activeIssues","activeRekts","isDeemedDangerous","isAIScan","extra"],"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"domain":{"type":"string","isRequired":true,"uniqueKey":"domain","typeLabel":"string"},"url":{"type":"string","description":"The project's page on Trustblock.","isRequired":true,"uniqueKey":"url","typeLabel":"string"},"audits":{"type":"array","description":"Every published audit of the project, most recently conducted first.","items":{"type":"object","required":["date","url","auditor","isAIScan"],"properties":{"date":{"type":"number","description":"Milliseconds since the Unix epoch, of when the audit was conducted. Not seconds: a value here is around 1.7e12, not 1.7e9.","isRequired":true,"uniqueKey":"audits.items.[INDEX].date","typeLabel":"number"},"url":{"type":"string","description":"The audit's page on Trustblock.","isRequired":true,"uniqueKey":"audits.items.[INDEX].url","typeLabel":"string"},"isAIScan":{"type":"boolean","description":"True when the audit is an automated scan rather than a human review.","isRequired":true,"uniqueKey":"audits.items.[INDEX].isAIScan","typeLabel":"boolean"},"auditor":{"type":"object","required":["name","url"],"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"audits.items.[INDEX].auditor.name","typeLabel":"string"},"url":{"type":"string","isRequired":true,"uniqueKey":"audits.items.[INDEX].auditor.url","typeLabel":"string"}},"isRequired":true,"uniqueKey":"audits.items.[INDEX].auditor","typeLabel":"object"}},"uniqueKey":"audits.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"audits","typeLabel":"object[]"},"activeIssues":{"type":"array","description":"Every issue from every audit whose findings still stand, **resolved ones included** - read `status` on each item. The name is a misnomer and predates this document; it has never filtered by status.\n\nAn earlier audit's findings are dropped only when the same provider audited the same contracts again: a re-audit supersedes its own earlier report. A different provider's findings, and findings on contracts a later audit did not cover, remain listed.\n\nThis previously covered the most recent audit only, which meant a finding disappeared as soon as any newer audit was published, whoever wrote it and whatever it covered.","items":{"type":"object","description":"An issue as classified by the provider that reported it. Trustblock does not reclassify.","required":["id","isAcknowledged","name","description","status","severity"],"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"activeIssues.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","isRequired":true,"uniqueKey":"activeIssues.items.[INDEX].description","typeLabel":"string"},"status":{"type":"string","enum":["fixed","not_fixed"],"description":"The status Trustblock publishes for a finding. A finding the client acknowledged - read, and accepted the risk of, without fixing it - is `not_fixed`, with `isAcknowledged: true` beside it.","isRequired":true,"uniqueKey":"activeIssues.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"severity":{"type":"string","enum":["low","medium","high","critical"],"isRequired":true,"uniqueKey":"activeIssues.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"id":{"type":"string","isRequired":true,"uniqueKey":"activeIssues.items.[INDEX].id","typeLabel":"string"},"isAcknowledged":{"type":"boolean","description":"True when the provider recorded that the client acknowledged the finding - read it and accepted the risk - rather than fixing it. `status` is then `not_fixed`. Recorded for findings ingested from 2026-09 onward; earlier findings carry `false` because the acknowledgement was not kept, not because none existed.\n\n**Unmeasured** (added 2026-09-26): no live response has carried this field yet.","isRequired":true,"uniqueKey":"activeIssues.items.[INDEX].isAcknowledged","typeLabel":"boolean"}},"uniqueKey":"activeIssues.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"activeIssues","typeLabel":"object[]"},"activeRekts":{"type":"array","items":{"type":"object","description":"A recorded incident of the project.","required":["name","rektAt"],"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"activeRekts.items.[INDEX].name","typeLabel":"string"},"rektAt":{"type":"number","description":"Milliseconds since the Unix epoch.","isRequired":true,"uniqueKey":"activeRekts.items.[INDEX].rektAt","typeLabel":"number"},"description":{"type":"string","uniqueKey":"activeRekts.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"activeRekts.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"activeRekts","typeLabel":"object[]"},"isDeemedDangerous":{"type":"boolean","description":"True when any audit whose findings still stand reports an unresolved **critical** issue, or\nthe project has an unresolved recorded incident. It is a restatement of the data below it,\nnot a judgement about the project.\n\n\nIt tests Critical only. An unresolved **High** finding does not set it, and\n`activeHighIssuesNumber` on the card routes is published so a caller can apply its own\nthreshold. Whether High should set this flag is an open product question, not an oversight:\nthe great majority of unresolved High findings on this platform are advisories the client\nread and accepted.\n\n\n**It excludes acknowledged findings.** A Critical finding with `isAcknowledged: true` does\nnot set it: the client read the finding and accepted the risk, and this flag describes\nunresolved findings nobody has accepted. Such a finding is still listed in `activeIssues`,\nas `not_fixed`. Acknowledgement is recorded for findings ingested from 2026-09 onward.\n","isRequired":true,"uniqueKey":"isDeemedDangerous","typeLabel":"boolean"},"isAIScan":{"type":"boolean","description":"True when the most recent audit is an automated scan rather than a human review.","isRequired":true,"uniqueKey":"isAIScan","typeLabel":"boolean"},"extra":{"type":"object","description":"Present on every response, including errors.","required":["requestId"],"properties":{"requestId":{"type":"string","description":"Quote this when reporting a problem.","isRequired":true,"uniqueKey":"extra.requestId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"extra","typeLabel":"object"},"informationalIssues":{"type":"array","description":"Optional, added 2026-10. The informational findings of the same audits - those their provider ranks below Low - each with the provider's own word in `vendorSeverity`. They are never in `activeIssues`, and `IssueSeverity` has no value for them. **Absent** when there are none, so a response without any is unchanged.","items":{"type":"object","description":"A finding its provider ranks below Low (for example \"Warning\" or \"Info\"). It is listed apart from `activeIssues`, has no `severity`, and is not counted anywhere: not in `activeIssues`, not in any count, and not in the card routes.","required":["id","name","description","status","isAcknowledged","vendorSeverity"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"informationalIssues.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"informationalIssues.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","isRequired":true,"uniqueKey":"informationalIssues.items.[INDEX].description","typeLabel":"string"},"status":{"type":"string","enum":["fixed","not_fixed"],"description":"The status Trustblock publishes for a finding. A finding the client acknowledged - read, and accepted the risk of, without fixing it - is `not_fixed`, with `isAcknowledged: true` beside it.","isRequired":true,"uniqueKey":"informationalIssues.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"isAcknowledged":{"type":"boolean","description":"As on `PublishedIssue`.","isRequired":true,"uniqueKey":"informationalIssues.items.[INDEX].isAcknowledged","typeLabel":"boolean"},"vendorSeverity":{"type":"string","description":"The provider's own word for the level, verbatim (\"Warning\", \"Info\"); \"Informational\" when the word was not kept.","isRequired":true,"uniqueKey":"informationalIssues.items.[INDEX].vendorSeverity","typeLabel":"string"}},"uniqueKey":"informationalIssues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"informationalIssues","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","domain":"\u003cstring>","url":"\u003cstring>","audits":[{"date":123,"url":"\u003cstring>","isAIScan":true,"auditor":{"name":"\u003cstring>","url":"\u003cstring>"}}],"activeIssues":[{"name":"\u003cstring>","description":"\u003cstring>","status":"fixed","severity":"low","id":"\u003cstring>","isAcknowledged":true}],"activeRekts":[{"name":"\u003cstring>","rektAt":123,"description":"\u003cstring>"}],"isDeemedDangerous":true,"isAIScan":true,"extra":{"requestId":"\u003cstring>"},"informationalIssues":[{"id":"\u003cstring>","name":"\u003cstring>","description":"\u003cstring>","status":"fixed","isAcknowledged":true,"vendorSeverity":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"1b3615cf-5ed0-48d1-8027-8ed3df965ac3":{"description":"The query is unusable - for example `chain` without `address`.","content":{"application/json":{"schema":{"type":"object","required":["message","extra"],"properties":{"message":{"type":"string","description":"A short, non-localised description of the failure.","example":"Not found.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"extra":{"type":"object","description":"Present on every response, including errors.","required":["requestId"],"properties":{"requestId":{"type":"string","description":"Quote this when reporting a problem.","isRequired":true,"uniqueKey":"extra.requestId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"extra","typeLabel":"object"},"code":{"type":"string","description":"A stable machine-readable code, where one applies.","uniqueKey":"code","typeLabel":"string"},"diagnoses":{"type":"array","description":"Field-level detail, present on validation failures.","items":{"type":"object","uniqueKey":"diagnoses.items.[INDEX]","typeLabel":"object"},"uniqueKey":"diagnoses","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Not found.","extra":{"requestId":"\u003cstring>"},"code":"\u003cstring>","diagnoses":[{}]}}},"exampleType":"generated"}},"exampleType":"generated"},"987510bb-4a92-4d56-8b07-247ded2ff610":{"description":"No `Authorization` header was sent.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"18dbf357-a5e6-4278-90c3-a7ce7b069ed2":{"description":"The caller's API credits are exhausted.","content":{"application/json":{"schema":{"type":"object","required":["message","extra"],"properties":{"message":{"type":"string","description":"A short, non-localised description of the failure.","example":"Not found.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"extra":{"type":"object","description":"Present on every response, including errors.","required":["requestId"],"properties":{"requestId":{"type":"string","description":"Quote this when reporting a problem.","isRequired":true,"uniqueKey":"extra.requestId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"extra","typeLabel":"object"},"code":{"type":"string","description":"A stable machine-readable code, where one applies.","uniqueKey":"code","typeLabel":"string"},"diagnoses":{"type":"array","description":"Field-level detail, present on validation failures.","items":{"type":"object","uniqueKey":"diagnoses.items.[INDEX]","typeLabel":"object"},"uniqueKey":"diagnoses","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Not found.","extra":{"requestId":"\u003cstring>"},"code":"\u003cstring>","diagnoses":[{}]}}},"exampleType":"generated"}},"exampleType":"generated"},"c59a2ecd-2e76-4601-8185-1fb1aeadc5ba":{"description":"The bearer token is not a recognised key.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"ed616428-4290-458a-ab11-d060d81a4413":{"description":"No project matched, **or** the project exists and has no published audit. These two cases\nare indistinguishable in the response. See the note above.\n","content":{"application/json":{"schema":{"type":"object","required":["message","extra"],"properties":{"message":{"type":"string","description":"A short, non-localised description of the failure.","example":"Not found.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"extra":{"type":"object","description":"Present on every response, including errors.","required":["requestId"],"properties":{"requestId":{"type":"string","description":"Quote this when reporting a problem.","isRequired":true,"uniqueKey":"extra.requestId","typeLabel":"string"}},"isRequired":true,"uniqueKey":"extra","typeLabel":"object"},"code":{"type":"string","description":"A stable machine-readable code, where one applies.","uniqueKey":"code","typeLabel":"string"},"diagnoses":{"type":"array","description":"Field-level detail, present on validation failures.","items":{"type":"object","uniqueKey":"diagnoses.items.[INDEX]","typeLabel":"object"},"uniqueKey":"diagnoses","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"Not found.","extra":{"requestId":"\u003cstring>"},"code":"\u003cstring>","diagnoses":[{}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e22d081f-713a-4400-892a-77eee28ab61d":{"BearerAuth":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer \u003ckey>`.\n\nFor the project and card routes, the key is an API key belonging to an onboarded integrator or\nto an active audit provider. The publishing routes accept only an audit provider's credential.\nSending no `Authorization` header produces `401`; sending one that is not recognised produces\n`403`.\n","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"75b31ab2-2524-4fc3-bd64-e67acde4ccb7":{"url":"https://api.trustblock.run","description":"Production. This is the only server."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer \u003ckey>`.\n\nFor the project and card routes, the key is an API key belonging to an onboarded integrator or\nto an active audit provider. The publishing routes accept only an audit provider's credential.\nSending no `Authorization` header produces `401`; sending one that is not recognised produces\n`403`.\n","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"`Authorization: Bearer \u003ckey>`.\n\nFor the project and card routes, the key is an API key belonging to an onboarded integrator or\nto an active audit provider. The publishing routes accept only an audit provider's credential.\nSending no `Authorization` header produces `401`; sending one that is not recognised produces\n`403`.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"https://api.trustblock.run/openapi.yml"},"subdomain":"trustblock-148e7ceb","siteName":"Trustblock Docs","title":"Security Data API - Trustblock Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T11:23:19.762Z","originalFileLocation":"technical/security-api.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=\"A project\u0026#x27;s published audits, the findings that still stand and any recorded incidents.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Trustblock 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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Security Data API - Trustblock Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"The open data layer for web3 security. Who audited what, what they found, and what\u0026#x27;s still open, across security firms. Search it, embed it, or query the API.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Trustblock Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trustblock.run/technical/security-api\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.trustblock.run/images/og/technical-security-api.png\">\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=\"Security Data API - Trustblock Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The open data layer for web3 security. Who audited what, what they found, and what\u0026#x27;s still open, across security firms. Search it, embed it, or query the API.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.trustblock.run/images/og/technical-security-api.png\">\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/trustblock-148e7ceb/KaVstqo7oNRdvaAS/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Trustblock Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#751dff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.trustblock.run/technical/security-api\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/technical/security-api.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.trustblock.run/#organization\",\"name\":\"Trustblock Docs\",\"url\":\"https://docs.trustblock.run\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/trustblock-148e7ceb/GDKwuTCVqntzgeMe/logo/light.svg?fit=max\u0026auto=format\u0026n=GDKwuTCVqntzgeMe\u0026q=85\u0026s=20992966dab6c01ec52115cd94674a00\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.trustblock.run#website\",\"name\":\"Trustblock Docs\",\"url\":\"https://docs.trustblock.run\",\"publisher\":{\"@id\":\"https://docs.trustblock.run/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.trustblock.run/technical/security-api#webpage\",\"url\":\"https://docs.trustblock.run/technical/security-api\",\"name\":\"Security Data API\",\"description\":\"A project's published audits, the findings that still stand and any recorded incidents.\",\"dateModified\":\"2026-10-22T11:23:19.762Z\",\"isPartOf\":{\"@id\":\"https://docs.trustblock.run#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trustblock.run/technical/security-api#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trustblock.run/technical/security-api#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.trustblock.run/technical/publish\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Security Data API\",\"item\":\"https://docs.trustblock.run/technical/security-api\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.trustblock.run/technical/security-api#apireference\",\"headline\":\"Security Data API\",\"name\":\"Security Data API\",\"description\":\"A project's published audits, the findings that still stand and any recorded incidents.\",\"url\":\"https://docs.trustblock.run/technical/security-api\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trustblock.run/technical/security-api#webpage\"},\"image\":\"https://docs.trustblock.run/images/og/technical-security-api.png\",\"dateModified\":\"2026-10-22T11:23:19.762Z\",\"publisher\":{\"@id\":\"https://docs.trustblock.run/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.trustblock.run#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Trustblock Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Trustblock Docs","nav":{"global":{"anchors":[{"anchor":"App","href":"https://app.trustblock.run/?from=docs","icon":"arrow-right-to-arc"},{"anchor":"X","href":"https://x.com/trustblockhq","icon":"x-twitter"},{"anchor":"Discord","href":"https://discord.com/invite/NbdkHYXbTx","icon":"discord"},{"anchor":"Blog","href":"https://trustblock.run/blog","icon":"rss"}]},"tabs":[{"tab":"Concept","pages":[{"title":"Concept","href":"/introduction"}]},{"tab":"Technical","groups":[{"group":"","pages":[{"title":"Technical Guides","icon":"code","href":"/technical/introduction"},{"title":"Supported Chains","icon":"server","href":"/technical/supported-chains"}]},{"group":"Guides","pages":[{"group":"Publish an audit","icon":"paper-plane-top","pages":[{"title":"Step by step guide","href":"/technical/publish"},{"group":"Endpoints","pages":[{"openapi":"GET /v1/auditor/upload-report-authorization","title":"Get an authorization to upload a report file","href":"/technical/endpoints/get-upload-report-authorization"},{"openapi":"post /v1/audit","title":"Publish an audit","href":"/technical/endpoints/create-a-new-audit"}]}]},{"title":"Show your record on your site","icon":"window-maximize","href":"/technical/show-your-record"},{"title":"Security firm widget","icon":"chart-pie-simple","href":"/technical/metrics-widget"},{"title":"Labels Widget","icon":"hexagon-check","description":"A label that shows a project's published audit state on your page.","href":"/technical/labels-widget"},{"title":"Security Data API","icon":"bolt","openapi":"get /v1/project/security","href":"/technical/security-api"},{"group":"Explorer cards","icon":"id-card","pages":[{"title":"Explorer cards","icon":"id-card","description":"One call per contract page: what Trustblock knows about the project behind an address, ready to render.","href":"/technical/explorer-cards"},{"group":"Endpoints","pages":[{"openapi":"GET /v1/project/etherscan-card","title":"Get a project's Etherscan card","href":"/technical/endpoints/get-etherscan-card"},{"openapi":"GET /v1/project/blockscout-card","title":"Get a project's Blockscout card","href":"/technical/endpoints/get-blockscout-card"}]}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Security Data API - Trustblock Docs","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a74be98ba7","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","zoom-image-lightbox-CLQdF-Ar.js","lightbox-handle-r17bVUz3.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}