Guides / Getting started
Getting started · about 10 min
Call the API from your code
Create an API key, keep it out of your code, send your first request and handle the answer, in the language you use.
- An organization with a positive balance.
- One of: curl, Python 3.8+, Node 18+, PHP, Go, Java, .NET or Ruby.
Create an API key
Go to API Keys → Create key, give it a name (for example laptop or production) and copy it. It starts with
jev_sk_and is shown only once. Keys belong to your organization and share its rate limits and balance.Store it in an environment variable
Never paste the key into code. Put it in
JEV_API_KEY:# macOS / Linux (add it to ~/.zshrc or ~/.bashrc to keep it) export JEV_API_KEY="jev_sk_…" # Windows (then open a new terminal) setx JEV_API_KEY "jev_sk_…"
Send a request
Every request is a
POSTtohttps://oramodel.com/v1/systemonewithAuthorization: Bearer <key>and a JSON body ofmodel,stateandquestions. This one asks two questions about Tesla using only its symbol:Requires curl 7.76+. Save as run.sh, then: bash run.shcurl -sS https://oramodel.com/v1/systemone \ -H "Authorization: Bearer $JEV_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "ora1", "state": { "symbol": "TSLA" }, "questions": { "up_week": { "type": "yes_no", "instructions": "Will the stock be higher in a week?" }, "drop5": { "type": "yes_no", "instructions": "Will it drop at least 5% at some point in the next month?" } } }'Read the response
A
200response has the model that answered, one answer per question, what you were billed and, for a symbol request, which session's data was used:{ "model": "ora1", "version": "ora1-fin-0.1.1", "answers": { "up_week": { "type": "yes_no", "yes_no": 0.487 }, "drop5": { "type": "yes_no", "yes_no": 0.638 } }, "usage": { "input_tokens": 327, "output_tokens": 8 }, "context": { "source": "server", "symbol": "TSLA", "as_of": "2026-10-30" } }Log
modelwith each decision. Your numbers will differ: they change with each session.Use the answer in your code
Answers are numbers, so decisions are plain comparisons:
a = data["answers"] if a["drop5"]["yes_no"] >= 0.6: reduce_position("TSLA") elif a["up_week"]["yes_no"] >= 0.6: add_to_watchlist("TSLA")Handle errors
Non-200 responses carry
{"detail": …}. Retry429(afterRetry-Afterseconds) and503; fix the request on400/422; check the key on401and the balance on402. See Handle errors and retries.
What's next
- Handle errors, rate limits and retries
- Send a Slack alert when a rule fires
- API reference: POST /v1/systemone