{"openapi":"3.1.0","info":{"title":"Daleelak Public Feed API","version":"v1.0","description":"Neutral price feed for Egypt's licensed money market. One GET returns every tracked asset with the best licensed seller by direction, an honest today-vs-history verdict, official and global benchmarks, and daily history. Language-neutral and source-free. No key, no sign-up, CORS-open. Rates are indicative, for information only, not financial advice.","license":{"name":"Free to use, attribution appreciated","url":"https://getdaleelak.com/en/terms"}},"servers":[{"url":"https://getdaleelak.com","description":"This origin"}],"security":[],"paths":{"/api/v1/feed.json":{"get":{"summary":"Get the full price feed","description":"Returns all tracked assets. Filter to one or more categories with ?category=. Supports conditional requests: send If-None-Match (or If-Modified-Since) and receive 304 when nothing changed. The response shape is identical filtered or not.","operationId":"getFeed","parameters":[{"name":"category","in":"query","required":false,"description":"Comma-separated category slugs to include (e.g. currencies or currencies,metals). Omit for all. An unknown value returns 400 with the valid list.","schema":{"type":"string"},"example":"currencies"},{"name":"If-None-Match","in":"header","required":false,"description":"A previously returned strong ETag. Returns 304 when the data is unchanged.","schema":{"type":"string"}},{"name":"If-Modified-Since","in":"header","required":false,"description":"An HTTP-date. Returns 304 when the data has not changed since then. If-None-Match takes precedence.","schema":{"type":"string"}}],"responses":{"200":{"description":"The feed (all assets, or the filtered subset).","headers":{"ETag":{"description":"Strong content validator. Send it back as If-None-Match.","schema":{"type":"string"}},"Last-Modified":{"description":"When the data last changed (HTTP-date).","schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"},"example":"public, max-age=300"},"RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Feed"}}}},"304":{"description":"Not modified — the client's cached copy is current. No body."},"400":{"description":"An unknown category was requested.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"validCategories":{"type":"array","items":{"type":"string"}}}}}}},"429":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}}},"components":{"schemas":{"Feed":{"type":"object","properties":{"_about":{"type":"string"},"_disclaimer":{"type":"string"},"_license":{"type":"string"},"schemaVersion":{"type":"integer","description":"Body schema version (currently 1). The URL path (v1) is the primary contract."},"generatedAt":{"type":"string","description":"When this response was built, absolute UTC ISO 8601. Excluded from the ETag so identical data keeps one tag across restarts."},"assets":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}}}},"Asset":{"type":"object","properties":{"id":{"type":"string","description":"Machine id, e.g. USD-EGP."},"slug":{"type":"string","description":"URL keyword slug, e.g. us-dollar."},"category":{"type":"string","description":"Public taxonomy slug, e.g. currencies, metals. Filterable via ?category=."},"kind":{"type":"string","description":"Asset kind, e.g. currency, metal."},"market":{"type":"string","enum":["competitive","sole","reference"],"description":"Seller structure. A reference asset carries a price but no seller list."},"unit":{"type":"string","description":"Display unit code, e.g. EGP/USD or EGP/g."},"decimals":{"type":"integer"},"defaultSide":{"type":"string","enum":["sell","buy"]},"asOf":{"type":"string","description":"Business date (Cairo) the numbers belong to, YYYY-MM-DD."},"observedAt":{"type":["string","null"],"description":"Freshest source instant as an absolute UTC ISO 8601 timestamp."},"freshness":{"type":"object","properties":{"state":{"type":"string"},"stale":{"type":"boolean"}}},"confidence":{"type":"object","properties":{"level":{"type":"string"},"checks":{"type":"integer","description":"How many independent sources corroborated this day."}}},"directions":{"type":"object","properties":{"sell":{"$ref":"#/components/schemas/Direction"},"buy":{"$ref":"#/components/schemas/Direction"}}},"benchmark":{"type":["object","null"],"description":"Official central-bank rate (two-sided).","properties":{"buy":{"type":["number","null"]},"sell":{"type":["number","null"]}}},"global":{"type":["object","null"],"description":"Global mid-market reference (single value).","properties":{"value":{"type":["number","null"]}}},"series":{"type":"array","description":"Daily history envelope (up to the lookback window): per-day min/max across sellers plus the official line.","items":{"type":"object","properties":{"date":{"type":"string"},"buyLo":{"type":["number","null"]},"buyHi":{"type":["number","null"]},"sellLo":{"type":["number","null"]},"sellHi":{"type":["number","null"]},"bench":{"type":["number","null"]}}}},"sellers":{"type":"array","description":"Today's full seller table (empty for a reference asset).","items":{"type":"object","properties":{"seller":{"type":"string"},"sellerAr":{"type":["string","null"]},"buy":{"type":["number","null"]},"sell":{"type":["number","null"]}}}}}},"Direction":{"type":"object","description":"The answer for one direction (sell or buy).","properties":{"best":{"type":["object","null"],"description":"Best licensed seller for this direction. Null for a reference asset (no transactable seller) or when unknown.","properties":{"seller":{"type":["string","null"]},"sellerAr":{"type":["string","null"]},"value":{"type":["number","null"]}}},"verdict":{"type":"string","description":"Verdict TIER (favorable, weak, ordinary, mixed, calibrating). Localize downstream.","enum":["favorable","weak","ordinary","mixed","calibrating"]},"favorability":{"type":["number","null"],"description":"0..1 position of today vs recent history for this side, or null when history is too thin."},"priorDays":{"type":"integer","description":"Prior days of history the percentile is based on."},"signals":{"type":"object","description":"Language-neutral verdict signal: an integer lean (+1 favorable, 0 neutral, -1 unfavorable for the side) plus the raw numbers the sentence needs.","properties":{"position":{"type":"object","properties":{"lean":{"type":"integer"}}},"trend":{"type":["object","null"],"properties":{"lean":{"type":"integer"},"direction":{"type":["string","null"]},"changePct":{"type":["number","null"]},"volatilityPct":{"type":["number","null"]},"days":{"type":["number","null"]}}},"official":{"type":["object","null"],"properties":{"lean":{"type":"integer"},"diffPct":{"type":["number","null"]}}},"global":{"type":["object","null"],"properties":{"diffPct":{"type":["number","null"]},"notable":{"type":"boolean"}}}}}}}}},"externalDocs":{"description":"Human docs and guide","url":"https://getdaleelak.com/en/api"},"x-rateLimit":{"window":"60s","requests":240,"spec":"https://getdaleelak.com/api/v1/openapi.json"}}