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 / Cookbooks

Cookbooks · Techniques · Beginner · about 5 min

Ask many questions in one request

Put every question you have about a symbol into one request: forecasts and rules together, one round trip, and a fraction of the tokens of separate calls.

  1. When to use it

    Whenever you ask more than one thing about the same state. Each request carries a fixed overhead (the state, the model's setup), so splitting questions across requests repeats it.

  2. The request

    Three forecasts, two English "what is true now" questions and three rules, on SPY:

    {
      "model": "ora-fin1",
      "state": {
        "symbol": "SPY"
      },
      "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?"
        },
        "rally5": {
          "type": "yes_no",
          "instructions": "Will it rally at least 5% at some point in the next month?"
        },
        "above_200d": {
          "type": "yes_no",
          "instructions": "Is it above its 200-day moving average?"
        },
        "above_50d": {
          "type": "yes_no",
          "instructions": "Is it above its 50-day moving average?"
        },
        "overbought": {
          "type": "yes_no",
          "ask": "rsi(C,14) > 70"
        },
        "near_high": {
          "type": "yes_no",
          "ask": "C >= 0.98 * highest(H,250)"
        },
        "busy": {
          "type": "yes_no",
          "ask": "V > avg(V,20)"
        }
      }
    }
    Open this in the Playground
  3. The real response

    {
      "model": "ora-fin1",
      "answers": {
        "up_week": {
          "type": "yes_no",
          "yes_no": 0.598
        },
        "drop5": {
          "type": "yes_no",
          "yes_no": 0.203
        },
        "rally5": {
          "type": "yes_no",
          "yes_no": 0.229
        },
        "above_200d": {
          "type": "yes_no",
          "yes_no": 0.9451,
          "rule": "C > sma(C, 200)",
          "basis": "comparison",
          "explain": "today's close > sma200"
        },
        "above_50d": {
          "type": "yes_no",
          "yes_no": 0.1128,
          "rule": "C > sma(C, 50)",
          "basis": "comparison",
          "explain": "today's close > sma50"
        },
        "overbought": {
          "type": "yes_no",
          "yes_no": 0.0537,
          "rule": "rsi(C,14) > 70",
          "basis": "rule"
        },
        "near_high": {
          "type": "yes_no",
          "yes_no": 0.0854,
          "rule": "C >= 0.98 * highest(H,250)",
          "basis": "rule"
        },
        "busy": {
          "type": "yes_no",
          "yes_no": 0.9463,
          "rule": "V > avg(V,20)",
          "basis": "rule"
        }
      },
      "usage": {
        "input_tokens": 516,
        "output_tokens": 32
      },
      "context": {
        "source": "server",
        "symbol": "SPY",
        "as_of": "2026-10-30"
      },
      "version": "ora-fin-0.1.1"
    }

    For comparison, up_week asked on its own:

    {
      "model": "ora-fin1",
      "answers": {
        "up_week": {
          "type": "yes_no",
          "yes_no": 0.598
        }
      },
      "usage": {
        "input_tokens": 290,
        "output_tokens": 4
      },
      "context": {
        "source": "server",
        "symbol": "SPY",
        "as_of": "2026-10-30"
      },
      "version": "ora-fin-0.1.1"
    }
  4. The numbers

    Eight questions in one request used 516 input tokens. One question alone used 290, so eight separate requests would be about 8 × 290 = 2320, roughly 4 times as many, and eight round trips instead of one. The shared question came back the same both ways (up_week 0.598 and 0.598): answers don't depend on what else is asked.

  5. The code

    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": "SPY"
      },
      "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?"
        },
        "rally5": {
          "type": "yes_no",
          "instructions": "Will it rally at least 5% at some point in the next month?"
        },
        "above_200d": {
          "type": "yes_no",
          "instructions": "Is it above its 200-day moving average?"
        },
        "above_50d": {
          "type": "yes_no",
          "instructions": "Is it above its 50-day moving average?"
        },
        "overbought": {
          "type": "yes_no",
          "ask": "rsi(C,14) > 70"
        },
        "near_high": {
          "type": "yes_no",
          "ask": "C >= 0.98 * highest(H,250)"
        },
        "busy": {
          "type": "yes_no",
          "ask": "V > avg(V,20)"
        }
      }
    }'
  6. Variations

    • Name questions for what you will do with them (drop5, above_200d): the names are what action rules refer to.
    • One request per symbol, many questions each, many symbols in parallel: Rank a watchlist.
    • Rules and forecasts mix freely; rules need state.symbol.

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.