Skip to main content
Up to 53% offSee the plans

Sahmino API · 1.0.0

The API reference

Read the reference without an account. Create a scoped key in your account when your plan includes API access.

Base address

https://sahmino.com/api/v1OpenAPI document

Authentication header

Authorization: Bearer <token>

A token minted for the MCP server is not an API token and will be refused.

Limits

240 requests per minute

100 rows per page

A daily request budget set by the account tier. Each endpoint declares its cost below.

A sample request

curl -H "Authorization: Bearer $SAHMINO_TOKEN" \
  "https://sahmino.com/api/v1/instruments"

Replace the token placeholder with your own API key. This example reads the first available catalog endpoint.

The shape of an answer

One record
One record answers {"data": {...}}.
One page of records
A list answers {"data": [...], "meta": {"page", "perPage", "total", "lastPage"}}. Page size is fixed; callers cannot change perPage.
A refused request
A refusal answers {"error": {"code", "message", "detail?"}}. Branch on code; message is prose and can change between releases.

Endpoints

17 of 17 endpoints

GETone pagecost 1
/api/v1/instruments

The instrument catalog, paginated.

Identity, venue and latest available price. Every record includes its names in both languages.

Scopeapi:instruments

GETone recordcost 2
/api/v1/instruments/{instrument}

One instrument and its exchange profile.

The catalog record plus the nightly exchange profile: free float, market capitalisation and registered industry.

Scopeapi:instruments

GETone pagecost 1
/api/v1/board

Today's market board, paginated.

Symbol, ticker and nullable fullName identify the instrument. Its registered company name follows the request locale, using source text when untranslated. Each row includes last price, close, change, volume, value and the retail share of buying and selling. Read yesterday’s close from the instrument price endpoint.

Scopeapi:instruments

GETone recordcost 2
/api/v1/instruments/{instrument}/prices

Daily price history and statistics for its window.

Points run from oldest to newest, including halted sessions marked as such. Read unit; one toman is 10 rials.

Scopeapi:prices

GETone recordcost 5
/api/v1/instruments/{instrument}/indicators

Stored technical indicators for one instrument.

Values are read from storage without recalculation. seriesHash identifies the sessions used. An indicator with no reading is omitted rather than returned as null.

Scopeapi:indicators

GETone recordcost 1
/api/v1/screener/fields

Available screener fields, with their groups, formats and labels.

Use this catalog to build a condition. It comes from the same field registry as the screener page.

Scopeapi:screener

GETone recordcost 1
/api/v1/screens

Your saved screens.

The complete saved list is returned together because the account limits how many screens can be saved. Compare meta.kept with meta.limit before offering another save.

Scopeapi:screener

POSTone recordcost 25
/api/v1/screener/run

Run a saved screen or the conditions in your request.

An instrument without a reading cannot pass a condition on that field. Missing is not zero. matched counts all passing rows; shown counts returned rows; rowCap is the plan’s limit for this call, or null when no cap is applied.

Scopeapi:screener

GETone pagecost 1
/api/v1/filings

Codal filings, newest first.

periodMonths is the reporting span. Comparing figures from unequal periods can give misleading results.

Scopeapi:filings

GETone recordcost 2
/api/v1/instruments/{instrument}/statements

Financial statements from one instrument’s filings.

The plan’s statement_periods allowance limits returned periods. The accompanying quota reports total periods filed by the company and shown periods returned under the plan.

Scopeapi:filings

GETone recordcost 1
/api/v1/valuations

Your saved valuation runs.

gapAtSave records the difference at the time of saving. gapNow shows the effect of market price changes since then.

Scopeapi:valuations

GETone recordcost 2
/api/v1/instruments/{instrument}/valuations

Your saved valuation runs for one instrument.

Scopeapi:valuations

GETone recordcost 1
/api/v1/macro

Available macroeconomic series and their freshness.

freshAt is the last ingestion time. stale compares that time with the series’ own update cadence; a monthly series is not late merely because it has no observation this week.

Scopeapi:macro

GETone recordcost 1
/api/v1/macro/series

Observations for up to 5 series.

Points run from oldest to newest. Days without observations are omitted, not recorded as zero. An unknown key returns 404 with not_found, rather than an empty series.

Scopeapi:macro

GETone recordcost 5
/api/v1/instruments/{instrument}/ownership

Shareholders, board composition and derived ownership information.

Personal national identity numbers are removed by the query before response data is built.

Scopeapi:ownership

GETone pagecost 1
/api/v1/alerts

Your alert rules, newest first.

Read only. Create and re-arm rules on the alerts page, where plan limits apply. Results are paginated because the API-enabled plan can hold a large rule list.

Scopeapi:alerts

GETone pagecost 1
/api/v1/alerts/deliveries

Sent alert deliveries, newest first.

Use the delivery history to connect alerts that fired to your own system.

Scopeapi:alerts