For mosque boards and developers
Building on Hasanats
This page does not only list what is open. It says what we want you to do with it, and where we put the brake on ourselves.
Everything below was really called against app.hasanats.com, and what came back is written down next to it. A route we did not see working ourselves is not on this page. Nothing here needs a key, except where it explicitly says so.
Three things we would like to see happen
Your mosque puts its own prayer times on its own website
For a board member or a volunteer with access to the mosque website
This is what it was built for. Most mosque sites either have no times at all, or a photo of last year's sheet. This block is right every day and goes in with one line of HTML. No script, no account, no cookie.
Look up your mosque
You need the slug, the part in the URL of your profile. Search by name or city.
curl 'https://app.hasanats.com/api/masjids/search?q=taoubat'Paste the frame on your page
Replace the slug with your own. Pick your own height.
<iframe
src="https://app.hasanats.com/embed/tijden/taoubat-moskee-antwerpen"
title="Gebedstijden"
width="100%" height="320"
style="border:0" loading="lazy"></iframe>- What you may do with it
- Put it on your own site, including a site carrying ads or a shop. We charge nothing and we keep no per-person visitor records.
- What we ask in return
- Leave the footer link to the full profile in place. That is the whole return. If a time is wrong, report it with the button on your profile: we would rather fix the source than have you keep a copy that drifts again.
You calculate prayer times yourself
For a developer, a school, or a screen in a hallway
This route calculates from coordinates, a date and a timezone. No mosque directory is involved, so nobody else's licence sits on it. Six methods, two madhabs, and the qibla bearing comes along for free.
Mind the body shape: date, coords and timezone are all required. A flat {lat, lng, date} returns 400 with invalid_prayer.
The call
curl -X POST https://app.hasanats.com/api/prayer/times \
-H 'content-type: application/json' \
-d '{"date":{"year":2026,"month":9,"day":9},
"coords":{"lat":51.209,"lng":4.391,"timezone":2},
"method":"MWL","madhab":"shafi"}'What comes back
{"success":true,"data":{
"times":{"fajr":"05:09","sunrise":"07:08","dhuhr":"13:40",
"asr":"17:15","maghrib":"20:12","isha":"22:03"},
"qibla":123.9,"method":"MWL",
"methods":["MWL","ISNA","EGYPT","KARACHI","MAKKAH","DIYANET"]},
"error":null}- What you may do with it
- Anything. This is arithmetic on public astronomy, not somebody else's database.
- What we ask in return
- Name Hasanats next to the number, so anyone in doubt can trace where it came from. And keep to the places you actually show: a mosque is one set of coordinates, not a loop over the whole directory.
An assistant or a researcher uses the directory
For AI crawlers, journalists, public bodies and research
For orientation there is llms.txt: what this site is, how many mosques it holds, per country, and how the profile pages are built. That file is generated from the directory at build time, so its numbers cannot drift away from the data.
If you want figures about the directory itself, coverage per country or counts per municipality, that runs through /api/partner/v1/ with a named key. Without a key you get 401. That is not a fault, that is the door. Request a key at dev@digitalfarmers.co: we record who you are, which figures you need and what for, and the key expires by itself.
What you do not get is the directory in bulk. The reason is under Sources below, and it is not that we are stingy.
- What you may do with it
- Cite aggregates, naming Hasanats as the source and the date you retrieved them.
- What we ask in return
- Link to the mosque's own profile instead of copying the fields. Then a reader sees the correction the board sent last week, and so do you.
The sources under the directory, and what that means
The directory holds 6192 mosques (snapshot 2026-09-11). Of those, 5738 records touch the Mawaqit directory and 674 records touch OpenStreetMap; 220 are in both. On top of that layer sits our own: board claims, visitor corrections, announcements, the khutbah archive, and the times we calculate ourselves.
The OpenStreetMap records are under the Open Database License 1.0. That licence asks for attribution with a visible link, and it asks that a derivative database you make public is itself released under ODbL. A page that shows the data is a Produced Work, where the credit is enough. Sharing the database is a different thing. That is why the single lookups above are open and bulk is not.
The Mawaqit records are tighter. Their terms forbid reproduction and republication without written permission, and they state their API is not public. Until that is settled on paper we do not pass that layer on, not even piece by piece. That is a choice against our own convenience.
What this means for you, in one sentence: showing a mosque is fine, taking the directory is not.
Map data and addresses: © OpenStreetMap contributors, ODbL 1.0 · Mawaqit
What we deliberately do not document
These paths exist, and you could find them. We list them with the reason attached, so you do not have to guess why they are missing from the table above.
| Path | Why not |
|---|---|
/api/quran/{soera} | Returns the Dutch Siregar translation. We hold no written permission for it (docs/RECHTEN-EN-LICENTIES.md, 8 Sep 2026), so we do not hand it on as a reusable source. |
/api/masjids/nearby | On 9 Sep 2026 it returned {"masjids":[],"error":true}: empty, with an error flag. We do not document a route we measured broken. |
/api/masjids/nearby-lite | It works, but it hands out coordinates in bulk. That is the directory itself, which we may not redistribute (see the sources above). Bulk goes through a partner key. |
/api/recitations/{id}/audio | Recitations under CC BY-SA 4.0. The share-alike obligation on our own material is unresolved, so we invite nobody to redistribute them. |
/api/gezondheid, /api/capabilities | They exist on the API but were not reachable through app.hasanats.com on 9 Sep 2026 (404, the Next shell does not proxy them). We do not document a path we could not fetch ourselves. |
Everything we measured
The status and the keys are what actually came back that day. If you build on this, watch /api/version: it reports the commit the site and the API are running.
| Route | Status | What comes back | Shape fixed? |
|---|---|---|---|
GET /api/masjids/search?q= | 200 | masjids | no |
GET /embed/tijden/{slug} | 200 | HTML | no |
POST /api/prayer/times | 200 | success, data, errordata: times, qibla, method, methods | no |
GET /llms.txt | 200 | text/plain | no |
GET /api/v1/bronnen | 200 | success, data, errordata: bronnen, aantal | yes, /v1/ |
GET /api/partner/v1/stats | 401 | success, error, data | yes, /v1/ |
GET /api/partner/v1/coverage?country= | 401 | success, error, data | yes, /v1/ |
GET /api/quran/surahs | 200 | success, data, errordata: number, arabicName, transliteration, englishMeaning, dutchMeaning, revelationPlace, ayahCount | no |
GET /api/asma | 200 | success, data, errordata: names, total, reviewed, canonical, note | no |
GET /api/council | 200 | success, data, errordata: telling, leden, aantal, nagekeken, ondertekenaars | no |
GET /api/health | 200 | success, data, errordata: status | no |
GET /api/version | 200 | success, data, errordata: companion, api, inSync | no |
What we do not promise
Only a path with a version number in it carries a promise about its shape. Today that is /api/partner/v1/. Everything else is a measurement from the date above: it works, it is meant to keep working, but we can change it without issuing a new number first.
The two things we do want you to be able to count on are the times widget and the prayer-time calculation. If those have to change, it lands on this page first and the old behaviour runs alongside the new one for a while.
Prayer times are a calculation, not a law. Where a mosque publishes its own times, those beat any calculation, including ours. Always show them with the date attached, never as a fixed schedule.
A key, a mistake, or a question
Mail dev@digitalfarmers.co. For a partner key: who you are, which figures you need and what for. For wrong data on a mosque, the button on the profile itself is faster, because it reaches the board.
If you are from Mawaqit or from a mosque network and want us to handle your data differently: write to us and we will adjust.
This page is a good-faith account of what we measured, not legal advice.