Fahali Enterprise Engines API
The Engines API from Fahali Enterprise — 5 operation(s) for engines.
The Engines API from Fahali Enterprise — 5 operation(s) for engines.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/fahaliai-com:fahaliai-com-engines-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Fahali Intelligence Engines API
version: 1.0.0
description: Structured market intelligence endpoints for AI agents, MCP tools, and institutional consumers. All responses conform to the canonical Fahali Intelligence schema family. Observation, not financial advice — every surface carries this disclaimer.
servers:
- url: https://app.fahaliai.com
description: Production
- url: http://localhost:5000
description: Local development
tags:
- name: Engines
paths:
/api/engines/status:
get:
summary: Engine liveness (public)
description: 'Per-engine status across the engine roster served by the backend registry: last fired, 1h/24h/7d counts, and a firing/active/quiet/dormant status (event-gated engines are quiet by design). Includes market-session context. Requires a Firebase session or an API key.'
operationId: getEngineStatus
responses:
'200':
description: Engine status
content:
application/json:
schema:
type: object
properties:
engines:
type: array
items:
type: object
market_context:
type: object
asof:
type: string
format: date-time
tags:
- Engines
/api/engines/{key}/board:
get:
summary: Engine board, market-wide
operationId: getEngineBoard
description: Public, read-only. Observation, not advice. Numbers are served from the published board and the judged record; nothing is filled in when absent.
parameters:
- name: key
in: path
required: true
description: Engine key with underscores, e.g. fall_warning_8h.
schema:
type: string
- name: limit
in: query
required: false
description: 'Market-wide read only: keep the top N symbols by p descending; symbols_total records the pre-slice count. Ignored on a symbol read.'
schema:
type: integer
minimum: 1
maximum: 200
default: 50
responses:
'200':
description: Board envelope (status ok or partial; partial names the block that timed out or failed).
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
'404':
description: Engine not in the roster (status unavailable; a hyphenated key whose underscore form exists is named in roster.reason).
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
'503':
description: Board dependencies could not be constructed; every block is null with reason board_deps_failed.
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
tags:
- Engines
/api/engines/{key}/board/{symbol}:
get:
summary: Engine board, one symbol
operationId: getEngineBoardSymbol
description: Public, read-only. Observation, not advice. Numbers are served from the published board and the judged record; nothing is filled in when absent.
parameters:
- name: key
in: path
required: true
description: Engine key with underscores, e.g. fall_warning_8h.
schema:
type: string
- name: symbol
in: path
required: true
description: Instrument symbol (case-insensitive).
schema:
type: string
responses:
'200':
description: Board envelope (status ok or partial; partial names the block that timed out or failed).
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
'404':
description: Engine not in the roster (status unavailable; a hyphenated key whose underscore form exists is named in roster.reason).
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
'503':
description: Board dependencies could not be constructed; every block is null with reason board_deps_failed.
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
tags:
- Engines
/api/engines/fall-warning-8h:
get:
summary: Fall warning (8h) board, market-wide
operationId: getFallWarnings
description: Public, read-only. Observation, not advice. Numbers are served from the published board and the judged record; nothing is filled in when absent.
parameters:
- name: limit
in: query
required: false
description: 'Market-wide read only: keep the top N symbols by p descending; symbols_total records the pre-slice count. Ignored on a symbol read.'
schema:
type: integer
minimum: 1
maximum: 200
default: 50
responses:
'200':
description: Board envelope (status ok or partial; partial names the block that timed out or failed).
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
'404':
description: Engine not in the roster (status unavailable; a hyphenated key whose underscore form exists is named in roster.reason).
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
'503':
description: Board dependencies could not be constructed; every block is null with reason board_deps_failed.
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
tags:
- Engines
/api/engines/fall-warning-8h/{symbol}:
get:
summary: Fall warning (8h) board, one symbol
operationId: getFallWarningsSymbol
description: Public, read-only. Observation, not advice. Numbers are served from the published board and the judged record; nothing is filled in when absent.
parameters:
- name: symbol
in: path
required: true
description: Instrument symbol (case-insensitive).
schema:
type: string
responses:
'200':
description: Board envelope (status ok or partial; partial names the block that timed out or failed).
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
'404':
description: Engine not in the roster (status unavailable; a hyphenated key whose underscore form exists is named in roster.reason).
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
'503':
description: Board dependencies could not be constructed; every block is null with reason board_deps_failed.
content:
application/json:
schema:
$ref: '#/components/schemas/EngineBoardEnvelope'
tags:
- Engines
components:
schemas:
EngineBoardEnvelope:
type: object
description: 'Engine board envelope. Every block is {value, reason}: a null value always carries a reason (for example engine_not_in_roster, board_missing:engine_off_or_not_published, symbol_not_evaluated, no_judged_rows_yet, read_timeout:<ms>ms, read_failed:<code>, board_deps_failed). record.strata holds the engine''s own judged strata only; record.withheldOnly is present whenever record.strata.value is, and is true when every own stratum is withheld.'
required:
- status
- engine
- asOf
- dataState
- roster
- board
- record
properties:
status:
type: string
enum:
- ok
- partial
- unavailable
engine:
type: string
asOf:
type: string
format: date-time
dataState:
type: string
roster:
type: object
description: 'Reason-coded null: value is the engine''s roster entry, or null with a reason saying why it is absent.'
required:
- value
properties:
value:
type:
- object
- 'null'
reason:
type: string
board:
type: object
description: 'Reason-coded null: value is the latest published board, or null with a reason saying why it is absent.'
required:
- value
properties:
value:
type:
- object
- 'null'
properties:
symbols:
type: object
description: Per-symbol entries; on the market-wide read, the top `limit` by p descending.
symbols_total:
type: integer
description: Pre-slice symbol count (market-wide read only).
standing:
type: array
items:
type: object
top:
type: array
items:
type: object
reason:
type: string
symbol:
type: object
description: 'Reason-coded null: value is this symbol''s board entry (symbol read only), or null with a reason saying why it is absent.'
required:
- value
properties:
value:
type:
- object
- 'null'
reason:
type: string
record:
type: object
properties:
strata:
type: object
description: 'Reason-coded null: value is the engine''s own judged strata, or null with a reason saying why it is absent.'
required:
- value
properties:
value:
type:
- array
- 'null'
items:
type: object
reason:
type: string
grade:
type: object
description: 'Reason-coded null: value is the engine''s measured verification grade, or null with a reason saying why it is absent.'
required:
- value
properties:
value:
type:
- object
- 'null'
reason:
type: string
withheldOnly:
type: boolean
boardAgeSeconds:
type:
- number
- 'null'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: Firebase ID token (logged-in user) for billing and portfolio endpoints.