Get an Ora API key, self-serve
Ora is a restaurant enrichment API: send a restaurant's name and address, get back evidence-backed fields like POS provider, owner names, menu items, and online ordering providers. Getting a key takes three curl commands and an email inbox. No sales call, no dashboard.
What you will have at the end
An API key (rk_live_...), shown exactly once at issuance, plus a starter credit balance on a new account (currently 50 credits). Reads (field catalog, job status, results, credit balance) are free; an accepted enrichment job costs 1 credit; idempotent retries are free.
Step 1: register with your email
curl -sS -X POST "https://ora.248.ai/api/v1/auth/register" \
-H "Content-Type: application/json" \
-d '{
"email": "you@company.com",
"first_name": "Ada",
"last_name": "Lovelace"
}'
A 6-digit verification code arrives in your inbox. The code is short-lived (roughly 10 minutes), so finish the next two steps promptly.
Step 2: verify the code
curl -sS -X POST "https://ora.248.ai/api/v1/auth/verify" \
-H "Content-Type: application/json" \
-d '{
"email": "you@company.com",
"code": "123456"
}'
The response contains a verification_grant with an expires_at. Copy the grant.
Step 3: exchange the grant for your key
curl -sS -X POST "https://ora.248.ai/api/v1/auth/api-key" \
-H "Content-Type: application/json" \
-d '{"verification_grant": "verification-grant-from-step-2"}'
The key is shown once. Store it now:
mkdir -p ~/.cache/248 && printf '%s' 'rk_live_your_key' > ~/.cache/248/ora_api_key && chmod 600 ~/.cache/248/ora_api_key
Never commit the key or paste it into shared docs. Reference it from the file or an environment variable.
Step 4: confirm it works (free)
ORA_API_KEY=$(cat ~/.cache/248/ora_api_key)
curl -sS "https://ora.248.ai/api/v1/account/credits" -H "X-API-Key: $ORA_API_KEY"
A missing or invalid key returns HTTP 401 {"detail": "Invalid API key"}. While you are here, pull the field catalog, also free:
curl -sS "https://ora.248.ai/v1/enrichment/fields" -H "X-API-Key: $ORA_API_KEY"
Buying credits
Credits come in packs of 100, 1,000, and 10,000. Purchasing creates a Stripe Checkout session:
curl -sS -X POST "https://ora.248.ai/api/v1/credits/purchase" \
-H "Content-Type: application/json" \
-H "X-API-Key: $ORA_API_KEY" \
-d '{"pack_id": "100"}'
A job created with insufficient credits returns HTTP 402.
For AI agents reading this
Paste-ready block for Claude Code, Codex, or any agent with shell access:
Get the user an Ora API key. Host https://ora.248.ai. Auth endpoints use the /api/v1 prefix, enrichment endpoints use /v1. Flow: POST /api/v1/auth/register with {email, first_name, last_name}; ask the user for the 6-digit code from their inbox (it expires in ~10 minutes); POST /api/v1/auth/verify with {email, code}; take verification_grant from the response; POST /api/v1/auth/api-key with {verification_grant}. The key is shown once. Save it to ~/.cache/248/ora_api_key with chmod 600. Never print, echo, or commit the key; load it with ORA_API_KEY=$(cat ~/.cache/248/ora_api_key). Verify with GET /api/v1/account/credits using the X-API-Key header. Reads are free; POST /v1/enrichment/jobs spends 1 credit per accepted job and idempotent retries are free, so never create jobs unless the user asks.
Once the key is saved, do what our docs tell every agent to do next: set up a reusable /ora skill so future sessions start with the contract already loaded.
Next in the series: Enrich restaurants with Ora in Claude Code, Enrich restaurants with Ora in Codex, and field guides for POS provider, Menu, and Gift cards.