Foundations

Writing

Voice and tone rules, plus the microcopy registry, formatter library, and error catalog that back every piece of text in the product.

Voice & tone

Concise

Say the one thing that matters. Cut qualifiers and throat-clearing.

Active

"Your key was revoked," not "Your key has been revoked by the system."

User-centric

Describe what the user can do next, not what the system did internally.

Never blame

A validation error is a mismatch to fix, not a mistake the user made.

Match intent

This reads like infra documentation, not marketing — developers trust precision over enthusiasm.

Microcopy registry

Sample keys and values from lib/copy.ts.

CategoryKeyValue
emptyStatesnoSearchRequestsNo search requests yet
emptyStatesnoApiKeysNo API keys yet — create one to start making requests
emptyStatesnoActivityNothing has happened here yet
emptyStatesnoResultsNo results match your filters
confirmationsdeleteApiKeyThis will immediately revoke the key. Any service using it will start failing.
confirmationsdeleteWebhookThis endpoint will stop receiving events immediately.
confirmationsdowngradePlanYour QPS limit will drop at the start of the next billing cycle. Existing requests won't be interrupted.
confirmationsleaveWithUnsavedChangesYour changes haven't been saved. Leaving now will discard them.
ctasprimaryStart Building
ctassecondaryView Docs
ctasupgradeUpgrade for higher QPS
ctascreateApiKeyCreate API key
ctasretryRequestRetry request
tooltipslatencyP50Median response time across the last 1,000 requests
tooltipsqpsQueries per second currently provisioned for this key
tooltipsdeepSearchMulti-hop retrieval across sources — higher latency, higher recall
tooltipsfreshnessIndexHow recently this result was crawled or re-indexed
onboardingwelcomeTitleYou're ready to make your first call
onboardingapiKeyStepGrab your API key from the dashboard — it's shown once, so copy it now
onboardingfirstRequestStepSend a request to /v1/search with a query and mode
onboardinginviteTeamStepInvite teammates to share usage and billing on one workspace

Formatters

Every row is a live call into lib/format.ts — not hardcoded output.

FunctionInputOutput
formatMoney284112$2,841.12
formatMoney (compact)128492000, { compact: true }$1.3M
formatNumber12849201,284,920
formatPercent0.99799.7%
formatBytes15361.50 KB
formatBytes184320000176 MB
formatDate2026-07-20T09:14:00.000ZJul 20, 2026
formatTime2026-07-20T09:14:00.000Z9:14 AM
formatDateTime2026-07-20T09:14:00.000ZJul 20, 2026, 9:14 AM
formatRelativeTime2026-07-20T09:14:00.000Z, now=2026-08-032 weeks ago
formatDateRange2026-07-20T09:14:00.000Z → 2026-07-24T17:40:00.000ZJul 20–24, 2026
formatDuration340340ms
formatDuration920001m 32s
formatDuration5_430_0001h 30m
formatList["Deep Search", "Web Search", "Web Chat"]Deep Search, Web Search, and Web Chat
initials"Sarah Chen"SC

Error catalog

Every entry in lib/errors.ts.

CodeTitleBodyCTA
UNAUTHORIZEDSign in requiredYour session has expired or your API key is missing. Sign in again or attach a valid key.Sign in
FORBIDDENYou don't have access to thisYour account or API key doesn't have permission for this resource. Ask a workspace admin to grant access.Request access
NOT_FOUNDWe couldn't find thatThis search request, key, or resource doesn't exist — it may have been deleted or the ID is wrong.
RATE_LIMITEDYou've hit your rate limitYour API key is provisioned for a fixed QPS. Slow down your request rate or upgrade for higher throughput.Upgrade for higher QPS
CONFLICTThat already existsA resource with this name or identifier already exists in your workspace. Choose a different one.
TIMEOUTThe request timed outAn upstream source didn't respond in time. This is usually transient — retrying often succeeds.Retry request
SERVER_ERRORSomething went wrong on our endWe hit an unexpected error processing this request. Our team has been notified automatically.Retry request
VALIDATION_ERRORCheck your requestOne or more fields are missing or malformed. Review the request body against the API reference.View Docs