Daleelak
العربية
Daleelak

Daleelak API

The same data that powers this site, as clean JSON. One request gives you every asset, the best licensed seller for each direction, the day's verdict, the official and global rates, and recent daily history. It is language-neutral and source-free, so you present it your own way.

Start here

New to the API? One request to the index lists every endpoint, the filters the feed accepts, and the free-tier limits, so you can orient in seconds. Each feed response also carries a _self link to the exact request that produced it.

GET https://getdaleelak.com/api/v1
Open the API index

Endpoint

One GET request. No key and no sign-up. CORS is open, so you can call it straight from the browser.

GET https://getdaleelak.com/api/v1/feed.json

Copy a starting point:

curl -s https://getdaleelak.com/api/v1/feed.json
const res = await fetch("https://getdaleelak.com/api/v1/feed.json");
const data = await res.json();
console.log(data.assets[0].directions.sell.best);
import requests

data = requests.get("https://getdaleelak.com/api/v1/feed.json").json()
print(data["assets"][0]["directions"]["sell"]["best"])
<?php
$data = json_decode(file_get_contents("https://getdaleelak.com/api/v1/feed.json"), true);
print_r($data["assets"][0]["directions"]["sell"]["best"]);

What you get

  • Every tracked asset (currencies and gold), with the best seller for buy and for sell.
  • The day's verdict and how today compares to recent history.
  • The official central bank rate and the global mid-market rate.
  • Recent daily history for each asset (the last 30 days on the free tier).
  • A _self link to the exact request, plus pointers to the docs, spec, and changelog.

Filter what you get

Ask for only what you need. Add a category to the URL, or one or more specific assets, or list several separated by commas. You can combine both. The response looks the same, just with fewer assets.

Currencies only:

curl -s "https://getdaleelak.com/api/v1/feed.json?category=currencies"

One asset only:

curl -s "https://getdaleelak.com/api/v1/feed.json?asset=us-dollar"

Download only what changed

Every response carries an ETag. Send it back in an If-None-Match header and you get a small Not Modified reply when nothing has changed, so you save bandwidth and stay fast.

curl -s -H 'If-None-Match: "<etag>"' https://getdaleelak.com/api/v1/feed.json

Errors

Errors use the standard problem+json format (RFC 9457): a type you can look up below, a short title, the HTTP status, and the fields you need to fix the call. The 2xx response shape never carries an error.

Unknown category

HTTP 400

A ?category= value that is not one we track.

Use a value from validCategories in the response body, or drop the filter.

Unknown asset

HTTP 400

A ?asset= value that is not a slug or id we track.

Use a value from validAssets in the response body.

Rate limited

HTTP 429

Too many requests from one address inside the window.

Wait the seconds in the Retry-After header, cache with the ETag, and leave a gap between calls.

Machine-readable spec

An OpenAPI file describes every field and every response, so you can validate the data or generate a client in your language.

Open the OpenAPI spec

Versioning and stability

The version lives in the URL. v1 is stable, and new fields or filters are added in a backwards compatible way, so they never break an existing integration. A breaking change would ship as a new version beside v1 (like /api/v2), announced in the changelog, with the old version flagged by Deprecation and Sunset response headers and time to migrate. Watch the changelog to stay ahead.

See the API changelog

Tools and clients

Generate a typed client in your language straight from the OpenAPI spec, no hand-written code. Import the same spec into Postman or Insomnia to browse and try the endpoint. To watch availability, poll the readiness endpoint.

Generate a client from the spec:

npx @openapitools/openapi-generator-cli generate -i https://getdaleelak.com/api/v1/openapi.json -g typescript-fetch

Check availability:

curl -s https://getdaleelak.com/readyz

Sample response

