Ora
All guides All guides

Getting started

Your first decision in the Playground Call the API from your code Save, share and reuse queries

Financial decisions

Decide on a stock with just its symbol Read probabilities and choose thresholds

Automation

Send a Slack alert when a rule fires Send decisions to your own system Run a watchlist every day after the close

Production

Handle errors, rate limits and retries

Use cases

Tag financial news for trading signalsGuardrails for LLM appsSupport ticket triage and routingFilter retrieved passages before your LLM answersVerify claims and citations against a source

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.

You'll need
  • An organization with a positive balance.
  • One of: curl, Python 3.8+, Node 18+, PHP, Go, Java, .NET or Ruby.
  1. 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.

  2. 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_…"
  3. Send a request

    Every request is a POST to https://oramodel.com/v1/systemone with Authorization: Bearer <key> and a JSON body of model, state and questions. This one asks two questions about Tesla using only its symbol:

    Requires curl 7.76+. Save as run.sh, then: bash run.sh
    curl -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?"
        }
      }
    }'
  4. Read the response

    A 200 response 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 model with each decision. Your numbers will differ: they change with each session.

  5. 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")
  6. Handle errors

    Non-200 responses carry {"detail": …}. Retry 429 (after Retry-After seconds) and 503; fix the request on 400/422; check the key on 401 and the balance on 402. See Handle errors and retries.

What's next

Create an account Open the Playground Everything here also lives in the console, next to your keys and usage.