Ora
All documentation Overview

Get started

IntroductionQuickstartHow ora-fin1 decidesHow to build with OraUse-case map

Rule language

OverviewGrammarOperators and beliefsPrices and offsetsWindowsIndicatorsSignals and eventsPattern functionsFunction referenceRule libraryCommon mistakesError messagesEarnings and dividend facts

Questions & answers

Questionsyes_no (noul)choicescoreConfidenceThresholds and calibrationStateAsk by symbol

Patterns

Patterns

Actions & workflows

OverviewRules and templatesDestinationsWebhooks and signaturesWorkflows

API reference

POST /v1/systemoneGET /v1/models

Errors & limits

ErrorsRate limitsKnown limitations

Pricing

Pricing

Resources

FAQChangelogModels & versionsCode in 8 languages

Docs / Get started

Get started

How ora-fin1 decides

One model name, three ways of answering. Which one answers a question depends on what you ask and what you send, and every answer tells you which it was.

In short
  • Forecasts ("Will it drop 5% next month?") are answered by the forecast model: a probability that the outcome happens.
  • Facts about now ("Is it above its 200-day?", or a rule such as C > sma(C, 200)) are evaluated exactly by the rule engine: a belief in how clearly it holds.
  • Text and records go to the text engine, which also answers choice and score.

Who answers what

You sendQuestionAnswered byThe answer has
{"symbol": "MSFT"}A forecast in EnglishForecast model, on the latest completed sessionyes_no (a probability)
{"symbol": "MSFT"}"ask": "C > sma(C, 200)"Rule engine, exactly as writtenyes_no (a belief), rule, basis: "rule"
{"symbol": "MSFT"}A "what is true now" question in EnglishCompiled to a rule, then the rule engineyes_no, rule, basis: "comparison" or "pattern", sometimes explain
Your own numbers in state.contextA forecastForecast model, on your numbersyes_no
Text or any other recordyes_no, choice or scoreText engineSee Question types

All three on one symbol

One request on MSFT mixes two rules, an English "now" question and three forecasts:

{
  "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?"
    }
  }
}

The real answer (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"
}

trend and pullback carry the rules they ran. oversold_en was compiled to rsi(C, 14) < 30. up_week, drop5 and rally5 have no rule: they are forecasts.

Probabilities and beliefs

A forecast probabilityThe model's estimate that the outcome will happen, learned from history. drop5 at 0.422 says a 5% drawdown within a month is less likely than not, for this session's numbers. Compare it with how often that outcome usually happens (Choosing thresholds).
A rule beliefNot a chance of anything: the fact is already settled. It says how far past the line the reading is, on this symbol's own scale. trend at 0.9463 reads as "clearly above the 200-day". See Operators and beliefs.

Both are numbers from 0 to 1 under the names you chose, so a decision can use both: trend >= 0.6 and drop5 < 0.5.

Ask by symbol

With only {"symbol": …}, the server fills in the latest completed session for about 2,000 liquid US stocks and ETFs: returns, volatility, distance from highs and moving averages, volume and earnings timing for the forecast model, and the daily price history for the rule engine. context.as_of in the response names the session. See Ask by symbol.

What it is not

  • Not a chat model: it does not write text.
  • Not advice: answers are model output for information, not recommendations.
  • Not a broker: actions deliver to your systems; you decide what happens next.

Information, not investment advice. Beliefs and probabilities on this page are real responses for the session shown and change with every session.

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