{
  "_about": "Neutral price guide for Egypt's licensed currency and gold market. Rates are indicative, not financial advice.",
  "_disclaimer": "For information only. Verify with the seller before transacting.",
  "_license": "Free to use, attribution appreciated.",
  "_self": "/api/v1/feed.json",
  "_docs": "/en/api",
  "_spec": "/api/v1/openapi.json",
  "_changelog": "/api/v1/changelog.json",
  "_terms": "/en/terms",
  "schemaVersion": 1,
  "seriesWindowDays": 30,
  "generatedAt": "2026-09-26T06:00:12.000Z",
  "assets": [
    {
      "id": "USD-EGP",
      "slug": "us-dollar",
      "category": "currencies",
      "kind": "currency",
      "market": "competitive",
      "unit": "EGP/USD",
      "decimals": 2,
      "defaultSide": "sell",
      "asOf": "2026-09-26",
      "observedAt": "2026-09-26T05:58:00.000Z",
      "freshness": {
        "state": "fresh",
        "stale": false
      },
      "confidence": {
        "level": "high",
        "checks": 3
      },
      "directions": {
        "sell": {
          "best": {
            "seller": "Abu Dhabi Islamic Bank",
            "sellerAr": "مصرف أبو ظبي الإسلامي",
            "value": 51.72
          },
          "verdict": "favorable",
          "favorability": 0.92,
          "priorDays": 90,
          "signals": {
            "position": {
              "lean": 1
            },
            "trend": {
              "lean": 0,
              "direction": "flat",
              "changePct": 0.1,
              "volatilityPct": 0.3,
              "days": 30
            },
            "official": {
              "lean": 1,
              "diffPct": 0.2
            },
            "global": {
              "diffPct": -0.4,
              "notable": false
            }
          }
        },
        "buy": {
          "best": {
            "seller": "Egyptian Gulf Bank",
            "sellerAr": "البنك المصري الخليجي",
            "value": 51.8
          },
          "verdict": "ordinary",
          "favorability": 0.41,
          "priorDays": 90,
          "signals": {
            "position": {
              "lean": 0
            },
            "trend": null,
            "official": {
              "lean": 0,
              "diffPct": 0.1
            },
            "global": {
              "diffPct": 0.3,
              "notable": false
            }
          }
        }
      },
      "benchmark": {
        "buy": 51.63,
        "sell": 51.73
      },
      "global": {
        "value": 51.95
      },
      "series": [
        {
          "date": "2026-09-24",
          "buyLo": 51.6,
          "buyHi": 51.75,
          "sellLo": 51.7,
          "sellHi": 51.9,
          "bench": 51.7
        },
        {
          "date": "2026-09-25",
          "buyLo": 51.62,
          "buyHi": 51.78,
          "sellLo": 51.72,
          "sellHi": 51.92,
          "bench": 51.72
        }
      ],
      "sellers": [
        {
          "seller": "Abu Dhabi Islamic Bank",
          "sellerAr": "مصرف أبو ظبي الإسلامي",
          "buy": 51.72,
          "sell": 51.82
        },
        {
          "seller": "National Bank of Egypt",
          "sellerAr": "البنك الأهلي المصري",
          "buy": 51.65,
          "sell": 51.75
        }
      ]
    }
  ]
}

Recipes

Poll without re-downloading

Send the last ETag. A 304 means nothing changed, so there is no body to parse.

let etag = null;
async function poll() {
  const res = await fetch("https://getdaleelak.com/api/v1/feed.json", { headers: etag ? { "If-None-Match": etag } : {} });
  if (res.status === 304) return;          // nothing changed, no body
  etag = res.headers.get("ETag");
  const data = await res.json();
  // ... use data
}

Get the best rate for your direction

Pick the asset, then read directions[side].best for the seller and the rate.

const data = await (await fetch("https://getdaleelak.com/api/v1/feed.json")).json();
const usd = data.assets.find(a => a.slug === "us-dollar");
const best = usd.directions.sell.best;    // { seller, value } for selling
console.log(best.seller, best.value);

Handle a rate limit (429)

Wait the Retry-After seconds, then retry. Caching with the ETag keeps you well under the limit.

const res = await fetch("https://getdaleelak.com/api/v1/feed.json");
if (res.status === 429) {
  const wait = Number(res.headers.get("Retry-After") || 5);
  await new Promise(r => setTimeout(r, wait * 1000));
  // then retry
}

Limits

