Iqamah prayer times API
Free azaan times for any point on Earth, by month or year. No key, no sign-up; responses are cached at the edge.
Endpoints
| Endpoint | Returns |
|---|---|
GET /v1/times/{lat},{lon}/{yyyy-mm}.json | A month of times for a point |
GET /v1/times/{lat},{lon}/{yyyy}.json | A year of times |
GET /v1/ics/{lat},{lon}.ics | A calendar feed of the next 60 days, to subscribe to |
GET /v1/mosques/near/{lat},{lon}.json | Mosques near a point, nearest first (see Mosque times) |
GET /v1/mosque/{id}.json | A mosque's iqamah and Jumu'ah times, as it publishes them, with azaan from every source (see below) |
GET /v1/methods.json | Methods, their angles and the default for each country |
GET /openapi.json | This API described in OpenAPI 3.1, for code generators and API tools |
GET /embed/v1.js | The same calculation in the browser, plus a drop-in widget (see below) |
Example: /v1/times/41.88,-87.63/2026-11.json
Parameters
| Name | Values |
|---|---|
method | One of the methods below. Default: the usual method in the location's country (see methods.json). A country default can carry its own angle: Germany's is MWL with Isha at 16.5°, the common practice there. Naming a method, even method=mwl, gives that method as published. |
asr | standard (Shafi'i, Maliki, Hanbali) or hanafi. Default by country. |
highlat | middle_of_the_night (default), seventh_of_the_night, twilight_angle: how Fajr and Isha are set where twilight does not end. |
tz | An IANA time zone, to override the one found from the coordinates (useful near borders). |
lang | en, ar, fr, id, ms, tr, bn, ur: adds prayer names in that language and a written Hijri date. |
fajr_angle, isha_angle | Degrees below the horizon (above 0, at most 30), replacing the method's own angle; an Isha angle also replaces a fixed Isha interval. Not with method=moonsighting, which sets Fajr and Isha by season. |
source | auto (default): the official authority timetable where one covers the location (see below), otherwise calculated. official: only the authority's times (404 no_official_source elsewhere). calculated: never the authority's. |
Methods
method | Name |
|---|---|
mwl | Muslim World League |
isna | Islamic Society of North America |
egyptian | Egyptian General Authority of Survey |
karachi | University of Islamic Sciences, Karachi |
umm_al_qura | Umm al-Qura University, Makkah |
dubai | Dubai |
kuwait | Kuwait |
qatar | Qatar |
singapore | Majlis Ugama Islam Singapura |
turkey | Diyanet İşleri Başkanlığı, Turkey |
tehran | Institute of Geophysics, University of Tehran |
moonsighting | Moonsighting Committee Worldwide |
jakim | JAKIM, Malaysia |
Response
{
"location": { "lat": 41.88, "lon": -87.63, "tz": "America/Chicago", "country": "US" },
"source": { "kind": "calculated" },
"method": { "id": "isna", "name": "Islamic Society of North America", "fajr": 15, "isha": 15,
"adjustments": { "dhuhr": 1 }, "asr": "standard", "highlat": "middle_of_the_night" },
"days": [
{ "date": "2026-11-01", "hijri": "1448-05-21",
"fajr": "05:05", "sunrise": "06:23", "dhuhr": "11:35", "asr": "14:19", "maghrib": "16:45", "isha": "18:03",
"utc": { "fajr": "2026-11-01T11:05:00Z", "...": "..." } }
],
"api_version": "1c.1",
"defaults_version": "2026-11-13"
}
Times are local to the location's time zone, 24-hour, rounded to the minute; utc gives the same instants in UTC. A time that cannot occur (the sun does not rise near the poles) is null. Above 48° latitude the response marks Fajr and Isha as approximated.
Official timetables
Where a national authority publishes the times, source=auto serves them as published, and each day also carries calculated: the same prayers from method (or the authority's own method), so you can show either. source in the response names the authority and zone, and hijri_official gives the authority's Hijri date where it publishes one. If a zone's timetable is unavailable, the response is calculated with the authority's method and source.note says so.
| Country | Authority | Zones |
|---|---|---|
| Malaysia | JAKIM e-Solat | 60 zones; method jakim (18°/18°, 2 minutes ihtiyat) |
Prayer times for Malaysia: Jabatan Kemajuan Islam Malaysia (JAKIM), e-Solat. Zone boundaries derived from geoBoundaries (CC BY 3.0, geoBoundaries and citypopulation.de). Timetables are refreshed weekly.
Mosque times
/v1/mosque/{id}.json gives one mosque's congregation (iqamah) times and Jumu'ah, from the mosque's own website or timetable provider, for every day we hold from today on. {id} is the mosque's Iqamah ID; find one with the search below.
- Each time keeps the mosque's own wording in
text("5:15 AM", "5 mins after adhan") and, when that is a plain clock time,timeas 24-hour local time; otherwisetimeisnull. A prayer the mosque doesn't list hasiqamah: null. azaanhas three sources side by side:mosque(as the mosque publishes it, ornull),official(the authority's timetable where one covers the mosque, named inofficial), andcalculated(frommethodandasr, or the country's default). Pick the first one your users want that has a time.statusisfresh,stale(nothing stored for today and not read today; the times are still the latest we have, and the mosque is queued to be read again),queued(no times yet; they are on the way, usually within a day) ornone(the mosque publishes no times we can read). When every day we hold is past, the latest is served for today withpublished_fornaming its own date.- Takes
method,asr,highlat,langand the angle parameters for the calculated azaan. Times are in the mosque's time zone. Responses are cached for 5 minutes.
Finding a mosque: /v1/mosques/near/{lat},{lon}.json lists the mosques within radius_km (2, 5, 10 (default), 25 or 50) of a point, nearest first: id, name, distance_km, location, city and country, has_source (whether we can read its times), and the url of its times. limit (1 to 50, default 20) caps the list; total says how many matched. q keeps only names containing it, ignoring case and accents. The list is rebuilt nightly and cached for an hour, so a newly added mosque appears the next day. Example: /v1/mosques/near/51.52,-0.07.json
Calendar feed
Subscribe to https://api.iqamah.net/v1/ics/{lat},{lon}.ics in Google Calendar (Other calendars → From URL), Apple Calendar (File → New Calendar Subscription) or Outlook (Add calendar → Subscribe from web). It holds Fajr, Dhuhr, Asr, Maghrib and Isha for the next 60 days as 15-minute events marked free, and takes the same parameters as the times endpoint; lang names the events. Calendar apps refresh it about once a day. Example: /v1/ics/41.88,-87.63.ics
Embed
One script tag gives a page the same calculated times as the API with no further requests: it calculates in the browser with the same code. It does not carry official timetables; for those, request the API.
<script src="https://api.iqamah.net/embed/v1.js" defer></script>
<!-- A ready-made table of today's times, next prayer highlighted -->
<div data-iqamah-times data-lat="41.88" data-lon="-87.63"></div>
<!-- Or your own markup -->
<script>
addEventListener("DOMContentLoaded", () => {
const today = IqamahTimes.today({ lat: 41.88, lon: -87.63 });
console.log(today.fajr, today.isha); // "HH:MM", local to the location
const nov = IqamahTimes.month({ lat: 41.88, lon: -87.63, month: "2026-11" });
});
</script>
IqamahTimes.today(options) and IqamahTimes.day({ ...options, date }) return one day as in the API's days; IqamahTimes.month({ ...options, month }) returns the same document as the month endpoint; IqamahTimes.settings(options) shows the settings in force. Options are lat, lon and the parameters above. The widget takes them as data- attributes (data-method, data-asr, data-lang, data-fajr-angle…) and its colours from --iqamah-accent, --iqamah-bg, --iqamah-text, --iqamah-muted and --iqamah-line.
Canonical URLs
Each answer has one URL. Coordinates are rounded to 2 decimals (about 1 km), parameters are sorted, and any parameter equal to the location's default is dropped. Other spellings get a 301 redirect to the canonical URL, so cache it, not the original.
Errors
Errors are JSON: {"error":{"code":"bad_coordinates","message":"…"}}. The code values are stable; the messages may change: bad_coordinates, bad_date, bad_method, bad_asr, bad_highlat, bad_tz, bad_lang, bad_source, bad_angle, bad_radius, bad_limit, no_official_source, not_found, rate_limited, blocked, temporarily_unavailable.
Fair use
The API is free and needs no key. To keep it that way for everyone:
- Cache what you fetch. A year file never changes; fetch it once, not on every page view or app launch. On a web page, use the embed rather than calling the API from every visitor's browser.
- Follow redirects and store the canonical URL.
- Send a User-Agent that names your app or site, so we can reach you before blocking anything.
Uncached requests are limited per client; past the limit the API answers 429 with "code":"rate_limited" and a Retry-After header. Questions or a higher limit: api@iqamah.org. To report abuse or ask about a block: support@iqamah.org.
Terms of use
- The API is free for any use, personal or commercial, with no key and no sign-up.
- Please credit Iqamah where you show the times, for example "Prayer times: Iqamah (iqamah.org)". Official timetables carry their authority's attribution in
source.attributionorofficial.attribution; show it with those times. - Mosque times are as each mosque publishes them, read from its website or timetable provider. They can be out of date (see
status) and are not a statement by the mosque; for anything that matters, the mosque's own announcement is the authority. - The API is provided as is, without warranty. We may change limits, and block clients that harm the service for others; we will try to reach you first if your User-Agent says how.
/v1/stays compatible: fields may be added, but none is removed or changed in meaning. A breaking change would come as/v2/, with notice here.
Examples
Working examples in JavaScript, Python, a web page, Home Assistant and an ESP32 clock: github.com/shakillangha/iqamah-prayer-times-api.
Calculation
Times are computed with the open-source adhan library, the same one the Iqamah app uses, so they match what users see there.