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 Write your own rule Read probabilities and choose thresholds

Rule playground

From English to rule Combining conditions Offsets and windows Reading beliefs Rules plus forecasts in one request Turning a rule into an alert or workflow

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

Cookbooks

All cookbooks Rank a watchlist by probability Send a pre-open digest Trend filter plus entry trigger Breakout confirmation with volume RSI and Bollinger mean-reversion checks Gap-fill playbook to your order system Confidence-gated actions Detect two-way risk Size positions by volatility regime Risk guardrail before an order Ask many questions in one request Self-consistency: three wordings Route support tickets Is a headline relevant to a symbol?

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 / Rule playground

Rule playground · about 8 min

Rules plus forecasts in one request

Ask what is true now and what is likely next about one symbol in a single call, and combine the two in code.

  1. One request, both kinds

    Two rules, an English "now" question and three forecasts on MSFT:

    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": "ora-fin1",
      "state": {
        "symbol": "MSFT"
      },
      "questions": {
        "trend": {
          "type": "yes_no",
          "ask": "C > sma(C, 200)"
        },
        "pullback": {
          "type": "yes_no",
          "ask": "C < sma(C, 20)"
        },
        "oversold_en": {
          "type": "yes_no",
          "instructions": "Is RSI below 30?"
        },
        "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?"
        },
        "rally5": {
          "type": "yes_no",
          "instructions": "Will it rally at least 5% at some point in the next month?"
        }
      }
    }'
  2. The real response

    Session of 2026-10-30:

    {
      "model": "ora-fin1",
      "answers": {
        "trend": {
          "type": "yes_no",
          "yes_no": 0.9463,
          "rule": "C > sma(C, 200)",
          "basis": "rule"
        },
        "pullback": {
          "type": "yes_no",
          "yes_no": 0.7427,
          "rule": "C < sma(C, 20)",
          "basis": "rule"
        },
        "oversold_en": {
          "type": "yes_no",
          "yes_no": 0.0557,
          "rule": "rsi(C, 14) < 30",
          "basis": "comparison",
          "explain": "rsi < 30"
        },
        "up_week": {
          "type": "yes_no",
          "yes_no": 0.574
        },
        "drop5": {
          "type": "yes_no",
          "yes_no": 0.422
        },
        "rally5": {
          "type": "yes_no",
          "yes_no": 0.495
        }
      },
      "usage": {
        "input_tokens": 445,
        "output_tokens": 24
      },
      "context": {
        "source": "server",
        "symbol": "MSFT",
        "as_of": "2026-10-30"
      },
      "version": "ora-fin-0.1.1"
    }
  3. Tell them apart

    Answers with rule are facts (trend 0.9463, pullback 0.7427, oversold_en 0.0557); the rest are forecasts (up_week 0.574, drop5 0.422, rally5 0.495).

  4. Combine in code

    a = {k: v["yes_no"] for k, v in data["answers"].items()}
    setup = a["trend"] >= 0.6 and a["pullback"] >= 0.6     # facts: is the setup there?
    if setup and a["up_week"] >= 0.55 and a["drop5"] < 0.6:  # forecasts: act on it?
        signal("buy_the_pullback")
    elif a["drop5"] >= 0.7:
        signal("stand_aside")

    On this session the code above returns buy_the_pullback for MSFT: trend 0.9463, pullback 0.7427, up_week 0.574, drop5 0.422.

  5. Why one request

    One round trip, one market-data fill and one bill for six answers, and every answer is about the same session, so the facts and forecasts cannot drift apart.

Information, not investment advice. Every number on this page is a real response for the session shown; answers change with each session.

What's next

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