Skip to content
Salyro
Tool

API-key leak scanner

Scan code, .env files, configs and logs in your browser for AI-provider keys, Salyro keys and cloud tokens, by file and line, values masked, with next steps.

What it does

Open several local files at once — an .env, a config, source code, a CI log — or paste text. The scanner lists every credential it recognises: the file, the line and column, what kind of credential it is, and where that shape is known from. For each issuer it found, it says what to do next.

The value is always masked. A finding shows at most the key's public prefix, such as sk-ant-api, and its length. A value with no public prefix shows at most its first three characters, and only when it is at least 20 characters long.

What stays in your browser

The files are read in your browser and never uploaded. They are not put in the address, a share link or browser storage, and analytics never learns what was found. A share link to this tool holds only its three settings. Large files are scanned in a background worker in the same page.

What it recognises

  • Salyro: API keys (sk-sly-…) and Gateway MCP Expose access and refresh tokens (mcpx_…, mcxr_…), from the definitions Salyro issues them with.
  • AI providers: Anthropic API keys (sk-ant-api…) and Admin API keys (sk-ant-admin01-…) as Anthropic's pages describe them; other sk-, pk- and rk- keys, a shape Salyro's log redactor recognises and several services use; Google AIza… keys; Hugging Face tokens.
  • Cloud and code hosting: AWS access key ids, GitHub and GitLab tokens, Slack tokens, npm and Stripe tokens.
  • Anywhere: PEM and PGP private keys (-----BEGIN … PRIVATE KEY-----, written out, with \n escapes as in a service account's JSON, or cut off before their END line), JSON Web Tokens, Bearer and Basic credentials, a password or token in an address, and a value under a credential's name — OPENAI_API_KEY=…, DB_PASSWORD="…", export TOKEN='…', password = "…", const apiKey = "…", "password": "…" with its JSON escapes. A ${VARIABLE} reference is not a finding.
  • Random-looking strings, if you switch it on. A heuristic, labelled as one.

A value that reads like a placeholder someone left in, such as your-key-here, is marked, and can be hidden.

What to do with a finding

  • A Salyro key: issue a replacement on the same gateway, deploy it, then revoke the leaked key. If it is public and may be in use, revoke first. The whole procedure is in Respond to a leaked API key.
  • An MCP Expose token: revoke the connection it belongs to on the gateway's MCP Expose connections screen. Both of its tokens stop working at once.
  • An Anthropic key: disable or delete it on the Claude Console's API keys page. Disable can be undone; Delete cannot. This is quoted from Anthropic's authentication page, with the date it was read.
  • Any other issuer: revoke or rotate it where it was issued, and replace it wherever it is used. Their pages could not be read when this tool was built, so the scanner does not describe their steps.

Removing a key from a file does not un-leak it. Once it has been committed, pushed or printed, revoke it.

What it does not know

  • Whether a key works. Checking would mean sending it to its issuer, which a tool that runs only in your browser never does. A finding means the text looks like a credential.
  • Which provider an sk- key belongs to, unless its prefix is documented: several services use that shape.
  • The key formats of OpenAI, Google, xAI, AWS, GitHub, GitLab, Slack, npm, Stripe and Hugging Face, from their own pages: those could not be read. Their shapes are the ones Salyro's detector recognises, and are shown as not verified. An xAI key is found only by the name it sits under, or by the heuristic.
  • A credential with no known shape under a name that does not say what it is, or inside markup such as <password>…</password>, and the lines after the first of a quoted value that runs over several lines.
  • A repository at an address. The scanner reads what you give it; it does not fetch anything.

Sources

  • Salyro's key and token formats: @salyro/types, the package the engine issues them from. The credential shapes start with the list Salyro's own log redactor uses.
  • Anthropic: the authentication and Admin API key pages on platform.claude.com, recorded as Reference Data with the date they were read.
  • Every other issuer is recorded as unknown, with the page that was tried and the date.

Where the numbers come from

  • Facts about models and providers that are not in that catalogue carry their own source and the date they were checked, and are shown as unknown where no reliable source exists.