{"openapi":"3.1.0","info":{"title":"Salah API","version":"0.1.0","description":"Prayer times, Qibla, Hijri dates, Islamic events, Ramadan and fasting planning for any place on earth, computed locally.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://salah.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/salah/docs"},"termsOfService":"https://connectorbay.com/salah/terms"},"servers":[{"url":"https://salah.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/salah/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/prayer_times":{"post":{"operationId":"prayer_times","summary":"The five prayer times (plus sunrise, Islamic midnight and the last third of the night) for a place and date, computed","description":"The five prayer times (plus sunrise, Islamic midnight and the last third of the night) for a place and date, computed\n    locally with the standard method for that country unless one is given; Hanafi or Shafi Asr. Use for \"prayer times in\n    Riyadh on Friday\", \"when is Maghrib today\", \"Fajr in Fremont tomorrow\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"City, optionally with state/country: 'Fremont, CA', 'Cairo', 'Birmingham, UK', 'Riyadh'. Or give latitude and longitude instead.","examples":["Fremont, CA","Cairo, Egypt","Riyadh"],"title":"Place"},"latitude":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"description":"Latitude (−90..90), if not giving a place.","title":"Latitude"},"longitude":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"description":"Longitude (−180..180), if not giving a place.","title":"Longitude"},"day":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Date as YYYY-MM-DD; today at the place when omitted.","examples":["2026-09-25"],"title":"Day"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Calculation method: ISNA, MWL, UMM_AL_QURA, EGYPT, KARACHI, DUBAI, KUWAIT, QATAR, SINGAPORE, MOONSIGHTING, UOIF. Chosen from the country when omitted.","examples":["ISNA","UMM_AL_QURA"],"title":"Method"},"madhab":{"default":"shafi","description":"Asr calculation: 'shafi' (standard; also Maliki/Hanbali) or 'hanafi' (later Asr).","examples":["shafi","hanafi"],"title":"Madhab","type":"string"}},"title":"prayer_timesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/next_prayer":{"post":{"operationId":"next_prayer","summary":"Which prayer is next at a place and how long until it, plus the current prayer window (what can still be prayed now","description":"Which prayer is next at a place and how long until it, plus the current prayer window (what can still be prayed now\n    and when it ends). Use for \"how long until Isha\", \"can I still pray Asr\", \"when's the next prayer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"City, optionally with state/country: 'Fremont, CA', 'Cairo', 'Birmingham, UK', 'Riyadh'. Or give latitude and longitude instead.","examples":["Fremont, CA","Cairo, Egypt","Riyadh"],"title":"Place"},"latitude":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"description":"Latitude (−90..90), if not giving a place.","title":"Latitude"},"longitude":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"description":"Longitude (−180..180), if not giving a place.","title":"Longitude"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Calculation method: ISNA, MWL, UMM_AL_QURA, EGYPT, KARACHI, DUBAI, KUWAIT, QATAR, SINGAPORE, MOONSIGHTING, UOIF. Chosen from the country when omitted.","examples":["ISNA","UMM_AL_QURA"],"title":"Method"},"madhab":{"default":"shafi","description":"Asr calculation: 'shafi' (standard; also Maliki/Hanbali) or 'hanafi' (later Asr).","examples":["shafi","hanafi"],"title":"Madhab","type":"string"},"now":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Local time to evaluate as ISO 'YYYY-MM-DDTHH:MM' (defaults to the current time at the place).","title":"Now"}},"title":"next_prayerArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/monthly_timetable":{"post":{"operationId":"monthly_timetable","summary":"A full month of prayer times for a place, one row per day with the Hijri date, ready to print or put in a calendar.","description":"A full month of prayer times for a place, one row per day with the Hijri date, ready to print or put in a calendar.\n    Use for \"prayer timetable for October\", \"send me this month's times for Houston\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"City, optionally with state/country: 'Fremont, CA', 'Cairo', 'Birmingham, UK', 'Riyadh'. Or give latitude and longitude instead.","examples":["Fremont, CA","Cairo, Egypt","Riyadh"],"title":"Place"},"latitude":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"description":"Latitude (−90..90), if not giving a place.","title":"Latitude"},"longitude":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"description":"Longitude (−180..180), if not giving a place.","title":"Longitude"},"month":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Month as YYYY-MM (defaults to the current month at the place).","examples":["2026-10"],"title":"Month"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Calculation method: ISNA, MWL, UMM_AL_QURA, EGYPT, KARACHI, DUBAI, KUWAIT, QATAR, SINGAPORE, MOONSIGHTING, UOIF. Chosen from the country when omitted.","examples":["ISNA","UMM_AL_QURA"],"title":"Method"},"madhab":{"default":"shafi","description":"Asr calculation: 'shafi' (standard; also Maliki/Hanbali) or 'hanafi' (later Asr).","examples":["shafi","hanafi"],"title":"Madhab","type":"string"}},"title":"monthly_timetableArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/qibla":{"post":{"operationId":"qibla","summary":"Qibla direction from a place: compass bearing (degrees from true north, and the compass point) and distance to the","description":"Qibla direction from a place: compass bearing (degrees from true north, and the compass point) and distance to the\n    Kaaba. Use for \"which way is the Qibla\", \"Qibla from this hotel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"City, optionally with state/country: 'Fremont, CA', 'Cairo', 'Birmingham, UK', 'Riyadh'. Or give latitude and longitude instead.","examples":["Fremont, CA","Cairo, Egypt","Riyadh"],"title":"Place"},"latitude":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"description":"Latitude (−90..90), if not giving a place.","title":"Latitude"},"longitude":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"description":"Longitude (−180..180), if not giving a place.","title":"Longitude"}},"title":"qiblaArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/hijri_date":{"post":{"operationId":"hijri_date","summary":"Today's Hijri date, or convert any date between the Gregorian and the Umm al-Qura Hijri calendars, with month names in","description":"Today's Hijri date, or convert any date between the Gregorian and the Umm al-Qura Hijri calendars, with month names in\n    English and Arabic and the events on that day. Use for \"what's the Islamic date today\", \"when is 1 Ramadan 1448\", \"what\n    Gregorian date is 10 Muharram next year\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"day":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Gregorian date YYYY-MM-DD (today UTC when omitted), or a Hijri date as 'H:YYYY-MM-DD' to convert the other way.","examples":["2026-09-22","H:1448-09-01"],"title":"Day"}},"title":"hijri_dateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/islamic_events":{"post":{"operationId":"islamic_events","summary":"The Islamic calendar's key dates in a period — Ramadan start, Laylat al-Qadr, Eid al-Fitr, Hajj days, Arafah, Eid al-Adh","description":"The Islamic calendar's key dates in a period — Ramadan start, Laylat al-Qadr, Eid al-Fitr, Hajj days, Arafah, Eid al-Adha,\n    Islamic New Year, Ashura, Mawlid, Isra and Mi'raj — as Gregorian dates with the weekday and days-until. Use for \"when is\n    Ramadan next year\", \"when is Eid\", \"Islamic holidays in 2027\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Start date YYYY-MM-DD (today when omitted).","title":"Start"},"days":{"default":400,"description":"How many days ahead to list (1–800).","maximum":800,"minimum":1,"title":"Days","type":"integer"}},"title":"islamic_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/ramadan_planner":{"post":{"operationId":"ramadan_planner","summary":"Every day of a Ramadan at a place: suhoor ends (Fajr), iftar (Maghrib), fast length, Taraweeh (after Isha), with the","description":"Every day of a Ramadan at a place: suhoor ends (Fajr), iftar (Maghrib), fast length, Taraweeh (after Isha), with the\n    first day, Laylat al-Qadr odd nights and Eid al-Fitr called out. Use for \"iftar times for Ramadan in Cairo\", \"how long\n    are the fasts in Oslo this year\", \"when is suhoor on the 27th night\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"City, optionally with state/country: 'Fremont, CA', 'Cairo', 'Birmingham, UK', 'Riyadh'. Or give latitude and longitude instead.","examples":["Fremont, CA","Cairo, Egypt","Riyadh"],"title":"Place"},"latitude":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"description":"Latitude (−90..90), if not giving a place.","title":"Latitude"},"longitude":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"description":"Longitude (−180..180), if not giving a place.","title":"Longitude"},"year":{"anyOf":[{"maximum":2100,"minimum":1990,"type":"integer"},{"type":"null"}],"default":null,"description":"Gregorian year of the Ramadan to plan (defaults to the next Ramadan).","title":"Year"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Calculation method: ISNA, MWL, UMM_AL_QURA, EGYPT, KARACHI, DUBAI, KUWAIT, QATAR, SINGAPORE, MOONSIGHTING, UOIF. Chosen from the country when omitted.","examples":["ISNA","UMM_AL_QURA"],"title":"Method"},"madhab":{"default":"shafi","description":"Asr calculation: 'shafi' (standard; also Maliki/Hanbali) or 'hanafi' (later Asr).","examples":["shafi","hanafi"],"title":"Madhab","type":"string"}},"title":"ramadan_plannerArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/fasting_days":{"post":{"operationId":"fasting_days","summary":"Recommended voluntary fasting days in a period — Mondays and Thursdays, the White Days (13-15 of each Hijri month), Araf","description":"Recommended voluntary fasting days in a period — Mondays and Thursdays, the White Days (13-15 of each Hijri month), Arafah,\n    Ashura, six days of Shawwal — and the days when fasting is forbidden (both Eids, Tashreeq), with the Hijri date for each.\n    Use for \"which days should I fast this month\", \"when are the White Days\", \"can I fast on Friday the 12th\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Start date YYYY-MM-DD (today when omitted).","title":"Start"},"days":{"default":30,"description":"How many days to cover (1–120).","maximum":120,"minimum":1,"title":"Days","type":"integer"}},"title":"fasting_daysArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/calculation_methods":{"post":{"operationId":"calculation_methods","summary":"The calculation methods Salah supports (Fajr/Isha angles and the regions that use each) and the country → method default","description":"The calculation methods Salah supports (Fajr/Isha angles and the regions that use each) and the country → method default,\n    so the person can pick the one their mosque uses. Use for \"why are my times different\", \"which method does Saudi use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"calculation_methodsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}