Skip to main content

Documentation Index

Fetch the complete documentation index at: https://www.rhetoricaudit.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

The Rhetoric Audit API does not use HTTP authorization headers. Instead, you identify yourself by including userId or deviceId directly in the JSON request body. The API resolves your access tier from those fields, checks your daily quota or credit balance, and either processes the request or returns an appropriate error.
This API is primarily designed for the Rhetoric Audit Chrome extension and web dashboard. If you are building a third-party integration, pass a stable client-generated UUID as deviceId. Do not generate a new UUID per request — the daily quota is tracked per device, so a rotating deviceId will exhaust the anonymous limit immediately.

Identity fields

userId
string
Your Rhetoric Audit user ID. Obtain this from Dashboard → Settings or by reading the id field from your Supabase session token. When present, the API checks your credit balance to determine your tier.
deviceId
string
A client-generated UUID that identifies your device or application. Required when you do not have a userId. The Chrome extension stores this in chrome.storage and sends it with every request. At least one of userId or deviceId must be present.

Access tiers

TierHow it is resolvedDaily limitCredit cost
anondeviceId only, no userId10 requests/day
signed_freeuserId present, credits balance = 050 requests/day
paiduserId present, credits balance > 0Unlimited1 credit per cache miss
Cache hits are free at every tier and are never counted toward your daily quota.

Getting your userId

  1. Log in at rhetoricaudit.com.
  2. Go to Dashboard → Settings.
  3. Copy your user ID from the account details section.
Alternatively, your user ID is embedded in your session token — check the account details section of your dashboard settings for the exact value.

Error responses

400 — Missing identity

If you send a request without either userId or deviceId, the API responds:
{
  "error": "Missing identity — expected userId or deviceId"
}

429 — Rate limit exceeded

{
  "error": "Anonymous daily limit reached. Sign up for 50 scans/day.",
  "rateLimited": true,
  "tier": "anon",
  "limit": 10,
  "used": 10,
  "resetAt": "2026-05-10T00:00:00.000Z"
}
rateLimited
boolean
Always true on a 429 response.
tier
string
The tier that was rate-limited: anon or signed_free.
limit
number
The daily limit for this tier.
used
number
How many cache-miss requests you have made today.
resetAt
string
ISO 8601 timestamp of the next quota reset (always UTC midnight).
Cache hits never consume quota. If you repeatedly analyze the same URL, subsequent requests return instantly from cache at no cost and are not counted against your daily limit.