# Jadwal Sholat & Hijriah — Zapi reference > Indonesian prayer schedules for 517 cities sourced from the Ministry of Religious Affairs dataset, plus Hijri/Gregorian conversion and qibla direction. **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys. **Response envelope:** `{ content, message, errors }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zpi.web.id/api/indonesia/sholat-kemenag - Endpoint catalog: https://zpi.web.id/category/indonesia - Concise index: https://zpi.web.id/llms.txt - Full reference: https://zpi.web.id/llms-full.txt --- ## Jadwal Sholat & Hijriah **Category:** indonesia · **Slug:** `sholat-kemenag` **Detail page:** https://zpi.web.id/api/indonesia/sholat-kemenag Indonesian prayer schedules for 517 cities sourced from the Ministry of Religious Affairs dataset, plus Hijri/Gregorian conversion and qibla direction. **Tags:** sholat, jadwal-sholat, hijriah, islam, kemenag, indonesia ### Source Info Dataset provenance and its last update date. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/source-info` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `dummy` | string | query | no | Unused; this endpoint takes no input | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/source-info?dummy=VALUE" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/source-info?dummy=VALUE", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/source-info?dummy=VALUE", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "name": "Jadwal Sholat", "source": "bimasislam.kemenag.go.id", "language": "Indonesia", "provider": "sholat-kemenag", "lastUpdate": "25 November 2025", "description": "API jadwal Sholat bersumber dari Kementrian Agama Indonesia" } ``` --- ### City List All 517 regencies/cities that have a prayer schedule. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-list` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `keyword` | string | query | no | Filter by city name | | `page` | number | query | no | Page number (starts at 1). Default 1 | | `count` | number | query | no | Items per page. Default 100, max 600 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-list?keyword=bandung&page=1&count=1" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-list?keyword=bandung&page=1&count=1", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-list?keyword=bandung&page=1&count=1", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "page": 1, "count": 10, "items": [ { "city": "KAB. ACEH BARAT", "cityId": "c4ca4238a0b923820dcc509a6f75849b" }, { "city": "KAB. ACEH BARAT DAYA", "cityId": "c81e728d9d4c2f636f067f89cc14862c" }, { "city": "KAB. ACEH BESAR", "cityId": "eccbc87e4b5ce2fe28308fd9f2a7baf3" }, { "city": "KAB. ACEH JAYA", "cityId": "a87ff679a2f3e71d9181a67b7542122c" }, { "city": "KAB. ACEH SELATAN", "cityId": "e4da3b7fbbce2345d7772b0674a318d5" }, { "city": "KAB. ACEH SINGKIL", "cityId": "1679091c5a880faf6fb5e6087eb1b2dc" }, { "city": "KAB. ACEH TAMIANG", "cityId": "8f14e45fceea167a5a36dedd4bea2543" }, { "city": "KAB. ACEH TENGAH", "cityId": "c9f0f895fb98ab9159f51fd0297e236d" } ], "total": 517, "hasMore": true, "nextPage": 2, "provider": "sholat-kemenag", "returned": 10 } ``` --- ### City Detail One city by id. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-detail` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `cityId` | string | query | yes | City id from city-list/city-search | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-detail?cityId=eda80a3d5b344bc40f3bc04f65b7a357" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-detail?cityId=eda80a3d5b344bc40f3bc04f65b7a357", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-detail?cityId=eda80a3d5b344bc40f3bc04f65b7a357", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "city": "KOTA KEDIRI", "cityId": "eda80a3d5b344bc40f3bc04f65b7a357", "provider": "sholat-kemenag" } ``` --- ### City Search Find cities by name keyword. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-search` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `q` | string | query | yes | City name keyword, at least 2 characters | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-search?q=kediri" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-search?q=kediri", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/city-search?q=kediri", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 3, "items": [ { "city": "KAB. BANDUNG", "cityId": "0777d5c17d4066b82ab86dff8a46af6f" }, { "city": "KAB. BANDUNG BARAT", "cityId": "fa7cdfad1a5aaf8370ebeda47a1ff1c3" }, { "city": "KOTA BANDUNG", "cityId": "fc221309746013ac554571fbd180e1c8" } ], "query": "bandung", "provider": "sholat-kemenag" } ``` --- ### Prayer Times Today Today's prayer schedule for one city, by id or name. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-today` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `cityId` | string | query | no | City id from city-list/city-search. One of cityId or city is required | | `city` | string | query | no | City name to auto-resolve (alternative to cityId) | | `tz` | string | query | no | Timezone used to pick today's date. Default Asia/Jakarta | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-today?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&tz=Asia%2FJakarta" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-today?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&tz=Asia%2FJakarta", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-today?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&tz=Asia%2FJakarta", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "city": "KAB. KEDIRI", "date": "2026-08-29", "isya": "18:44", "ashar": "14:55", "dhuha": "05:59", "imsak": "04:09", "subuh": "04:19", "cityId": "9188905e74c28e489b44e954ec0b9bca", "dzuhur": "11:36", "terbit": "05:32", "maghrib": "17:34", "provider": "sholat-kemenag", "province": "JAWA TIMUR", "dateLabel": "Sabtu, 29/08/2026" } ``` --- ### Prayer Times by Date Prayer schedule for one date and city. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-daily` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `cityId` | string | query | no | City id from city-list/city-search. One of cityId or city is required | | `city` | string | query | no | City name to auto-resolve (alternative to cityId) | | `date` | string | query | yes | Date in YYYY-MM-DD | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-daily?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&date=2026-08-29" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-daily?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&date=2026-08-29", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-daily?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&date=2026-08-29", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "city": "KOTA JAKARTA", "date": "2026-08-29", "isya": "19:05", "ashar": "15:15", "dhuha": "06:19", "imsak": "04:29", "subuh": "04:39", "cityId": "58a2fc6ed39fd083f55d4182bf88826d", "dzuhur": "11:57", "terbit": "05:51", "maghrib": "17:56", "provider": "sholat-kemenag", "province": "DKI JAKARTA", "dateLabel": "Sabtu, 29/08/2026" } ``` --- ### Prayer Times by Month Whole-month prayer schedule for one city. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-monthly` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `cityId` | string | query | no | City id from city-list/city-search. One of cityId or city is required | | `city` | string | query | no | City name to auto-resolve (alternative to cityId) | | `year` | number | query | yes | Gregorian year | | `month` | number | query | yes | Gregorian month, 1-12 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-monthly?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&year=2026&month=8" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-monthly?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&year=2026&month=8", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-monthly?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&year=2026&month=8", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "city": "KAB. KEDIRI", "year": 2026, "count": 31, "items": [ { "date": "2026-08-01", "isya": "18:47", "ashar": "15:02", "dhuha": "06:10", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:42", "terbit": "05:42", "maghrib": "17:35", "dateLabel": "Sabtu, 01/08/2026" }, { "date": "2026-08-02", "isya": "18:47", "ashar": "15:02", "dhuha": "06:10", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:42", "terbit": "05:42", "maghrib": "17:35", "dateLabel": "Minggu, 02/08/2026" }, { "date": "2026-08-03", "isya": "18:46", "ashar": "15:02", "dhuha": "06:10", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:42", "terbit": "05:41", "maghrib": "17:35", "dateLabel": "Senin, 03/08/2026" }, { "date": "2026-08-04", "isya": "18:46", "ashar": "15:02", "dhuha": "06:09", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:41", "maghrib": "17:35", "dateLabel": "Selasa, 04/08/2026" }, { "date": "2026-08-05", "isya": "18:46", "ashar": "15:02", "dhuha": "06:09", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:41", "maghrib": "17:35", "dateLabel": "Rabu, 05/08/2026" }, { "date": "2026-08-06", "isya": "18:46", "ashar": "15:02", "dhuha": "06:09", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:41", "maghrib": "17:35", "dateLabel": "Kamis, 06/08/2026" }, { "date": "2026-08-07", "isya": "18:46", "ashar": "15:02", "dhuha": "06:08", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:40", "maghrib": "17:35", "dateLabel": "Jumat, 07/08/2026" }, { "date": "2026-08-08", "isya": "18:46", "ashar": "15:02", "dhuha": "06:08", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:40", "maghrib": "17:35", "dateLabel": "Sabtu, 08/08/2026" } ], "month": 8, "cityId": "9188905e74c28e489b44e954ec0b9bca", "provider": "sholat-kemenag", "province": "JAWA TIMUR" } ``` --- ### Prayer Times Range Prayer schedule across up to 12 months, paced against the source rate limit. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-range` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `cityId` | string | query | no | City id from city-list/city-search. One of cityId or city is required | | `city` | string | query | no | City name to auto-resolve (alternative to cityId) | | `from` | string | query | yes | First month in YYYY-MM | | `to` | string | query | yes | Last month in YYYY-MM, at most 12 months after `from` | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-range?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&from=2026-08&to=2026-10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-range?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&from=2026-08&to=2026-10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/jadwal-range?cityId=eda80a3d5b344bc40f3bc04f65b7a357&city=kediri&from=2026-08&to=2026-10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "to": "2026-09", "city": "KAB. KEDIRI", "from": "2026-08", "count": 61, "items": [ { "date": "2026-08-01", "isya": "18:47", "ashar": "15:02", "dhuha": "06:10", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:42", "terbit": "05:42", "maghrib": "17:35", "dateLabel": "Sabtu, 01/08/2026" }, { "date": "2026-08-02", "isya": "18:47", "ashar": "15:02", "dhuha": "06:10", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:42", "terbit": "05:42", "maghrib": "17:35", "dateLabel": "Minggu, 02/08/2026" }, { "date": "2026-08-03", "isya": "18:46", "ashar": "15:02", "dhuha": "06:10", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:42", "terbit": "05:41", "maghrib": "17:35", "dateLabel": "Senin, 03/08/2026" }, { "date": "2026-08-04", "isya": "18:46", "ashar": "15:02", "dhuha": "06:09", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:41", "maghrib": "17:35", "dateLabel": "Selasa, 04/08/2026" }, { "date": "2026-08-05", "isya": "18:46", "ashar": "15:02", "dhuha": "06:09", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:41", "maghrib": "17:35", "dateLabel": "Rabu, 05/08/2026" }, { "date": "2026-08-06", "isya": "18:46", "ashar": "15:02", "dhuha": "06:09", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:41", "maghrib": "17:35", "dateLabel": "Kamis, 06/08/2026" }, { "date": "2026-08-07", "isya": "18:46", "ashar": "15:02", "dhuha": "06:08", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:40", "maghrib": "17:35", "dateLabel": "Jumat, 07/08/2026" }, { "date": "2026-08-08", "isya": "18:46", "ashar": "15:02", "dhuha": "06:08", "imsak": "04:16", "subuh": "04:26", "dzuhur": "11:41", "terbit": "05:40", "maghrib": "17:35", "dateLabel": "Sabtu, 08/08/2026" } ], "cityId": "9188905e74c28e489b44e954ec0b9bca", "hasMore": false, "provider": "sholat-kemenag", "province": "JAWA TIMUR", "monthsReturned": 2, "monthsRequested": 2 } ``` --- ### Hijri Date Today Today in both the Gregorian and Hijri calendars. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-today` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `adj` | number | query | no | Whole-day offset applied by the source. Default 0 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-today?adj=0" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-today?adj=0", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-today?adj=0", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "hijri": { "day": 17, "date": "Sabtu, 17 Rabiulawal 1448 H", "year": 1448, "month": 3, "dayName": "Sabtu", "monthName": "Rabiulawal" }, "method": "standar", "provider": "sholat-kemenag", "gregorian": { "day": 29, "date": "Sabtu, 29 Agustus 2026", "year": 2026, "month": 8, "dayName": "Sabtu", "monthName": "Agustus" }, "adjustment": 0 } ``` --- ### Gregorian to Hijri Convert a Gregorian date to Hijri; the source's method and day adjustment are returned with it. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-convert` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `date` | string | query | yes | Gregorian date in YYYY-MM-DD | | `adj` | number | query | no | Whole-day offset applied by the source. Default 0 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-convert?date=2026-08-29&adj=0" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-convert?date=2026-08-29&adj=0", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-convert?date=2026-08-29&adj=0", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "hijri": { "day": 17, "date": "Sabtu, 17 Rabiulawal 1448 H", "year": 1448, "month": 3, "dayName": "Sabtu", "monthName": "Rabiulawal" }, "method": "standar", "provider": "sholat-kemenag", "gregorian": { "day": 29, "date": "Sabtu, 29 Agustus 2026", "year": 2026, "month": 8, "dayName": "Sabtu", "monthName": "Agustus" }, "adjustment": 0 } ``` --- ### Hijri to Gregorian Convert a Hijri date to Gregorian. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-to-masehi` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `date` | string | query | yes | Hijri date in YYYY-MM-DD | | `adj` | number | query | no | Whole-day offset applied by the source. Default 0 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-to-masehi?date=1448-03-15&adj=0" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-to-masehi?date=1448-03-15&adj=0", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-to-masehi?date=1448-03-15&adj=0", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "hijri": { "day": 15, "date": "Kamis, 15 Rabiulawal 1448 H", "year": 1448, "month": 3, "dayName": "Kamis", "monthName": "Rabiulawal" }, "method": "standar", "provider": "sholat-kemenag", "gregorian": { "day": 27, "date": "Kamis, 27 Agustus 2026", "year": 2026, "month": 8, "dayName": "Kamis", "monthName": "Agustus" }, "adjustment": 0 } ``` --- ### Hijri Calendar (Month) Every day of one Gregorian month with its Hijri equivalent. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-calendar` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `year` | number | query | yes | Gregorian year | | `month` | number | query | yes | Gregorian month, 1-12 | | `adj` | number | query | no | Whole-day offset applied by the source. Default 0 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-calendar?year=2026&month=8&adj=0" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-calendar?year=2026&month=8&adj=0", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/hijriah-calendar?year=2026&month=8&adj=0", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "year": 2026, "count": 31, "items": [ { "date": "2026-08-01", "dayName": "Sabtu", "hijriDay": 18, "hijriDate": "Sabtu, 18 Safar 1448 H", "hijriYear": 1448, "hijriMonth": 2, "hijriMonthName": "Safar" }, { "date": "2026-08-02", "dayName": "Minggu", "hijriDay": 19, "hijriDate": "Ahad, 19 Safar 1448 H", "hijriYear": 1448, "hijriMonth": 2, "hijriMonthName": "Safar" }, { "date": "2026-08-03", "dayName": "Senin", "hijriDay": 20, "hijriDate": "Senin, 20 Safar 1448 H", "hijriYear": 1448, "hijriMonth": 2, "hijriMonthName": "Safar" }, { "date": "2026-08-04", "dayName": "Selasa", "hijriDay": 21, "hijriDate": "Selasa, 21 Safar 1448 H", "hijriYear": 1448, "hijriMonth": 2, "hijriMonthName": "Safar" }, { "date": "2026-08-05", "dayName": "Rabu", "hijriDay": 22, "hijriDate": "Rabu, 22 Safar 1448 H", "hijriYear": 1448, "hijriMonth": 2, "hijriMonthName": "Safar" }, { "date": "2026-08-06", "dayName": "Kamis", "hijriDay": 23, "hijriDate": "Kamis, 23 Safar 1448 H", "hijriYear": 1448, "hijriMonth": 2, "hijriMonthName": "Safar" }, { "date": "2026-08-07", "dayName": "Jumat", "hijriDay": 24, "hijriDate": "Jumat, 24 Safar 1448 H", "hijriYear": 1448, "hijriMonth": 2, "hijriMonthName": "Safar" }, { "date": "2026-08-08", "dayName": "Sabtu", "hijriDay": 25, "hijriDate": "Sabtu, 25 Safar 1448 H", "hijriYear": 1448, "hijriMonth": 2, "hijriMonthName": "Safar" } ], "month": 8, "total": 31, "method": "standar", "hasMore": false, "provider": "sholat-kemenag", "adjustment": 0 } ``` --- ### Qibla Direction Qibla bearing in degrees from true north for a coordinate. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/qibla` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `lat` | number | query | yes | Latitude, -90 to 90 | | `lng` | number | query | yes | Longitude, -180 to 180 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/qibla?lat=-6.2&lng=106.8" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/qibla?lat=-6.2&lng=106.8", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/qibla?lat=-6.2&lng=106.8", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "latitude": -6.2, "provider": "sholat-kemenag", "direction": 295.1605319853645, "longitude": 106.8 } ``` --- ### Source Usage Stats Monthly request counts reported by the upstream dataset. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/stats` - **Cache TTL:** 600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `year` | number | query | no | Year. Omit for the current year | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/stats?year=2026" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/stats?year=2026", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/stats?year=2026", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "year": null, "count": 8, "items": [ { "hits": 1531509, "year": 2026, "month": 1 }, { "hits": 1315623, "year": 2026, "month": 2 }, { "hits": 2775884, "year": 2026, "month": 3 }, { "hits": 2217113, "year": 2026, "month": 4 }, { "hits": 2827523, "year": 2026, "month": 5 }, { "hits": 2811013, "year": 2026, "month": 6 }, { "hits": 3166694, "year": 2026, "month": 7 }, { "hits": 2256460, "year": 2026, "month": 8 } ], "average": 2362727.38, "provider": "sholat-kemenag" } ``` --- ### Source Health Upstream liveness and uptime. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/indonesia:sholat-kemenag/health` - **Cache TTL:** 60s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `dummy` | string | query | no | Unused; this endpoint takes no input | **cURL:** ```bash curl "https://api.zpi.web.id/v1/indonesia:sholat-kemenag/health?dummy=VALUE" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/health?dummy=VALUE", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/indonesia:sholat-kemenag/health?dummy=VALUE", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "provider": "sholat-kemenag", "timezone": "Asia/Jakarta", "startedAt": "2026-05-26T02:00:46.816Z", "serverTime": "2026-08-29T09:26:32.299Z", "uptimeSeconds": 8234745 } ``` --- _Generated: 2026-08-29T12:25:56.002Z_