---
title: "Find exposed LLM and AI provider API keys"
method: POST
path: "/v1/metered/llm-credential-exposure"
tags: ["Secrets and non-human identity"]
---

# Find exposed LLM and AI provider API keys

`POST /v1/metered/llm-credential-exposure`

## Request

- Base URL: `https://api.relayshield.net`
- URL: `https://api.relayshield.net/v1/metered/llm-credential-exposure`
- Auth: one of:
  - API key in header `X-RS-API-KEY`
  - HTTP bearer

The LLMjacking case: a stolen inference key is an uncapped billing liability, not just a data exposure. Covers 14 providers including OpenAI, Anthropic, Google Gemini, xAI, Amazon Bedrock, Groq, Replicate, LangSmith, Hugging Face, NVIDIA NIM, DeepSeek, Moonshot, Qwen and Alibaba Cloud -- four of which the most widely deployed open-source secret scanner ships no detection rules for at all.

Available pay-per-call on any metered key at $0.40, or under a dedicated unlimited license ($39/mo or $399/yr) that covers this endpoint only.

**Billing.** $0.40 per successful call. Failed calls are never billed. Charged against prepaid credits when the balance covers it, otherwise metered to your card. Threat Intelligence subscribers and AWS Marketplace bundle customers call this at no extra charge.

**Note.** A clean result is scoped, not absolute: this covers keys with a recognisable LLM-provider format. An exposed AWS key with Bedrock access also enables LLMjacking and surfaces under nhi-exposure instead.

## Request body

- object: At least one of: `domain`, `vendor_domains`.
  - `domain` string: Your own domain.
  - `vendor_domains` string[]: Additional supply-chain domains.

## Response `200`

Success. `ok` is true and `data` holds the result.

- object
  - `ok` true, required
  - `data` object, required
    - `domains_checked` integer: Domains scanned. Capped at 10 after deduplication.
    - `found` boolean: True when at least one key was found.
    - `findings` object[]: Findings, sorted most severe first.
      - `domain` string: Domain the finding was matched against.
      - `type` string: Credential type.
      - `llm_provider` string: Provider the key belongs to, e.g. openai, anthropic, deepseek.
      - `description` string: What the key grants.
      - `severity` 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW': Severity.
      - `preview` string: Redacted context. Never the key value.
      - `source` string: Channel or archive the record came from.
      - `ingested_at` string: When RelayShield ingested the record.
    - `highest_severity` 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW' | 'null', nullable: Highest severity found. null when none.
    - `providers_affected` string[]: Distinct providers with an exposed key, sorted.
    - `recommendation` string: Remediation text.
    - `checked_at` string, date-time: ISO 8601 UTC timestamp of when this check ran.

## Other responses

- `400`: Neither `domain` nor `vendor_domains` supplied.
- `401`: Missing or invalid API key.
- `402`: No credits and no active subscription. The response carries `topup_url`.
- `405`: Wrong HTTP method. Every endpoint is POST.

---

[API](https://skmtc.dev/relayshield/apis/relayshield-api.md) · [All operations](https://skmtc.dev/relayshield/apis/relayshield-api/llms.txt) · [OpenAPI document](https://skmtc.dev/relayshield/apis/relayshield-api/revisions/4d4721b936dd?raw)