The free API is meant for about 1,000 requests a day from one address, and allows short bursts of up to 240 requests per minute. Prices change at most about once an hour, so calling every 5 minutes or so is plenty, and please cache the data. Every response returns your remaining per-minute budget in the RateLimit headers, and RateLimit-Policy carries your full quota so you can pace requests up front. The Daily-Limit, Daily-Used and Daily-Reset headers show the daily amount, how much of it this address used today, and the seconds until it resets at midnight Cairo time. Going over the minute limit returns a 429, and heavy anonymous traffic is slowed first.

Tell us who you are

If you use the API in production or at volume, please identify yourself so we can reach you about limits or changes. Set an X-Contact request header with a URL or email, or include one in your User-Agent. Anonymous heavy traffic may be rate limited first.

curl -s -H 'X-Contact: [email protected]' https://getdaleelak.com/api/v1/feed.json

Plans

FreeAvailable now
  • The full feed, all assets
  • 240 requests per minute, about 1,000 a day
  • No key and no sign-up
  • For information only
ProComing soon

A more powerful, feature-rich tier is on the way. It is not available yet, and it will be announced right here.

  • Higher limits and priority
  • Deeper history
  • Push updates by webhook
  • An uptime commitment and support
  • A commercial license
Our uptime record, checked independently

Common questions

Is there an API for exchange rates and gold prices in Egypt?

Yes. Daleelak offers a free JSON API for Egypt's licensed currency and gold prices at /api/v1/feed.json. No key and no sign-up, and CORS is open, so you can call it from a browser or a server.

What is the best exchange rate and gold price API for Egypt?

Daleelak is built for exactly this. It is free with no key, covers licensed banks and dealers only with no black-market rates, ranks the best seller for each direction (buy and sell), adds an honest today-versus-history verdict, and includes the official central bank rate and the world price for context. It ships a published OpenAPI contract, works in English and Arabic, and is CORS-open. Compare it on those points.

Is the Daleelak API free?

Yes. The feed is free to use, with no key and no sign-up. A paid tier with higher limits is planned.

Do I need an API key or an account?

No. It is one open GET request, and CORS is open, so you can call it straight from the browser.

What does the API return?

Every tracked asset, the best licensed seller to buy and to sell, the day's verdict, the official and global rates, and recent daily history, all as JSON.

Which assets and sellers does it cover?

Currencies like the US dollar and euro, plus gold, priced across licensed banks and dealers in Egypt. No black-market rates.

What are the rate limits?

The free tier is meant for around 1,000 requests a day from one address, and allows short bursts of up to 240 requests per minute. Prices change at most about once an hour, so calling every 5 minutes or so is plenty. Every response returns your remaining budget in the RateLimit headers, and the Daily-Limit, Daily-Used and Daily-Reset headers show how much of the daily amount you used today. Heavy anonymous traffic is rate limited first.

Can I use it commercially?

The data is for information only, not financial advice. A link back to Daleelak is appreciated, and a commercial license is coming with the paid tier.

How often is the data updated?

It refreshes through the day, and each day's close is recorded as history.

How reliable is the API, and how do I know if it is down?

An independent monitor checks the website, the API, and whether prices are still updating every few minutes, and publishes the live uptime and every incident at status.getdaleelak.com. For your own checks, GET /readyz returns 200 when the data is fresh and 503 when it is not.

How much history does the API return?

The free tier returns the most recent 30 days of daily history per asset, in the seriesWindowDays field. The verdict is still measured against up to 90 days behind the scenes, so the day's read is unchanged. Full daily history, per-seller history, and history beyond 90 days are part of the paid tier.

Is the verdict a prediction?

No. The verdict says how good today's best rate is for your direction compared with recent history (up to about 90 days), read from where today sits plus the trend and the gap to the official and world rates. It describes today, it never forecasts tomorrow. When there is too little history to judge, it returns calibrating.

Can I request only certain assets?

Yes. Ask for whole categories with ?category=currencies or ?category=metals, or for specific assets with ?asset=us-dollar or ?asset=gold-24k. List several with commas, and combine both if you like.

How do I avoid downloading data that has not changed?

Every response includes an ETag. Send it back in an If-None-Match header and you get a quick Not Modified reply when nothing has changed.

Fair use

  • Please use the API instead of scraping the pages.
  • A link back to Daleelak is appreciated.
  • Rates are indicative and for information only, not financial advice.
Read the full terms