Ghostwriter can use VirusTotal’s API to look up domain names in your Domain Library. If any domain name is linked to positive malware downloads or assigned an undesirable category, Ghostwriter will mark that domain as “Burned” with an explanation.The blocklist is maintained inside of the review.py module:
By default, Ghostwriter will block users from checking out and using domain names marked as burned. You can always review the status change and override it (change the status back to “Healthy”) if you feel the domain is still safe to use.If you do not have one, get a free API key from VirusTotal. The free version (VirusTotal Community / Public API) is limited to 500 requests per day and 4 requests per minute. By default, Ghostwriter sleeps for 20 seconds between requests for 3 requests per minute.If your organization has a premium API key (aka Premium API or Private API), you can change the sleep time to match the key’s configured request rate.Some older API keys may have more restrictive quotas. You can check your key’s quotas by visiting https://virustotal.com/, logging in with the account linked to the key, clicking your profile, and clicking “API Key” from the menu.
Under the VirusTotal Configuration section, check the Enable checkbox and provide your API key. Only change the Sleep Time value if your rate limit allows for faster requests.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ghostwriter Documentation","colors":{"primary":"#6D70A7","light":"#50B071","dark":"#6D70A7"},"logo":{"light":"https://mintcdn.com/specterops-2/rwxeaHvw9J2xZp6c/logo/light.svg?fit=max\u0026auto=format\u0026n=rwxeaHvw9J2xZp6c\u0026q=85\u0026s=7ba094d2f43cc72c0ed5bb0feedd46c2","dark":"https://mintcdn.com/specterops-2/rwxeaHvw9J2xZp6c/logo/dark.svg?fit=max\u0026auto=format\u0026n=rwxeaHvw9J2xZp6c\u0026q=85\u0026s=6d58f4692c9f7bfc4c03ea8f7db37fe3","href":"https://specterops.io/"},"favicon":"https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/favicon.png?fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=146677961412d6ff71d73e719e1c6c60","appearance":{"default":"light","strict":false},"background":{"decoration":"gradient"},"navbar":{"links":[{"href":"https://blog.getghostwriter.io/","label":"Learn More"},{"href":"https://code.getghostwriter.io/","label":"Get the Code"}],"primary":{"type":"button","label":"Support","href":"https://github.com/GhostManager/Ghostwriter/issues"}},"footer":{"socials":{"x":"https://twitter.com/specterops","github":"https://github.com/GhostManager/Ghostwriter","linkedin":"https://www.linkedin.com/company/specterops","slack":"https://slack.specterops.io","instagram":"https://www.instagram.com/specterops.io","youtube":"https://www.youtube.com/channel/UCWMKKqCCQkUjU8dIyiL1yhQ"}},"fonts":{"heading":{"family":"Nunito Sans","weight":900,"source":"https://fonts.gstatic.com/s/nunitosans/v15/pe0TMImSLYBIv1o4X1M8ce2xCx3yop4tQpF_MeTm0lfGWVpNn64CL7U8upHZIbMV51Q42ptCp7t1R-s.woff2","format":"woff2"}},"styling":{"codeblocks":"system","latex":false},"integrations":{"plausible":{"domain":"ghostwriter.wiki"}},"thumbnails":{"background":"https://mintcdn.com/specterops-2/0suYjBVe_0nHu2PQ/images/thumbnail.png?fit=max\u0026auto=format\u0026n=0suYjBVe_0nHu2PQ\u0026q=85\u0026s=779bd023e4a425e93f6924d3eb4b56b0"},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/GhostManager/Ghostwriter"},{"anchor":"Community","icon":"slack","href":"https://join.slack.com/t/bloodhoundhq/shared_invite/zt-1tgq6ojd2-ixpx5nz9Wjtbhc3i8AVAWw"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"specterops-2","hasAudioNarration":false,"actualSubdomain":"specterops-2","customDomains":["www.ghostwriter.wiki"],"gitSource":{"type":"github","owner":"ghostmanager","repo":"ghostwriter","deployBranch":"master","contentDirectory":"DOCS","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6acec720b0647c1021582349","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Home","count":103},{"language":"default","tag":"Features","count":66},{"language":"default","tag":"Development","count":16},{"language":"default","tag":"GraphQL API","count":14},{"language":"default","tag":"Reporting","count":14},{"language":"default","tag":"Configuring Global Settings","count":10},{"language":"default","tag":"Infrastructure Management","count":9},{"language":"default","tag":"Operation Logs","count":9},{"language":"default","tag":"Database Models","count":8},{"language":"default","tag":"Client \u0026 Project Management","count":8}]},"assistantConfig":{},"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":"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":"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":"editor-metadata","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":"configuring-global-settings/configuring-apis/configuring-virustotal","slug":"/configuring-global-settings/configuring-apis/configuring-virustotal","pageMetadata":{"title":"Configuring VirusTotal","description":"Enabling the VirusTotal API","href":"/configuring-global-settings/configuring-apis/configuring-virustotal"},"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: \"Enabling the VirusTotal API\"\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`,em:`em`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Frame,OptimizedImage}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Ghostwriter can use VirusTotal’s API to look up domain names in your Domain Library. If any domain name is linked to positive malware downloads or assigned an undesirable category, Ghostwriter will mark that domain as “Burned” with an explanation.`}),`\n`,_jsxs(_components.p,{children:[`The blocklist is maintained inside of the `,_jsx(_components.em,{children:`review.py`}),` module:`]}),`\n`,_jsx(CodeBlock,{filename:`Domain Blocklist`,numberOfLines:`15`,language:`python`,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:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` DomainReview(object`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` « snip »`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` blocklist = [`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"phishing\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"web ads/analytics\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"suspicious\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"placeholders\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pornography\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"spam\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"gambling\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"scam/questionable/illegal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"malicious sources/malnets\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`By default, Ghostwriter will block users from checking out and using domain names marked as burned. You can always review the status change and override it (change the status back to “Healthy”) if you feel the domain is still safe to use.`}),`\n`,_jsxs(_components.p,{children:[`If you do not have one, get `,_jsx(_components.a,{href:`https://developers.virustotal.com/reference`,children:`a free API key from VirusTotal`}),`. The free version (VirusTotal Community / Public API) is limited to 500 requests per day and 4 requests per minute. By default, Ghostwriter sleeps for 20 seconds between requests for 3 requests per minute.`]}),`\n`,_jsx(_components.p,{children:`If your organization has a premium API key (aka Premium API or Private API), you can change the sleep time to match the key’s configured request rate.`}),`\n`,_jsxs(_components.p,{children:[`Some older API keys may have more restrictive quotas. You can check your key’s quotas by visiting `,_jsx(_components.em,{children:_jsx(_components.a,{href:`https://virustotal.com/`,children:`https://virustotal.com/`})}),`, logging in with the account linked to the key, clicking your profile, and clicking “API Key” from the menu.`]}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-7.png?fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=9da74931d497a0ef3889871b02df0309`,alt:``,\"data-og-width\":`621`,width:`621`,\"data-og-height\":`227`,height:`227`,\"data-path\":`images/configuring-global-settings/image-7.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-7.png?w=280\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=978ec239b3534ad121dd6af259f15a06 280w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-7.png?w=560\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=8b29d3cc62278971b903748e678ece7c 560w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-7.png?w=840\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=ecb6d727596b3bbf8a8aefd297e2cab4 840w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-7.png?w=1100\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=66e96a2dea4e332c387b423d451fb168 1100w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-7.png?w=1650\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=4640a5068f74b0a41396a83249f8ec2c 1650w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-7.png?w=2500\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=f9a28d7ab8a3e9cc90c42b2213d1f47f 2500w`})}),`\n`,_jsxs(_components.p,{children:[`Under the VirusTotal Configuration section, check the `,_jsx(_components.em,{children:`Enable`}),` checkbox and provide your API key. Only change the `,_jsx(_components.em,{children:`Sleep Time`}),` value if your rate limit allows for faster requests.`]}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-8.avif?fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=f78b77c58e65bc4abe03138c51f14723`,alt:``,\"data-og-width\":`800`,width:`800`,\"data-og-height\":`343`,height:`343`,\"data-path\":`images/configuring-global-settings/image-8.avif`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-8.avif?w=280\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=4f732e89e3b45bdd2d0cb4bdab53c923 280w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-8.avif?w=560\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=03a131865fc676f74c46620368537f13 560w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-8.avif?w=840\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=0355a95bd029dda8063be3f23037b543 840w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-8.avif?w=1100\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=2d5f67c421604f67bb82fa9edeefbda0 1100w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-8.avif?w=1650\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=713798dc0681452af7032390fe413eb4 1650w, https://mintcdn.com/specterops-2/hxAceaiaqVHSIa3R/images/configuring-global-settings/image-8.avif?w=2500\u0026fit=max\u0026auto=format\u0026n=hxAceaiaqVHSIa3R\u0026q=85\u0026s=4e8df25e23b82737bb101cd33fc5372b 2500w`})})]})}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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Configuring VirusTotal","description":"Enabling the VirusTotal API","href":"/configuring-global-settings/configuring-apis/configuring-virustotal"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"subdomain":"specterops-2","siteName":"Ghostwriter Documentation","title":"Configuring VirusTotal - Ghostwriter Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-22T23:15:27.517Z","originalFileLocation":"configuring-global-settings/configuring-apis/configuring-virustotal.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=\"light\"}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=\"Enabling the VirusTotal API\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ghostwriter Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/specterops-2/xhKbu44XUXjfbp1T/_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/specterops-2/xhKbu44XUXjfbp1T/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/specterops-2/xhKbu44XUXjfbp1T/_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/specterops-2/xhKbu44XUXjfbp1T/_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/specterops-2/xhKbu44XUXjfbp1T/_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/specterops-2/xhKbu44XUXjfbp1T/_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/specterops-2/xhKbu44XUXjfbp1T/_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/specterops-2/xhKbu44XUXjfbp1T/_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/specterops-2/xhKbu44XUXjfbp1T/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Configuring VirusTotal - Ghostwriter Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Enabling the VirusTotal API\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ghostwriter Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://specterops-2.mintlify.site/_mintlify/api/og/v2?division=Configuring+APIs\u0026amp;title=Configuring+VirusTotal\u0026amp;description=Enabling+the+VirusTotal+API\u0026amp;theme=1b2d9326256b8f19fc3d10ae\u0026amp;signature=aa057137cc0e6077bfd6386c726de74cd46e382bc3f634ccedfda1e67697632b\">\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=\"Configuring VirusTotal - Ghostwriter Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Enabling the VirusTotal API\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://specterops-2.mintlify.site/_mintlify/api/og/v2?division=Configuring+APIs\u0026amp;title=Configuring+VirusTotal\u0026amp;description=Enabling+the+VirusTotal+API\u0026amp;theme=1b2d9326256b8f19fc3d10ae\u0026amp;signature=aa057137cc0e6077bfd6386c726de74cd46e382bc3f634ccedfda1e67697632b\">\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/specterops-2/xhKbu44XUXjfbp1T/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ghostwriter Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6D70A7\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/configuring-global-settings/configuring-apis/configuring-virustotal.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.ghostwriter.wiki/#organization\",\"name\":\"Ghostwriter Documentation\",\"url\":\"https://www.ghostwriter.wiki\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/specterops-2/rwxeaHvw9J2xZp6c/logo/light.svg?fit=max\u0026auto=format\u0026n=rwxeaHvw9J2xZp6c\u0026q=85\u0026s=7ba094d2f43cc72c0ed5bb0feedd46c2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.ghostwriter.wiki#website\",\"name\":\"Ghostwriter Documentation\",\"url\":\"https://www.ghostwriter.wiki\",\"publisher\":{\"@id\":\"https://www.ghostwriter.wiki/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal#webpage\",\"url\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal\",\"name\":\"Configuring VirusTotal\",\"description\":\"Enabling the VirusTotal API\",\"dateModified\":\"2026-01-22T23:15:27.517Z\",\"isPartOf\":{\"@id\":\"https://www.ghostwriter.wiki#website\"},\"breadcrumb\":{\"@id\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Configuring Global Settings\",\"item\":\"https://www.ghostwriter.wiki/configuring-global-settings/introduction-to-command-center\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Configuring APIs\",\"item\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Configuring VirusTotal\",\"item\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal#article\",\"headline\":\"Configuring VirusTotal\",\"name\":\"Configuring VirusTotal\",\"description\":\"Enabling the VirusTotal API\",\"url\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal\",\"mainEntityOfPage\":{\"@id\":\"https://www.ghostwriter.wiki/configuring-global-settings/configuring-apis/configuring-virustotal#webpage\"},\"dateModified\":\"2026-01-22T23:15:27.517Z\",\"publisher\":{\"@id\":\"https://www.ghostwriter.wiki/#organization\"},\"isPartOf\":{\"@id\":\"https://www.ghostwriter.wiki#website\"}}]}\u003c/script>","siteName":"Ghostwriter Documentation","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/GhostManager/Ghostwriter"},{"anchor":"Community","icon":"slack","href":"https://join.slack.com/t/bloodhoundhq/shared_invite/zt-1tgq6ojd2-ixpx5nz9Wjtbhc3i8AVAWw"}]},"tabs":[{"tab":"Home","groups":[{"group":"Home","pages":[{"title":"Welcome to Ghostwriter","href":"/home"}]},{"group":"Getting Started","pages":[{"title":"Quickstart","href":"/getting-started/quickstart"},{"title":"Populating a Demo Database","href":"/getting-started/populating-a-demo-database"},{"title":"Updating Ghostwriter","href":"/getting-started/updating-ghostwriter"},{"group":"Managing the Server with Ghostwriter CLI","pages":[{"title":"Managing the Server with Ghostwriter CLI","sidebarTitle":"Overview","href":"/getting-started/managing-the-server-with-ghostwriter-cli"},{"title":"Managing Logon Sessions","href":"/getting-started/managing-the-server-with-ghostwriter-cli/managing-logon-sessions"},{"title":"Creating and Managing Backups","href":"/getting-started/managing-the-server-with-ghostwriter-cli/creating-and-managing-backups"}]}]},{"group":"Features","pages":[{"group":"Access, Authentication, \u0026 Session Controls","pages":[{"title":"Access, Authentication, \u0026 Session Controls","sidebarTitle":"Overview","href":"/features/access-authentication-and-session-controls"},{"title":"User Profile and Tokens","href":"/features/access-authentication-and-session-controls/user-profile-and-tokens"},{"title":"Single Sign-On","href":"/features/access-authentication-and-session-controls/single-sign-on"},{"title":"Multi-Factor Authentication","href":"/features/access-authentication-and-session-controls/multi-factor-authentication"},{"title":"Role-Based Access Controls","href":"/features/access-authentication-and-session-controls/role-based-access-controls"},{"title":"Session Management","href":"/features/access-authentication-and-session-controls/session-management"}]},{"group":"Client \u0026 Project Management","pages":[{"title":"Overview","href":"/features/client-and-project-management"},{"title":"Client Dashboard","href":"/features/client-and-project-management/client-dashboard"},{"group":"Project Dashboard","pages":[{"title":"Overview","href":"/features/client-and-project-management/project-dashboard"},{"title":"Project Points of Contact \u0026 Assignments","href":"/features/client-and-project-management/project-dashboard/project-points-of-contact-and-assignments"},{"title":"Scope Tracking","href":"/features/client-and-project-management/project-dashboard/scope-tracking"},{"title":"Objective Tracking","href":"/features/client-and-project-management/project-dashboard/objective-tracking"},{"title":"Deconfliction Tracking","href":"/features/client-and-project-management/project-dashboard/deconfliction-tracking"},{"title":"White Card Tracking","href":"/features/client-and-project-management/project-dashboard/white-card-tracking"}]}]},{"group":"Findings Library","pages":[{"title":"Overview","href":"/features/findings-library"},{"title":"Populating the Findings Library","href":"/features/findings-library/populating-the-findings-library"},{"title":"Template Values for Findings","href":"/features/findings-library/finding-keywords"}]},{"title":"Observations Library","href":"/features/observations-library"},{"group":"Infrastructure Management","pages":[{"title":"Infrastructure Management","sidebarTitle":"Overview","href":"/features/infrastructure-management"},{"group":"Server Management","pages":[{"title":"Server Management","sidebarTitle":"Overview","href":"/features/infrastructure-management/server-management"},{"title":"Populating the Server Library","href":"/features/infrastructure-management/server-management/populating-the-server-library"},{"title":"Server Checkout","href":"/features/infrastructure-management/server-management/server-management"},{"title":"Monitoring Servers","href":"/features/infrastructure-management/server-management/monitoring-servers"}]},{"group":"Domains Management","pages":[{"title":"Domains Management","sidebarTitle":"Overview","href":"/features/infrastructure-management/domains-management"},{"title":"Populating the Domain Library","href":"/features/infrastructure-management/domains-management/populating-the-domain-library"},{"title":"Domain Checkout","href":"/features/infrastructure-management/domains-management/domain-checkout-1"},{"title":"Monitoring Domains","href":"/features/infrastructure-management/domains-management/monitoring-domains"}]}]},{"group":"Operation Logs","pages":[{"title":"Overview","href":"/features/operation-logs"},{"title":"Creating a New Operation Log","href":"/features/operation-logs/creating-a-new-oplog"},{"title":"Interacting with the Operation Log Table","href":"/features/operation-logs/create-a-new-entry"},{"title":"Generating Attack Path Narrative Outlines","href":"/features/operation-logs/generating-narrative-outlines"},{"title":"Linking Evidence to Log Entries","href":"/features/operation-logs/linking-evidence-to-entries"},{"title":"Attaching Terminal Recordings to Log Entries","href":"/features/operation-logs/attaching-terminal-recordings"},{"title":"Setting up Automated Logging","href":"/features/operation-logs/setting-up-automated-logging"},{"title":"Exporting / Importing Operation Logs","href":"/features/operation-logs/exporting-importing-oplogs"},{"title":"Auditing Log Sanitization","href":"/features/operation-logs/auditing-oplogs"}]},{"group":"Reporting","pages":[{"title":"Reporting","sidebarTitle":"Overview","href":"/features/reporting"},{"group":"Collaborative Editor","pages":[{"title":"Overview","href":"/features/reporting/collaborative-editing"},{"title":"Editor Features","href":"/features/reporting/collaborative-editor/editor-features"}]},{"group":"Report Types","pages":[{"title":"Overview","href":"/features/reporting/report-types"},{"title":"Word Document Customization","href":"/features/reporting/report-types/word-document-customization"},{"title":"PowerPoint Deck Customization","href":"/features/reporting/report-types/powerpoint-deck-customization"},{"title":"Excel Spreadsheet Customization","href":"/features/reporting/report-types/excel-spreadsheet-customization"}]},{"group":"Report Templates","pages":[{"title":"Report Templates","sidebarTitle":"Overview","href":"/features/reporting/report-templates"},{"title":"Report Template Linting","href":"/features/reporting/report-templates/report-template-linting"},{"title":"Word Template Variables \u0026 Filters","href":"/features/reporting/report-templates/word-template-variables"},{"title":"Word Template Styles","href":"/features/reporting/report-templates/word-template-styles"},{"title":"Troubleshooting Word Templates","href":"/features/reporting/report-templates/troubleshooting-word-templates"}]},{"title":"Templating and Rich Text Fields","href":"/features/reporting/templating-and-rich-text-fields"},{"title":"Jinja2 Tips \u0026 Tricks","href":"/features/reporting/jinja2-tips-and-tricks"}]},{"group":"BloodHound Integration","pages":[{"title":"Overview","href":"/features/bloodhound-integration-overview"},{"title":"Configuring BloodHound","href":"/features/bloodhound-integration/configuring-bloodhound"},{"title":"Viewing \u0026 Managing BloodHound Data","href":"/features/bloodhound-integration/managing-bloodhound-data"},{"title":"Differences Between BHCE and BHE","href":"/features/bloodhound-integration/differences-between-bhce-and-bhe"},{"title":"Accessing BloodHound Data in Reports","href":"/features/bloodhound-integration/bloodhound-data-in-reports"}]},{"group":"Background Tasks","pages":[{"title":"Overview","href":"/features/background-tasks"},{"title":"Scheduling Tasks","href":"/features/background-tasks/scheduled-tasks"},{"title":"Prebuilt Tasks","href":"/features/background-tasks/prebuilt-tasks"}]},{"title":"Health Monitoring","href":"/features/health-monitoring"}]},{"group":"Configuring Global Settings","pages":[{"title":"Introduction to Command Center","sidebarTitle":"Overview","href":"/configuring-global-settings/introduction-to-command-center"},{"title":"Personalizing Company Information","href":"/configuring-global-settings/personalizing-company-information"},{"title":"Configuring Global Report Options","href":"/configuring-global-settings/configuring-global-report-options"},{"title":"Configuring the Announcement Banner","href":"/configuring-global-settings/configuring-the-announcement-banner"},{"group":"Configuring APIs","pages":[{"title":"Overview","href":"/configuring-global-settings/configuring-apis"},{"title":"Configuring Slack","description":"Enabling Slack WebHooks for notifications","href":"/configuring-global-settings/configuring-apis/configuring-slack"},{"title":"Configuring VirusTotal","href":"/configuring-global-settings/configuring-apis/configuring-virustotal"},{"title":"Configuring Namecheap","description":"Enabling the Namecheap API","href":"/configuring-global-settings/configuring-apis/configuring-namecheap"},{"title":"Configuring Cloud Services","href":"/configuring-global-settings/configuring-apis/configuring-cloud-services"}]},{"title":"Configuring Extra Fields","href":"/configuring-global-settings/configuring-extra-fields"}]},{"group":"Getting Help","pages":[{"title":"Overview","href":"/getting-help/faq"},{"title":"Reporting a Problem","href":"/getting-help/getting-help-with-a-problem"},{"title":"Reporting a Security Issue","href":"/getting-help/reporting-a-security-issue"}]},{"group":"Workflow \u0026 Usage","pages":[{"title":"The Workflow","sidebarTitle":"Overview","href":"/workflow/basic-usage"},{"group":"The Workflow","pages":[{"title":"The Workflow","sidebarTitle":"Overview","href":"/workflow/basic-usage"},{"title":"Finding Edit \u0026 Review Workflow","href":"/workflow/basic-usage/finding-review-workflow"}]}]},{"group":"Coding Style Guide","pages":[{"title":"Overview","href":"/coding-style-guide/style-guide"},{"title":"UI Refresh Design System","sidebarTitle":"UI Refresh","href":"/coding-style-guide/ui-refresh-design-system"},{"group":"Form Layouts \u0026 Design","pages":[{"title":"Form Layouts \u0026 Design","sidebarTitle":"Overview","href":"/coding-style-guide/form-layouts-and-design"},{"title":"Formset Layout \u0026 Design","href":"/coding-style-guide/form-layouts-and-design/formset-layout-and-design"},{"title":"Custom Layout Objects","href":"/coding-style-guide/form-layouts-and-design/custom-layout-objects"}]}]},{"group":"Development","pages":[{"title":"Overview","href":"/development/stack-overview"},{"group":"Stack Overview","pages":[{"title":"Overview","href":"/development/stack-overview"},{"title":"Behind the Scenes","href":"/development/stack-overview/behind-the-scenes"}]},{"group":"Modifying Code","pages":[{"title":"Overview","href":"/development/modifying-code"},{"title":"Modifying Environment Variables","href":"/development/modifying-code/modifying-environment-variables"}]},{"title":"Testing Code","href":"/development/testing-code"},{"group":"Contributing to the Project","pages":[{"title":"Contributing to the Project","sidebarTitle":"Overview","href":"/development/contributing-to-the-project"},{"title":"Pre-Release Checklist","href":"/development/contributing-to-the-project/pre-release-checklist"}]},{"group":"Database Models","pages":[{"title":"Database Models","sidebarTitle":"Overview","href":"/development/database-models"},{"title":"API Models","href":"/development/database-models/api-models"},{"title":"Client \u0026 Project Models","href":"/development/database-models/rolodex-models"},{"title":"Configuration Models","href":"/development/database-models/configuration-models"},{"title":"Home \u0026 User Models","href":"/development/database-models/home-models"},{"title":"Infrastructure Models","href":"/development/database-models/infrastructure-models"},{"title":"Oplog Models","href":"/development/database-models/oplog-models"},{"title":"Reporting Models","href":"/development/database-models/reporting-models"}]},{"title":"Expected Services \u0026 Processes","href":"/development/expected-services-and-processes"}]}]},{"tab":"GraphQL API","pages":[{"title":"GraphQL API","href":"/features/graphql-api/graphql-api"}]}]},"basePath":"","title":"Configuring VirusTotal - Ghostwriter Documentation","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DvzxQbD0.js","DynamicMarkdown-mQG_iQiE.js","zoom-image-lightbox-BFbLClTf.js","lightbox-handle-r17bVUz3.js"]}