Authentication
View as MarkdownHow API keys work: creating one, sending it, rotating it, and what happens when one leaks. Keys are shown once and hashed at rest.
One credential: an API key, sent as a bearer token on every request. There is no OAuth dance, no signing, and no session. A key is minted on purpose, carried on purpose, and revoked on its own.
Sending a key
curl https://www.refolk.ai/api/v1/credits \
-H "Authorization: Bearer $REFOLK_API_KEY"X-Api-Key is accepted as well, with the bare key as its value. It exists
because a fair number of HTTP clients and MCP configurations only give you a
plain header field to fill in, and refusing that spelling buys nothing.
Why not a session cookie
Session cookies are deliberately not accepted on the API. A cookie is authority your browser attaches on its own, to any request that happens to be aimed at this domain, whether or not you asked for it. That is fine for a page you are looking at and wrong for an endpoint reachable from anywhere. A key is only ever sent because something chose to send it.
The same reasoning is why the playground has nowhere to paste a key: it runs on your session and prints the curl you would run with your key, rather than teaching you to put a live credential into a text box in a web page.
Creating, listing, and revoking
All three live on the API page. An account may hold 10 live keys at once, which is enough for one per integration and few enough that the list stays readable.
| Property | Behaviour |
|---|---|
| Visibility | Shown once, at creation. Only a hash is stored. |
| Prefix | rfk_live_, so a leaked key is recognisable as one. |
| Revocation | Immediate, on the next request. |
| Blast radius | One key. Revoking does not touch the others or sign you out. |
| Last used | Stamped on every call, so a stale key is visible in the list. |
Rotating a key
Create the new one first, deploy it, confirm the traffic has moved by watching the last-used timestamps in settings, then revoke the old one. Doing it in that order means there is never a moment when the integration has no working credential.
If a key leaks
Revoke it. That is the whole procedure, and it is immediate.
Keys carry the rfk_live_ prefix so a key pasted into a public repository, a
log line, or a support ticket is recognisable as one at a glance, by a person
and by the secret scanners that watch public code. If you think a key has been
used by someone else, check the balance and write to
hello@refolk.ai.
Try it on the search you came here for
Stop building boolean strings. Just describe the person.
Type one sentence. I plan the search, read GitHub, public LinkedIn and Crunchbase records, and the open web as it is right now, and hand back a ranked list with the reason next to every name.
01Describe them
One plain sentence. Role, city, stack, stage, whatever matters to you.
02I read the web live
GitHub, public LinkedIn and Crunchbase records, the open web. Not a database that went stale last quarter.
03You read the shortlist
Ranked, with the reasoning under every name. Open a profile, ask a follow-up, narrow it down.
- Staff backend engineers in NYC who shipped Rust in production
- Series A fintechs in SF under 50 people, growing headcount this year
- Maintainers of fast-growing Rust web frameworks on GitHub
- No boolean, no filters, no seat to buy. One box.
- Read at search time, so a profile updated yesterday counts today.
- Every step visible as it runs, every name with its reason.
500 free credits on sign-up. No card, no demo call. See real searches.