In Safari, a few quick taps.
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.
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/v1One 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.jsonCopy a starting point:
curl -s https://getdaleelak.com/api/v1/feed.jsonconst 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"]);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"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.jsonErrors 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.
A ?category= value that is not one we track.
Use a value from validCategories in the response body, or drop the filter.
A ?asset= value that is not a slug or id we track.
Use a value from validAssets in the response body.
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.
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 specThe 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 changelogGenerate 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-fetchCheck availability:
curl -s https://getdaleelak.com/readyz{
"_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
}
]
}
]
}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
}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);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
}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.
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.jsonA more powerful, feature-rich tier is on the way. It is not available yet, and it will be announced right here.
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.
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.
Yes. The feed is free to use, with no key and no sign-up. A paid tier with higher limits is planned.
No. It is one open GET request, and CORS is open, so you can call it straight from the browser.
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.
Currencies like the US dollar and euro, plus gold, priced across licensed banks and dealers in Egypt. No black-market rates.
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.
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.
It refreshes through the day, and each day's close is recorded as history.
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.
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.
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.
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.
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.