AlgierexDevelopers
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"))

Sources and full READMEs: PyPI · npm.

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."
  }
}
StatusCodeMeaning
400bad_requestA 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.
401unauthorizedThe key is missing, wrong, or revoked.
402payment_requiredThe key's account has no active plan, its plan ended, or its last payment failed.
404not_foundNo such security, currency, route, or date.
429rate_limitedThe 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

FieldTypeMeaning
tickerstringSymbol, for example SAI.
nameEnstringName in English.
nameFrstring or nullName in French.
nameArstring or nullName in Arabic.
descEnstring or nullShort description in English.
descFrstring or nullShort description in French.
descArstring or nullShort description in Arabic.
isinstring or nullISIN code.
sectorstring or nullSector, for example pharma or banking.
listingDatestring (date) or nullFirst listing day.
sharesOutstandingnumber or nullShares issued.
parValueDZDnumber or nullPar value in DZD.
freeFloatPctnumber or nullPercent of shares free to trade.
stateOwnedPctnumber or nullPercent 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.

ParameterInDescription
ticker *pathSymbol, for example SAI. Not case sensitive.
fromqueryFirst date to include (YYYY-MM-DD).
toqueryLast date to include (YYYY-MM-DD).
limitqueryRows per page, 1 to 1000. Default: 100.
cursorqueryThe nextCursor of the previous page of this route. Keep the other parameters the same.

Response fields

FieldTypeMeaning
datestring (date)Session date.
sessionNumberintegerThe exchange's session number.
marketmain, bond, sme, oat, premium, piMarket the security traded in that day.
closenumberClosing price in DZD. For OATs, percent of face value.
opennumber or nullOpening price, when the bulletin gives one.
previousClosenumber or nullPrevious close, when the bulletin gives one.
volumenumberUnits traded.
valuenumberValue traded in DZD.
transactionsintegerNumber 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.

ParameterInDescription
marketquerymain (equities), sme (growth market), bond (corporate bonds) or oat (Treasury bonds). Default: main.
fromqueryFirst date to include (YYYY-MM-DD).
toqueryLast date to include (YYYY-MM-DD).
limitqueryRows per page, 1 to 1000. Default: 100.
cursorqueryThe nextCursor of the previous page of this route. Keep the other parameters the same.

Response fields

FieldTypeMeaning
datestring (date)Session date.
sessionNumberintegerThe exchange's session number.
marketmain, bond, sme, oatMarket.
volumenumberUnits traded in the market that session.
valuenumberValue traded in DZD.
transactionsintegerNumber 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.

ParameterInDescription
fromqueryFirst date to include (YYYY-MM-DD).
toqueryLast date to include (YYYY-MM-DD).
limitqueryRows per page, 1 to 1000. Default: 100.
cursorqueryThe nextCursor of the previous page of this route. Keep the other parameters the same.

Response fields

FieldTypeMeaning
datestring (date)Session date.
closenumberIndex close.
changenumberChange from the previous close, in points.
changePctnumberChange from the previous close, in percent.
previousClosenumberPrevious 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.

ParameterInDescription
datequeryThe curve as of the last OAT session on or before this date. Omit for the latest.

Response fields

FieldTypeMeaning
asOfstring (date)The OAT session the curve is dated to.
staleCountintegerOATs listed in that session's bulletin with no trade in the last 60 OAT sessions. They are left out of the fit.
pointsarrayThe bonds behind the fit, shortest maturity first.
points[].tickerstringOAT symbol.
points[].maturityDatestring (date)Maturity date.
points[].yearsToMaturitynumberYears from asOf to maturity.
points[].yieldRatenumberYield in percent at the bond's most recent trade.
fitobject or nullnull when fewer than five bonds traded.
fit.beta0numberLong-term level.
fit.beta1numberShort-term component.
fit.beta2numberCurvature (medium-term hump).
fit.lambdanumberDecay, in years: where the curvature peaks.
fit.rmsenumberRoot mean squared error of the fit, in percentage points.
fit.rSquarednumberShare of yield variance across the bonds that the curve explains.
fit.shortRatenumberModel yield at maturity zero: beta0 + beta1.
fit.longRatenumberModel yield at very long maturity: beta0.
fit.curvearrayThe fitted curve sampled across the observed maturities.
fit.curve[].yearsnumberMaturity in years.
fit.curve[].yieldnumberFitted 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

FieldTypeMeaning
assetCodestringCurrency code, for example USD.
assetTypeCURRENCY, CRYPTO, METALKind of asset.
sourceofficial, exchangedzofficial: Bank of Algeria. exchangedz: parallel market.
datestring (date)Date of the rate.
buyRatenumberBuy rate in DZD per unit.
sellRatenumberSell 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.

ParameterInDescription
code *pathCurrency code, for example USD or EUR.
sourcequeryofficial (Bank of Algeria) or exchangedz (parallel market). Default: official.
fromqueryFirst date to include (YYYY-MM-DD).
toqueryLast date to include (YYYY-MM-DD).
limitqueryRows per page, 1 to 1000. Default: 100.
cursorqueryThe nextCursor of the previous page of this route. Keep the other parameters the same.

Response fields

FieldTypeMeaning
datestring (date)Date of the rate.
assetCodestringCurrency code.
sourceofficial, exchangedzofficial: Bank of Algeria. exchangedz: parallel market.
buyRatenumberBuy rate in DZD per unit.
sellRatenumberSell 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.

ParameterInDescription
fromqueryFirst date to include (YYYY-MM-DD).
toqueryLast date to include (YYYY-MM-DD).
tickerqueryOnly events for this security. Not case sensitive.
localequeryLanguage of labels and titles: en, fr or ar. Text missing in that language falls back to the French original. Default: en.
limitqueryRows per page, 1 to 1000. Default: 100.
cursorqueryThe nextCursor of the previous page of this route. Keep the other parameters the same.

Response fields

FieldTypeMeaning
idstringStable id of the event.
datestring (date)Day of the event.
kindstringago: 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.
labelstringWhat happens, in the asked language.
tickerstring or nullThe security, when the event is about one.
marketstring or nullThe security's market, for curated events.
newsobject or nullThe news item the date comes from; null for curated events.
news.sourcestringNews origin.
news.sourceIdstringNews id at the origin.
news.titlestringTitle of the news item, in the asked language.
news.urlstringThe 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.

ParameterInDescription
tickerqueryOnly news about this security. Not case sensitive.
sourcequeryOnly news from one origin.
fromqueryFirst publication day to include (YYYY-MM-DD, Algiers time).
toqueryLast publication day to include (YYYY-MM-DD, Algiers time).
localequeryLanguage of labels and titles: en, fr or ar. Text missing in that language falls back to the French original. Default: en.
includeRoutinequeryAlso return routine trading-parameter notices. Default: false.
limitqueryRows per page, 1 to 1000. Default: 100.
cursorqueryThe nextCursor of the previous page of this route. Keep the other parameters the same.

Response fields

FieldTypeMeaning
sourcestringcosob-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.
sourceIdstringId at the origin.
titlestringTitle in the asked language.
summarystring or nullShort summary in the asked language.
tickerstring or nullThe security the item is about.
marketstring or nullThat security's market.
tagsarrayTopics, for example listing or dividend.
originalLanguagefr, en, arLanguage the origin published in.
publishedAtstring (date-time)Publication time (UTC).
dateIsApproxbooleanTrue when the origin gave no exact date.
sourceUrlstringPage at the origin.
pdfUrlstring or nullThe original document, when there is one.
urlstringThe 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"
}