On this page
API v1.0.0
API documentation
Clean, normalized market data for the Algerian exchange: listed securities, daily prices back to 1999, sessions, the Dzair index, the OAT yield curve, exchange rates, the company events calendar, and news in English, French and Arabic.
Every call needs an API key from an account with a paid plan. Create keys and choose a plan at https://developers.algierex.com/dashboard.
Pro ($19/month): 120 calls a minute, 50,000 a day, personal and research use.
Business ($149/month): 600 calls a minute, 500,000 a day, commercial use inside your company.
Redistribution (custom price): limits by contract, license to display or redistribute the data.
Limits count per account, across all of its keys. The daily limit resets at midnight in Algiers (UTC+1).
Get an API key · Download the OpenAPI spec
Authentication
Send your key in the Authorization header. The X-API-Key header also works. Keys start with alx_ and are shown once, when you create them on the Developers page.
curl https://algierex.com/api/v1/tickers \ -H "Authorization: Bearer alx_..."
The base URL is https://algierex.com/api/v1. Every answer is JSON, and dates are YYYY-MM-DD. A key only works while its account has an active plan; without one, every call answers 402:
{
"error": {
"code": "payment_required",
"message": "This key's account has no API plan. See plans at https://developers.algierex.com/dashboard or write to contact@algierex.com."
}
}SDKs
Official clients for Python and TypeScript, with typed responses, automatic paging and retries after a rate limit.
pip install algierex # Python 3.9+, "algierex[pandas]" for to_frame() npm install algierex # TypeScript and JavaScript, Node 18+
from algierex import Algierex, to_frame
client = Algierex() # reads ALGIEREX_API_KEY
prices = to_frame(client.get_prices("SAI", from_="2025-01-01"))Paging
The list routes /prices/{ticker}, /sessions, /index/dzair, /fx/{code} and /calendar are oldest first; /news is newest first. All of them are paged: they take limit (1 to 1000, default 100) and answer { data, nextCursor }. Send nextCursor back as cursor, with the other parameters unchanged, until it is null.
A page can hold fewer rows than limit, even none, when rows are filtered out (for example inverted official exchange rates, or routine notices in news). Keep following nextCursor; only null means the end. A cursor only works on the route that made it.
curl "https://algierex.com/api/v1/prices/SAI?limit=1000" -H "Authorization: Bearer alx_..." curl "https://algierex.com/api/v1/prices/SAI?limit=1000&cursor=<nextCursor>" -H "Authorization: Bearer alx_..."
Errors
Errors answer { error: { code, message } }. The code is stable; the message says what to change. Over a limit, the answer is 429 with a Retry-After header in seconds:
{
"error": {
"code": "rate_limited",
"message": "Your plan's per-minute limit is used up. Try again in 12 seconds."
}
}| Status | Code | Meaning |
|---|---|---|
| 400 | bad_request | A parameter is not valid: a date that does not exist, a limit out of range, or a cursor that is not this route's nextCursor. |
| 401 | unauthorized | The key is missing, wrong, or revoked. |
| 402 | payment_required | The key's account has no active plan, its plan ended, or its last payment failed. |
| 404 | not_found | No such security, currency, route, or date. |
| 429 | rate_limited | The plan's per-minute or per-day limit is used up. Wait Retry-After seconds. |
List securities
GET /api/v1/tickers
Every listed security with its names in English, French and Arabic, sector, ISIN and capital facts.
Response fields
| Field | Type | Meaning |
|---|---|---|
| ticker | string | Symbol, for example SAI. |
| nameEn | string | Name in English. |
| nameFr | string or null | Name in French. |
| nameAr | string or null | Name in Arabic. |
| descEn | string or null | Short description in English. |
| descFr | string or null | Short description in French. |
| descAr | string or null | Short description in Arabic. |
| isin | string or null | ISIN code. |
| sector | string or null | Sector, for example pharma or banking. |
| listingDate | string (date) or null | First listing day. |
| sharesOutstanding | number or null | Shares issued. |
| parValueDZD | number or null | Par value in DZD. |
| freeFloatPct | number or null | Percent of shares free to trade. |
| stateOwnedPct | number or null | Percent held by the state. |
Example
curl "https://algierex.com/api/v1/tickers" \ -H "Authorization: Bearer alx_..."
{
"data": [
{
"ticker": "SAI",
"nameEn": "Groupe Saidal",
"nameFr": "Groupe Saidal",
"nameAr": "مجمع صيدال",
"descEn": "Groupe Saidal is Algeria's leading public pharmaceutical manufacturer...",
"descFr": "Le Groupe Saidal est le premier fabricant pharmaceutique public d'Algérie...",
"descAr": "مجمع صيدال هو أكبر منتِج صيدلاني عمومي في الجزائر...",
"isin": "DZ0000010003",
"sector": "pharma",
"listingDate": "1999-09-20",
"sharesOutstanding": 10000000,
"parValueDZD": 250,
"freeFloatPct": 20,
"stateOwnedPct": 80
}
]
}Daily prices for one security
GET /api/v1/prices/{ticker}
One row per trading day, oldest first, across every market the security has traded in. Several trade lines in one session (common for OATs) are merged into one day: volumes add up and the last price is the close.
| Parameter | In | Description |
|---|---|---|
| ticker * | path | Symbol, for example SAI. Not case sensitive. |
| from | query | First date to include (YYYY-MM-DD). |
| to | query | Last date to include (YYYY-MM-DD). |
| limit | query | Rows per page, 1 to 1000. Default: 100. |
| cursor | query | The nextCursor of the previous page of this route. Keep the other parameters the same. |
Response fields
| Field | Type | Meaning |
|---|---|---|
| date | string (date) | Session date. |
| sessionNumber | integer | The exchange's session number. |
| market | main, bond, sme, oat, premium, pi | Market the security traded in that day. |
| close | number | Closing price in DZD. For OATs, percent of face value. |
| open | number or null | Opening price, when the bulletin gives one. |
| previousClose | number or null | Previous close, when the bulletin gives one. |
| volume | number | Units traded. |
| value | number | Value traded in DZD. |
| transactions | integer | Number of trades. |
Example
curl "https://algierex.com/api/v1/prices/SAI?from=2026-10-18&to=2026-10-20" \ -H "Authorization: Bearer alx_..."
{
"data": [
{
"date": "2026-10-18",
"sessionNumber": 3054,
"market": "main",
"close": 450,
"open": null,
"previousClose": null,
"volume": 154,
"value": 69300,
"transactions": 1
},
{
"date": "2026-10-20",
"sessionNumber": 3055,
"market": "main",
"close": 450,
"open": null,
"previousClose": null,
"volume": 0,
"value": 0,
"transactions": 0
}
],
"nextCursor": null
}Market sessions
GET /api/v1/sessions
One market's sessions with their totals, oldest first. Premium and PI securities trade in main market sessions.
| Parameter | In | Description |
|---|---|---|
| market | query | main (equities), sme (growth market), bond (corporate bonds) or oat (Treasury bonds). Default: main. |
| from | query | First date to include (YYYY-MM-DD). |
| to | query | Last date to include (YYYY-MM-DD). |
| limit | query | Rows per page, 1 to 1000. Default: 100. |
| cursor | query | The nextCursor of the previous page of this route. Keep the other parameters the same. |
Response fields
| Field | Type | Meaning |
|---|---|---|
| date | string (date) | Session date. |
| sessionNumber | integer | The exchange's session number. |
| market | main, bond, sme, oat | Market. |
| volume | number | Units traded in the market that session. |
| value | number | Value traded in DZD. |
| transactions | integer | Number of trades. |
Example
curl "https://algierex.com/api/v1/sessions?from=2026-10-20" \ -H "Authorization: Bearer alx_..."
{
"data": [
{
"date": "2026-10-20",
"sessionNumber": 3055,
"market": "main",
"volume": 15170,
"value": 26132338,
"transactions": 43
}
],
"nextCursor": null
}Dzair index
GET /api/v1/index/dzair
The Dzair index close for each session date, oldest first.
| Parameter | In | Description |
|---|---|---|
| from | query | First date to include (YYYY-MM-DD). |
| to | query | Last date to include (YYYY-MM-DD). |
| limit | query | Rows per page, 1 to 1000. Default: 100. |
| cursor | query | The nextCursor of the previous page of this route. Keep the other parameters the same. |
Response fields
| Field | Type | Meaning |
|---|---|---|
| date | string (date) | Session date. |
| close | number | Index close. |
| change | number | Change from the previous close, in points. |
| changePct | number | Change from the previous close, in percent. |
| previousClose | number | Previous close. |
Example
curl "https://algierex.com/api/v1/index/dzair?from=2026-10-20" \ -H "Authorization: Bearer alx_..."
{
"data": [
{
"date": "2026-10-20",
"close": 3811.2,
"change": -1.91,
"changePct": -0.05,
"previousClose": 3813.12
}
],
"nextCursor": null
}OAT yield curve
GET /api/v1/yield-curve
A Nelson-Siegel curve fitted to Algerian Treasury bonds (OATs) that actually traded in the last 60 OAT sessions, with the bonds behind it. Each bond counts at its most recent trade in that window, so a point can be up to 60 sessions old. fit is null when fewer than five bonds traded.
| Parameter | In | Description |
|---|---|---|
| date | query | The curve as of the last OAT session on or before this date. Omit for the latest. |
Response fields
| Field | Type | Meaning |
|---|---|---|
| asOf | string (date) | The OAT session the curve is dated to. |
| staleCount | integer | OATs listed in that session's bulletin with no trade in the last 60 OAT sessions. They are left out of the fit. |
| points | array | The bonds behind the fit, shortest maturity first. |
| points[].ticker | string | OAT symbol. |
| points[].maturityDate | string (date) | Maturity date. |
| points[].yearsToMaturity | number | Years from asOf to maturity. |
| points[].yieldRate | number | Yield in percent at the bond's most recent trade. |
| fit | object or null | null when fewer than five bonds traded. |
| fit.beta0 | number | Long-term level. |
| fit.beta1 | number | Short-term component. |
| fit.beta2 | number | Curvature (medium-term hump). |
| fit.lambda | number | Decay, in years: where the curvature peaks. |
| fit.rmse | number | Root mean squared error of the fit, in percentage points. |
| fit.rSquared | number | Share of yield variance across the bonds that the curve explains. |
| fit.shortRate | number | Model yield at maturity zero: beta0 + beta1. |
| fit.longRate | number | Model yield at very long maturity: beta0. |
| fit.curve | array | The fitted curve sampled across the observed maturities. |
| fit.curve[].years | number | Maturity in years. |
| fit.curve[].yield | number | Fitted yield in percent. |
Example
curl "https://algierex.com/api/v1/yield-curve" \ -H "Authorization: Bearer alx_..."
Trimmed: the real answer has every traded bond in points (29 on this date) and about 100 curve samples.
{
"data": {
"asOf": "2026-10-20",
"staleCount": 17,
"points": [
{
"ticker": "O070727",
"maturityDate": "2027-07-05",
"yearsToMaturity": 0.706,
"yieldRate": 4.4
}
],
"fit": {
"beta0": 9.5739,
"beta1": -5.4953,
"beta2": 0.3623,
"lambda": 6,
"rmse": 0.2741,
"rSquared": 0.9139,
"shortRate": 4.0787,
"longRate": 9.5739,
"curve": [
{
"years": 0.706,
"yield": 4.4095
}
]
}
}
}Latest exchange rates
GET /api/v1/fx
The latest rate per currency and source, in dinars per unit. official is the Bank of Algeria rate; exchangedz is the parallel market.
Response fields
| Field | Type | Meaning |
|---|---|---|
| assetCode | string | Currency code, for example USD. |
| assetType | CURRENCY, CRYPTO, METAL | Kind of asset. |
| source | official, exchangedz | official: Bank of Algeria. exchangedz: parallel market. |
| date | string (date) | Date of the rate. |
| buyRate | number | Buy rate in DZD per unit. |
| sellRate | number | Sell rate in DZD per unit. |
Example
curl "https://algierex.com/api/v1/fx" \ -H "Authorization: Bearer alx_..."
{
"data": [
{
"assetCode": "USD",
"assetType": "CURRENCY",
"source": "official",
"date": "2026-08-22",
"buyRate": 132.9366,
"sellRate": 135.5953
},
{
"assetCode": "USD",
"assetType": "CURRENCY",
"source": "exchangedz",
"date": "2026-08-22",
"buyRate": 237,
"sellRate": 240
}
]
}Exchange rate history
GET /api/v1/fx/{code}
One currency's daily rates from one source, oldest first, in dinars per unit. Official rates the upstream feed sent inverted are left out.
| Parameter | In | Description |
|---|---|---|
| code * | path | Currency code, for example USD or EUR. |
| source | query | official (Bank of Algeria) or exchangedz (parallel market). Default: official. |
| from | query | First date to include (YYYY-MM-DD). |
| to | query | Last date to include (YYYY-MM-DD). |
| limit | query | Rows per page, 1 to 1000. Default: 100. |
| cursor | query | The nextCursor of the previous page of this route. Keep the other parameters the same. |
Response fields
| Field | Type | Meaning |
|---|---|---|
| date | string (date) | Date of the rate. |
| assetCode | string | Currency code. |
| source | official, exchangedz | official: Bank of Algeria. exchangedz: parallel market. |
| buyRate | number | Buy rate in DZD per unit. |
| sellRate | number | Sell rate in DZD per unit. |
Example
curl "https://algierex.com/api/v1/fx/EUR?source=exchangedz&from=2026-08-22" \ -H "Authorization: Bearer alx_..."
{
"data": [
{
"date": "2026-08-22",
"assetCode": "EUR",
"source": "exchangedz",
"buyRate": 274.67,
"sellRate": 277.17
}
],
"nextCursor": null
}Company events calendar
GET /api/v1/calendar
General meetings, dividend and coupon payments, subscription periods and listings, past and upcoming, ordered by date. The same calendar the website shows: dates taken from news items, merged with a curated calendar, without duplicates.
| Parameter | In | Description |
|---|---|---|
| from | query | First date to include (YYYY-MM-DD). |
| to | query | Last date to include (YYYY-MM-DD). |
| ticker | query | Only events for this security. Not case sensitive. |
| locale | query | Language of labels and titles: en, fr or ar. Text missing in that language falls back to the French original. Default: en. |
| limit | query | Rows per page, 1 to 1000. Default: 100. |
| cursor | query | The nextCursor of the previous page of this route. Keep the other parameters the same. |
Response fields
| Field | Type | Meaning |
|---|---|---|
| id | string | Stable id of the event. |
| date | string (date) | Day of the event. |
| kind | string | ago: ordinary general meeting. agex: extraordinary general meeting. dividend_payment and coupon_payment: payment day. subscription_open and subscription_close: an offer's subscription period. listing_start: first trading day. session_cancelled: no session that day. result: results publication. deadline: a filing or application deadline. other: anything else. |
| label | string | What happens, in the asked language. |
| ticker | string or null | The security, when the event is about one. |
| market | string or null | The security's market, for curated events. |
| news | object or null | The news item the date comes from; null for curated events. |
| news.source | string | News origin. |
| news.sourceId | string | News id at the origin. |
| news.title | string | Title of the news item, in the asked language. |
| news.url | string | The article on Algierex. |
Example
curl "https://algierex.com/api/v1/calendar?from=2026-06-01&to=2026-07-31" \ -H "Authorization: Bearer alx_..."
{
"data": [
{
"id": "cosob-communique--communique-la-commission-...#0",
"date": "2026-06-01",
"kind": "subscription_open",
"label": "AYRADE subscription opens",
"ticker": "AYRD",
"market": null,
"news": {
"source": "cosob-communique",
"sourceId": "communique-la-commission-...",
"title": "COSOB visa · Capital increase · AYRADE Spa",
"url": "https://algierex.com/en/news/cosob-communique--communique-la-commission-..."
}
},
{
"id": "curated:div-CPA-2025",
"date": "2026-07-22",
"kind": "dividend_payment",
"label": "CPA dividend payment · FY 2025 · 175.00 DZD/share net",
"ticker": "CPA",
"market": "main",
"news": null
}
],
"nextCursor": null
}News
GET /api/v1/news
News from COSOB, the exchange, the Bank of Algeria and issuers, newest first, with a summary in the asked language and a link to the full article on Algierex. Routine trading-parameter notices are left out unless includeRoutine=true.
| Parameter | In | Description |
|---|---|---|
| ticker | query | Only news about this security. Not case sensitive. |
| source | query | Only news from one origin. |
| from | query | First publication day to include (YYYY-MM-DD, Algiers time). |
| to | query | Last publication day to include (YYYY-MM-DD, Algiers time). |
| locale | query | Language of labels and titles: en, fr or ar. Text missing in that language falls back to the French original. Default: en. |
| includeRoutine | query | Also return routine trading-parameter notices. Default: false. |
| limit | query | Rows per page, 1 to 1000. Default: 100. |
| cursor | query | The nextCursor of the previous page of this route. Keep the other parameters the same. |
Response fields
| Field | Type | Meaning |
|---|---|---|
| source | string | cosob-visa: COSOB approval of an offer document. cosob-decision: COSOB decision. cosob-communique: COSOB press release. sgbv-avis: the exchange's official notice. sgbv-press: the exchange's press and information notes. bank-of-algeria: Bank of Algeria publication. issuer-ir: a company's own investor news. editorial: written by Algierex. |
| sourceId | string | Id at the origin. |
| title | string | Title in the asked language. |
| summary | string or null | Short summary in the asked language. |
| ticker | string or null | The security the item is about. |
| market | string or null | That security's market. |
| tags | array | Topics, for example listing or dividend. |
| originalLanguage | fr, en, ar | Language the origin published in. |
| publishedAt | string (date-time) | Publication time (UTC). |
| dateIsApprox | boolean | True when the origin gave no exact date. |
| sourceUrl | string | Page at the origin. |
| pdfUrl | string or null | The original document, when there is one. |
| url | string | The article on Algierex, in the asked language. |
Example
curl "https://algierex.com/api/v1/news?ticker=CPA&limit=1" \ -H "Authorization: Bearer alx_..."
{
"data": [
{
"source": "sgbv-avis",
"sourceId": "64-26",
"title": "Avis 64-26: BDL cleared to run CPA's share buyback",
"summary": "BDL is authorised to trade CPA shares under a buyback contract for twelve months from 20 August 2026, buying at up to 3,000 DZD and selling at no less than 1,900 DZD.",
"ticker": "CPA",
"market": null,
"tags": [],
"originalLanguage": "fr",
"publishedAt": "2026-08-18T00:00:00.000Z",
"dateIsApprox": false,
"sourceUrl": "https://www.sgbv.dz/?page=avis&lang=fr",
"pdfUrl": "https://www.sgbv.dz/commons/fr/avis/Avis1489720060.pdf",
"url": "https://algierex.com/en/news/sgbv-avis--64-26"
}
],
"nextCursor": "eyJyIjoibmV3cyIsImEiOiIuLi4ifQ=="
}This OpenAPI description
GET /api/v1/openapi.json
Public, no key needed.
Example
curl "https://algierex.com/api/v1/openapi.json"
{
"openapi": "3.1.0"
}