{"basePath":"/","definitions":{"content.Banner":{"properties":{"id":{"example":1,"type":"integer"},"image_url":{"type":"string"},"link_url":{"type":"string"},"title":{"type":"string"}},"type":"object"},"content.CalendarEvent":{"properties":{"hijri_day":{"example":1,"type":"integer"},"hijri_month":{"example":10,"type":"integer"},"kind":{"description":"event | fasting_wajib | fasting_sunnah | fasting_forbidden","enum":["event","fasting_wajib","fasting_sunnah","fasting_forbidden"],"example":"event","type":"string"},"label":{"example":"Idul Fitri","type":"string"}},"type":"object"},"content.CalendarRules":{"properties":{"events":{"items":{"$ref":"#/definitions/content.CalendarEvent"},"type":"array"},"fasting_info":{"$ref":"#/definitions/content.FastingInfo"},"fasting_rules":{"items":{"$ref":"#/definitions/content.FastingRule"},"type":"array"}},"type":"object"},"content.Doa":{"properties":{"arabic":{"type":"string"},"featured":{"description":"Featured marks general supplications eligible as \"doa hari ini\".","type":"boolean"},"id":{"example":1,"type":"integer"},"latin":{"type":"string"},"title":{"example":"Doa Pagi Hari","type":"string"},"translation":{"type":"string"}},"type":"object"},"content.Dzikir":{"properties":{"id":{"example":1,"type":"integer"},"text":{"example":"Subhanallah","type":"string"}},"type":"object"},"content.FastingCard":{"properties":{"description":{"example":"9 Dzulhijjah (untuk non-jamaah haji)","type":"string"},"title":{"example":"Puasa Arafah","type":"string"}},"type":"object"},"content.FastingInfo":{"properties":{"forbidden":{"items":{"$ref":"#/definitions/content.FastingCard"},"type":"array"},"sunnah":{"items":{"$ref":"#/definitions/content.FastingCard"},"type":"array"}},"type":"object"},"content.FastingRule":{"properties":{"excluded_months":{"description":"Hijri months in which the rule does not apply (Ramadan = 9)","items":{"type":"integer"},"type":"array"},"hijri_days":{"description":"Hijri days of every month, e.g. [13,14,15]","items":{"type":"integer"},"type":"array"},"label":{"example":"Puasa Senin (sunnah)","type":"string"},"weekday":{"description":"ISO weekday: 1 = Monday ... 7 = Sunday","example":1,"type":"integer"}},"type":"object"},"content.Tahlil":{"properties":{"sections":{"items":{"$ref":"#/definitions/content.TahlilSection"},"type":"array"},"title":{"example":"Tahlil","type":"string"}},"type":"object"},"content.TahlilSection":{"properties":{"arabic":{"type":"string"},"id":{"example":1,"type":"integer"},"translation":{"type":"string"},"transliteration":{"type":"string"}},"type":"object"},"content.ZakatConfig":{"properties":{"gold_price_per_gram":{"description":"Gold price per gram in rupiah; null until it has been configured.","type":"number"},"nisab_amount":{"description":"NisabGoldGrams x GoldPricePerGram; null while the price is unknown.","type":"number"},"nisab_gold_grams":{"description":"Nisab of zakat maal in grams of gold.","example":85,"type":"number"},"updated_at":{"description":"When the gold price was last changed.","type":"string"}},"type":"object"},"core.StandardResponse":{"properties":{"code":{"type":"integer"},"data":{},"message":{"type":"string"},"status":{"type":"string"},"timestamp":{"type":"string"}},"type":"object"},"hadits.Hadits":{"properties":{"arab":{"type":"string"},"id":{"type":"string"},"indonesia":{"type":"string"},"number":{"type":"integer"}},"type":"object"},"hadits.HaditsPage":{"properties":{"current_page":{"type":"integer"},"data":{"items":{"$ref":"#/definitions/hadits.Hadits"},"type":"array"},"limit":{"type":"integer"},"total_data":{"type":"integer"},"total_page":{"type":"integer"}},"type":"object"},"hadits.HaditsSource":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"hadits.SearchResult":{"properties":{"hadits":{"$ref":"#/definitions/hadits.Hadits"},"source":{"type":"string"}},"type":"object"},"hadits.Topic":{"properties":{"id":{"example":1,"type":"integer"},"keyword":{"example":"نية","type":"string"},"title":{"example":"Niat","type":"string"}},"type":"object"},"kajian.Page":{"properties":{"next_page_token":{"description":"Pass as page_token to fetch the next page; empty on the last page.","type":"string"},"videos":{"items":{"$ref":"#/definitions/kajian.Video"},"type":"array"}},"type":"object"},"kajian.Video":{"properties":{"channel_title":{"type":"string"},"description":{"type":"string"},"duration":{"description":"ISO 8601 duration, e.g. PT1H2M3S","example":"PT45M12S","type":"string"},"id":{"example":"dQw4w9WgXcQ","type":"string"},"like_count":{"type":"integer"},"published_at":{"type":"string"},"thumbnail_url":{"type":"string"},"title":{"type":"string"},"view_count":{"type":"integer"}},"type":"object"},"mosque.Mosque":{"properties":{"address":{"type":"string"},"distance_m":{"description":"Distance from the searched position; only set by the nearby search.","example":420.5,"type":"number"},"id":{"example":1,"type":"integer"},"latitude":{"example":-6.2088,"type":"number"},"longitude":{"example":106.8456,"type":"number"},"name":{"example":"Masjid Al-Ikhlas","type":"string"}},"type":"object"},"mosque.NewMosque":{"properties":{"address":{"example":"Jl. Merdeka No. 1","type":"string"},"latitude":{"example":-6.2088,"type":"number"},"longitude":{"example":106.8456,"type":"number"},"name":{"example":"Masjid Al-Ikhlas","type":"string"}},"type":"object"},"prayer.CityRegency":{"properties":{"code":{"type":"string"},"full_code":{"type":"string"},"id":{"type":"integer"},"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"},"province_id":{"type":"integer"},"type":{"description":"Kabupaten or Kota","type":"string"}},"type":"object"},"prayer.DailyPrayerResponse":{"properties":{"metadata":{"properties":{"city":{"type":"string"},"date":{"type":"string"},"timezone":{"type":"string"}},"type":"object"},"prayer_times":{"$ref":"#/definitions/prayer.PrayerTimes"}},"type":"object"},"prayer.District":{"properties":{"city_id":{"type":"integer"},"code":{"type":"string"},"full_code":{"type":"string"},"id":{"type":"integer"},"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"}},"type":"object"},"prayer.MonthlyPrayerResponse":{"properties":{"metadata":{"properties":{"city":{"type":"string"},"month":{"type":"integer"},"timezone":{"type":"string"},"year":{"type":"integer"}},"type":"object"},"prayer_times":{"additionalProperties":{"$ref":"#/definitions/prayer.PrayerTimes"},"type":"object"}},"type":"object"},"prayer.NearestCity":{"properties":{"city":{"$ref":"#/definitions/prayer.CityRegency"},"distance_km":{"example":3.2,"type":"number"},"province":{"$ref":"#/definitions/prayer.Province"}},"type":"object"},"prayer.PrayerTimes":{"properties":{"ashar":{"type":"string"},"duha":{"type":"string"},"dzuhur":{"type":"string"},"imsyak":{"type":"string"},"isya":{"type":"string"},"maghrib":{"type":"string"},"subuh":{"type":"string"},"terbit":{"type":"string"}},"type":"object"},"prayer.Province":{"properties":{"code":{"type":"string"},"id":{"type":"integer"},"latitude":{"type":"number"},"longitude":{"type":"number"},"name":{"type":"string"}},"type":"object"},"quran.Ayat":{"properties":{"arabic_text":{"type":"string"},"audio_url":{"type":"string"},"hezb":{"type":"integer"},"id":{"type":"integer"},"indo_text":{"type":"string"},"juz":{"type":"integer"},"page":{"type":"integer"},"read_text":{"type":"string"},"rub":{"type":"integer"},"surat_id":{"type":"integer"},"tafsir":{"type":"string"},"verse_no":{"type":"integer"}},"type":"object"},"quran.HafsWord":{"properties":{"font_code":{"type":"string"},"font_name":{"type":"string"},"font_unicode":{"type":"string"},"id":{"type":"integer"},"line_no":{"type":"integer"},"page_no":{"type":"integer"},"sura":{"type":"integer"},"type":{"type":"integer"},"verse":{"type":"integer"},"word_num":{"type":"integer"},"word_text":{"type":"string"}},"type":"object"},"quran.JuzInfo":{"properties":{"end":{"$ref":"#/definitions/quran.JuzPosition"},"name_arabic":{"example":"سيقول","type":"string"},"number":{"example":2,"type":"integer"},"range_label":{"description":"Human readable range, e.g. \"Al-Baqarah (253) - Ali Imran (92)\".","example":"Al-Baqarah (142-252)","type":"string"},"start":{"$ref":"#/definitions/quran.JuzPosition"},"total_ayat":{"example":111,"type":"integer"}},"type":"object"},"quran.JuzPosition":{"properties":{"ayat":{"example":142,"type":"integer"},"surat_id":{"example":2,"type":"integer"},"surat_name":{"example":"Al-Baqarah","type":"string"}},"type":"object"},"quran.PaginatedSuratResponse":{"properties":{"current_page":{"type":"integer"},"surat":{"items":{"$ref":"#/definitions/quran.Surat"},"type":"array"},"total_data":{"type":"integer"},"total_page":{"type":"integer"}},"type":"object"},"quran.SearchResult":{"properties":{"ayat":{"$ref":"#/definitions/quran.Ayat"},"surat_name":{"type":"string"}},"type":"object"},"quran.Surat":{"properties":{"arabic":{"type":"string"},"english":{"type":"string"},"id":{"type":"integer"},"indonesia":{"type":"string"},"latin":{"type":"string"},"location":{"type":"string"},"sajda":{"type":"integer"},"verse_total":{"type":"integer"}},"type":"object"},"quran.SuratWithAyat":{"properties":{"ayat":{"items":{"$ref":"#/definitions/quran.Ayat"},"type":"array"},"surat":{"$ref":"#/definitions/quran.Surat"}},"type":"object"}},"host":"api.muslimpack.my.id","info":{"contact":{},"description":"API publik MuslimPack: Al-Qur'an, hadits, jadwal sholat, doa, tahlil, kalender Hijriah, dan video kajian. Semua endpoint bersifat baca-saja.","title":"MuslimPack API","version":"1.0"},"paths":{"/banners":{"get":{"description":"Images for the home slider that are active at the moment of the request.","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/content.Banner"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"List active banners","tags":["content"]}},"/calendar/rules":{"get":{"description":"Fixed-date Islamic events, recurring sunnah-fasting rules and the explanatory fasting cards. Combine with a Hijri date computed on the client to annotate a calendar.","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/content.CalendarRules"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Hijri calendar rules","tags":["content"]}},"/doa":{"get":{"description":"Daily supplications with Arabic text, transliteration and Indonesian translation, in display order.","parameters":[{"description":"Keep only doa whose title or translation contains this text","in":"query","name":"q","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/content.Doa"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"List doa","tags":["content"]}},"/doa/{id}":{"get":{"parameters":[{"description":"Doa ID","in":"path","minimum":1,"name":"id","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/content.Doa"}},"type":"object"}]}},"400":{"description":"Invalid ID","schema":{"$ref":"#/definitions/core.StandardResponse"}},"404":{"description":"Doa not found","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get one doa","tags":["content"]}},"/dzikir":{"get":{"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/content.Dzikir"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"List tasbih phrases","tags":["content"]}},"/hadits/collections":{"get":{"consumes":["application/json"],"description":"Get a list of all available hadits collections","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"items":{"$ref":"#/definitions/hadits.HaditsSource"},"type":"array"}}},"summary":"Get all hadits collections","tags":["hadits"]}},"/hadits/collections/{collectionId}":{"get":{"consumes":["application/json"],"description":"Get the hadits of a collection (ID or slug). Without page/limit the whole collection is returned as an array; with either one the result is paginated.","parameters":[{"description":"Collection ID or slug","in":"path","name":"collectionId","required":true,"type":"string"},{"description":"Page number (starts at 1); enables pagination","in":"query","minimum":1,"name":"page","type":"integer"},{"description":"Items per page (default 50, max 200); enables pagination","in":"query","maximum":200,"minimum":1,"name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"With pagination parameters","schema":{"$ref":"#/definitions/hadits.HaditsPage"}},"400":{"description":"Bad Request","schema":{"additionalProperties":{"type":"string"},"type":"object"}},"404":{"description":"Not Found","schema":{"additionalProperties":{"type":"string"},"type":"object"}}},"summary":"Get hadits by collectionId","tags":["hadits"]}},"/hadits/collections/{collectionId}/{number}":{"get":{"consumes":["application/json"],"description":"Get a specific hadits by source and number","parameters":[{"description":"Collection ID or slug","in":"path","name":"collectionId","required":true,"type":"string"},{"description":"Hadits Number","in":"path","name":"number","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/hadits.Hadits"}},"404":{"description":"Not Found","schema":{"additionalProperties":{"type":"string"},"type":"object"}}},"summary":"Get hadits by source and number","tags":["hadits"]}},"/hadits/search":{"get":{"consumes":["application/json"],"description":"Search for hadits containing the query string","parameters":[{"description":"Search query","in":"query","name":"q","required":true,"type":"string"},{"description":"Limit the search to one collection (ID or slug)","in":"query","name":"collection","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"items":{"$ref":"#/definitions/hadits.SearchResult"},"type":"array"}}},"summary":"Search hadits","tags":["hadits"]}},"/hadits/topics":{"get":{"description":"Predefined topics (Niat, Sholat, Puasa, ...) with the Arabic keyword to pass to /hadits/search.","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/hadits.Topic"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"List hadits search topics","tags":["hadits"]}},"/kajian/videos":{"get":{"description":"Latest videos of the kajian YouTube channel, newest first, with duration and view/like counts. Cached on the server for 30 minutes. Use next_page_token as page_token to get older videos.","parameters":[{"description":"Videos per page (default 20, max 50)","in":"query","maximum":50,"minimum":1,"name":"limit","type":"integer"},{"description":"Token from the previous page's next_page_token","in":"query","name":"page_token","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/kajian.Page"}},"type":"object"}]}},"400":{"description":"Invalid limit","schema":{"$ref":"#/definitions/core.StandardResponse"}},"502":{"description":"YouTube request failed","schema":{"$ref":"#/definitions/core.StandardResponse"}},"503":{"description":"Not available / quota exhausted","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"List kajian videos","tags":["kajian"]}},"/kajian/videos/{id}":{"get":{"parameters":[{"description":"YouTube video ID","in":"path","name":"id","required":true,"type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/kajian.Video"}},"type":"object"}]}},"404":{"description":"Video not found","schema":{"$ref":"#/definitions/core.StandardResponse"}},"502":{"description":"YouTube request failed","schema":{"$ref":"#/definitions/core.StandardResponse"}},"503":{"description":"Not available / quota exhausted","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get one kajian video","tags":["kajian"]}},"/mosques":{"post":{"consumes":["application/json"],"description":"Submit a mosque that is missing from the map. A mosque with the same name within about 40 metres is treated as the same one and returned with status 200 instead of being created again. Submissions are rate limited per client.","parameters":[{"description":"The mosque","in":"body","name":"mosque","required":true,"schema":{"$ref":"#/definitions/mosque.NewMosque"}}],"produces":["application/json"],"responses":{"200":{"description":"Already exists","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/mosque.Mosque"}},"type":"object"}]}},"201":{"description":"Created","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/mosque.Mosque"}},"type":"object"}]}},"400":{"description":"Invalid input","schema":{"$ref":"#/definitions/core.StandardResponse"}},"429":{"description":"Too many submissions","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Add a mosque","tags":["mosques"]}},"/mosques/nearby":{"get":{"description":"Mosques stored in the MuslimPack database within a radius of the given position, nearest first, with the distance in metres.","parameters":[{"description":"Latitude","in":"query","maximum":90,"minimum":-90,"name":"lat","required":true,"type":"number"},{"description":"Longitude","in":"query","maximum":180,"minimum":-180,"name":"long","required":true,"type":"number"},{"description":"Search radius in metres (default 3000, max 20000)","in":"query","maximum":20000,"minimum":1,"name":"radius_m","type":"integer"},{"description":"Maximum number of results (default 100, max 200)","in":"query","maximum":200,"minimum":1,"name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/mosque.Mosque"},"type":"array"}},"type":"object"}]}},"400":{"description":"Missing or invalid parameters","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Mosques near a position","tags":["mosques"]}},"/prayer/cities/nearest":{"get":{"description":"Returns the city/regency (with its province) whose centre is closest to the given coordinates, and the distance to it in kilometres. Use it to turn a GPS position into a selectable location.","parameters":[{"description":"Latitude","in":"query","maximum":90,"minimum":-90,"name":"lat","required":true,"type":"number"},{"description":"Longitude","in":"query","maximum":180,"minimum":-180,"name":"long","required":true,"type":"number"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/prayer.NearestCity"}},"type":"object"}]}},"400":{"description":"Missing or invalid coordinates","schema":{"$ref":"#/definitions/core.StandardResponse"}},"404":{"description":"No city found","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Find the nearest city","tags":["prayer"]}},"/prayer/cities/{city_id}/districts":{"get":{"consumes":["application/json"],"description":"Retrieves a list of districts for a specific city/regency","parameters":[{"description":"City/Regency ID","in":"path","name":"city_id","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with district list","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/prayer.District"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid city ID","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get list of districts by city","tags":["prayer"]}},"/prayer/cities/{id}/schedule":{"get":{"consumes":["application/json"],"description":"Retrieves prayer times for a city/regency by its ID","parameters":[{"description":"City/Regency ID","in":"path","name":"id","required":true,"type":"integer"},{"description":"Period (daily or monthly, default is daily)","in":"query","name":"period","type":"string"},{"description":"Date in YYYY-MM-DD format (for daily, default is today)","in":"query","name":"date","type":"string"},{"description":"Year (for monthly, default is current year)","in":"query","maximum":2100,"minimum":1900,"name":"year","type":"integer"},{"description":"Month (for monthly, 1-12, default is current month)","in":"query","maximum":12,"minimum":1,"name":"month","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with prayer times","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/prayer.DailyPrayerResponse"}},"type":"object"}]}},"404":{"description":"City not found","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get prayer times by city/regency ID","tags":["prayer"]}},"/prayer/city/{city}":{"get":{"consumes":["application/json"],"description":"Retrieves prayer times for a specific city, with optional period parameter","parameters":[{"description":"City name","in":"path","name":"city","required":true,"type":"string"},{"description":"Period (daily or monthly, default is daily)","in":"query","name":"period","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with prayer times","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/prayer.DailyPrayerResponse"}},"type":"object"}]}},"404":{"description":"City not found","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get prayer times by city name","tags":["prayer"]}},"/prayer/coordinates/{lat}/{long}/schedule":{"get":{"consumes":["application/json"],"description":"Retrieves prayer times for a location specified by latitude and longitude","parameters":[{"description":"Latitude","in":"path","name":"lat","required":true,"type":"number"},{"description":"Longitude","in":"path","name":"long","required":true,"type":"number"},{"description":"Period (daily or monthly, default is daily)","in":"query","name":"period","type":"string"},{"description":"Date in YYYY-MM-DD format (for daily, default is today)","in":"query","name":"date","type":"string"},{"description":"Year (for monthly, default is current year)","in":"query","maximum":2100,"minimum":1900,"name":"year","type":"integer"},{"description":"Month (for monthly, 1-12, default is current month)","in":"query","maximum":12,"minimum":1,"name":"month","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with prayer times","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/prayer.DailyPrayerResponse"}},"type":"object"}]}},"400":{"description":"Invalid latitude or longitude","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get prayer times by coordinates","tags":["prayer"]}},"/prayer/daily/{city}":{"get":{"consumes":["application/json"],"description":"Retrieves prayer times for a specific city on a given date","parameters":[{"description":"City name","in":"path","name":"city","required":true,"type":"string"},{"description":"Date in YYYY-MM-DD format (default is today)","in":"query","name":"date","type":"string"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with prayer times","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/prayer.DailyPrayerResponse"}},"type":"object"}]}},"400":{"description":"Invalid date format","schema":{"$ref":"#/definitions/core.StandardResponse"}},"404":{"description":"City not found","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get prayer times by date","tags":["prayer"]}},"/prayer/districts/{id}/schedule":{"get":{"consumes":["application/json"],"description":"Retrieves prayer times for a district by its ID","parameters":[{"description":"District ID","in":"path","name":"id","required":true,"type":"integer"},{"description":"Period (daily or monthly, default is daily)","in":"query","name":"period","type":"string"},{"description":"Date in YYYY-MM-DD format (for daily, default is today)","in":"query","name":"date","type":"string"},{"description":"Year (for monthly, default is current year)","in":"query","maximum":2100,"minimum":1900,"name":"year","type":"integer"},{"description":"Month (for monthly, 1-12, default is current month)","in":"query","maximum":12,"minimum":1,"name":"month","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with prayer times","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/prayer.DailyPrayerResponse"}},"type":"object"}]}},"404":{"description":"District not found","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get prayer times by district ID","tags":["prayer"]}},"/prayer/monthly/{city}":{"get":{"consumes":["application/json"],"description":"Retrieves prayer times for an entire month for a specific city","parameters":[{"description":"City name","in":"path","name":"city","required":true,"type":"string"},{"description":"Year (default is current year)","in":"query","maximum":2100,"minimum":1900,"name":"year","type":"integer"},{"description":"Month (1-12, default is current month)","in":"query","maximum":12,"minimum":1,"name":"month","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with monthly prayer times","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/prayer.MonthlyPrayerResponse"}},"type":"object"}]}},"400":{"description":"Invalid year or month parameters","schema":{"$ref":"#/definitions/core.StandardResponse"}},"404":{"description":"City not found","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get monthly prayer schedule","tags":["prayer"]}},"/prayer/provinces":{"get":{"consumes":["application/json"],"description":"Retrieves a list of all provinces in Indonesia","produces":["application/json"],"responses":{"200":{"description":"Success response with province list","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/prayer.Province"},"type":"array"}},"type":"object"}]}},"500":{"description":"Server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get list of provinces","tags":["prayer"]}},"/prayer/provinces/{province_id}/cities":{"get":{"consumes":["application/json"],"description":"Retrieves a list of cities/regencies for a specific province","parameters":[{"description":"Province ID","in":"path","name":"province_id","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with city list","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/prayer.CityRegency"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid province ID","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get list of cities/regencies by province","tags":["prayer"]}},"/quran/hafs/surat/{id}/ayat":{"get":{"consumes":["application/json"],"description":"Retrieves all words in a specific surat according to Hafs recitation","parameters":[{"description":"ID of the surat","in":"path","maximum":114,"minimum":1,"name":"id","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with Hafs words","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/quran.HafsWord"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad request - invalid surat ID","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get all Hafs words by surat ID","tags":["quran"]}},"/quran/hafs/surat/{suratId}/ayat/{ayatNumber}":{"get":{"consumes":["application/json"],"description":"Retrieves all words in a specific verse according to Hafs recitation","parameters":[{"description":"ID of the surat","in":"path","maximum":114,"minimum":1,"name":"suratId","required":true,"type":"integer"},{"description":"Number of the ayat within the surat","in":"path","minimum":1,"name":"ayatNumber","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with Hafs words in the verse","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/quran.HafsWord"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad request - invalid surat ID or ayat number","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get Hafs words by surat ID and verse number","tags":["quran"]}},"/quran/juz":{"get":{"description":"Each juz with its Arabic name, number of ayat, first and last surat/ayat and a readable range label.","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/quran.JuzInfo"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"List the 30 juz","tags":["quran"]}},"/quran/juz/{juz}":{"get":{"consumes":["application/json"],"description":"Retrieves all ayat (verses) in a specific juz","parameters":[{"description":"Juz number","in":"path","maximum":30,"minimum":1,"name":"juz","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with ayat in the juz","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/quran.Ayat"},"type":"array"}},"type":"object"}]}},"400":{"description":"Invalid juz number","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get all ayat by juz number","tags":["quran"]}},"/quran/search":{"get":{"consumes":["application/json"],"description":"Searches for ayat containing the specified query text","parameters":[{"description":"Search query","in":"query","name":"q","required":true,"type":"string"},{"description":"Maximum number of results (default and maximum 100)","in":"query","maximum":100,"minimum":1,"name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with search results","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/quran.SearchResult"},"type":"array"}},"type":"object"}]}},"400":{"description":"Bad request - missing query parameter","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Search the Quran","tags":["quran"]}},"/quran/surat":{"get":{"consumes":["application/json"],"description":"Retrieves a paginated list of surat from the Quran","parameters":[{"description":"Page number for pagination (default is 1)","in":"query","minimum":1,"name":"page","type":"integer"},{"description":"Number of surat per page (default is 10)","in":"query","maximum":114,"minimum":1,"name":"limit","type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with paginated list of surat","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/quran.PaginatedSuratResponse"}},"type":"object"}]}},"400":{"description":"Bad request - invalid parameters","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get all surat with pagination","tags":["quran"]}},"/quran/surat/all":{"get":{"consumes":["application/json"],"description":"Retrieves a list of all surat from the Quran","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"items":{"$ref":"#/definitions/quran.Surat"},"type":"array"}},"type":"object"}]}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get all surat","tags":["quran"]}},"/quran/surat/{id}":{"get":{"consumes":["application/json"],"description":"Retrieves a specific surat by its ID","parameters":[{"description":"ID of the surat","in":"path","maximum":114,"minimum":1,"name":"id","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/quran.Surat"}},"type":"object"}]}},"400":{"description":"Bad request - invalid surat ID","schema":{"$ref":"#/definitions/core.StandardResponse"}},"404":{"description":"Surat not found","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get surat by ID","tags":["quran"]}},"/quran/surat/{id}/ayat":{"get":{"consumes":["application/json"],"description":"Retrieves all ayat (verses) of a specific surat by its ID","parameters":[{"description":"ID of the surat","in":"path","maximum":114,"minimum":1,"name":"id","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with surat and its ayat","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/quran.SuratWithAyat"}},"type":"object"}]}},"400":{"description":"Invalid surat ID","schema":{"$ref":"#/definitions/core.StandardResponse"}},"404":{"description":"Surat not found","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get all ayat by surat ID","tags":["quran"]}},"/quran/surat/{suratId}/ayat/{ayatNumber}":{"get":{"consumes":["application/json"],"description":"Retrieves a specific ayat (verse) by its surat ID and ayat number","parameters":[{"description":"ID of the surat","in":"path","maximum":114,"minimum":1,"name":"suratId","required":true,"type":"integer"},{"description":"Number of the ayat within the surat","in":"path","minimum":1,"name":"ayatNumber","required":true,"type":"integer"}],"produces":["application/json"],"responses":{"200":{"description":"Success response with ayat details","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/quran.Ayat"}},"type":"object"}]}},"400":{"description":"Bad request - invalid surat ID or ayat number","schema":{"$ref":"#/definitions/core.StandardResponse"}},"404":{"description":"Ayat not found","schema":{"$ref":"#/definitions/core.StandardResponse"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get specific ayat by surat ID and ayat number","tags":["quran"]}},"/tahlil":{"get":{"description":"The tahlil text split into sections, each with Arabic text, transliteration and translation.","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/content.Tahlil"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Get the tahlil text","tags":["content"]}},"/zakat/config":{"get":{"description":"Nisab of zakat maal expressed in grams of gold (85) and, when the gold price is configured, in rupiah. gold_price_per_gram and nisab_amount are null until the price has been set.","produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"allOf":[{"$ref":"#/definitions/core.StandardResponse"},{"properties":{"data":{"$ref":"#/definitions/content.ZakatConfig"}},"type":"object"}]}},"500":{"description":"Internal Server Error","schema":{"$ref":"#/definitions/core.StandardResponse"}}},"summary":"Zakat nisab configuration","tags":["content"]}}},"schemes":["https"],"swagger":"2.0","tags":[{"description":"Provinsi, kota/kabupaten, kecamatan, kota terdekat, dan jadwal sholat","name":"prayer"},{"description":"Surat, ayat, juz, pencarian, dan data per kata (Hafs)","name":"quran"},{"description":"Koleksi hadits, pencarian, dan topik","name":"hadits"},{"description":"Doa, tahlil, kalender Hijriah, banner, dzikir, dan konfigurasi zakat","name":"content"},{"description":"Video kajian","name":"kajian"},{"description":"Masjid terdekat dan penambahan masjid","name":"mosques"}]}
