{
 "openapi": "3.1.0",
 "info": {
  "title": "Iqamah Prayer Times API",
  "version": "1",
  "description": "Free, keyless, CORS-open prayer (azaan) times for any point on Earth, official national timetables where an authority publishes them, and the iqamah and Jumu'ah times of mosques in the Iqamah network. Every answer has one canonical URL; other spellings get a 301. Cache what you fetch. Documentation and terms: https://api.iqamah.net/docs",
  "contact": {
   "name": "Iqamah",
   "email": "api@iqamah.org",
   "url": "https://api.iqamah.net/docs"
  },
  "termsOfService": "https://api.iqamah.net/docs#terms"
 },
 "servers": [
  {
   "url": "https://api.iqamah.net"
  }
 ],
 "externalDocs": {
  "url": "https://api.iqamah.net/docs"
 },
 "paths": {
  "/v1/times/{lat},{lon}/{period}.json": {
   "get": {
    "operationId": "getTimes",
    "summary": "A month (YYYY-MM) or a year (YYYY) of prayer times for a point",
    "parameters": [
     {
      "name": "lat",
      "in": "path",
      "required": true,
      "description": "Latitude, decimal degrees (rounded to 2 decimals in the canonical URL).",
      "schema": {
       "type": "number",
       "minimum": -90,
       "maximum": 90
      },
      "example": 41.88
     },
     {
      "name": "lon",
      "in": "path",
      "required": true,
      "description": "Longitude, decimal degrees (rounded to 2 decimals in the canonical URL).",
      "schema": {
       "type": "number",
       "minimum": -180,
       "maximum": 180
      },
      "example": -87.63
     },
     {
      "name": "period",
      "in": "path",
      "required": true,
      "description": "A month (YYYY-MM) or a whole year (YYYY, 1900 to 2200; fetch once, it never changes).",
      "schema": {
       "type": "string",
       "pattern": "^\\d{4}(-\\d{2})?$"
      },
      "example": "2026-11"
     },
     {
      "name": "method",
      "in": "query",
      "required": false,
      "description": "Calculation method. Default: the usual method in the location's country (see /v1/methods.json).",
      "schema": {
       "type": "string",
       "enum": [
        "mwl",
        "isna",
        "egyptian",
        "karachi",
        "umm_al_qura",
        "dubai",
        "kuwait",
        "qatar",
        "singapore",
        "turkey",
        "tehran",
        "moonsighting",
        "jakim"
       ]
      }
     },
     {
      "name": "asr",
      "in": "query",
      "required": false,
      "description": "Asr school: standard (Shafi'i, Maliki, Hanbali) or hanafi. Default by country.",
      "schema": {
       "type": "string",
       "enum": [
        "standard",
        "hanafi"
       ]
      }
     },
     {
      "name": "highlat",
      "in": "query",
      "required": false,
      "description": "How Fajr and Isha are set where twilight does not end.",
      "schema": {
       "type": "string",
       "enum": [
        "middle_of_the_night",
        "seventh_of_the_night",
        "twilight_angle"
       ],
       "default": "middle_of_the_night"
      }
     },
     {
      "name": "fajr_angle",
      "in": "query",
      "required": false,
      "description": "Fajr twilight angle in degrees (above 0, at most 30), replacing the method's.",
      "schema": {
       "type": "number",
       "exclusiveMinimum": 0,
       "maximum": 30
      }
     },
     {
      "name": "isha_angle",
      "in": "query",
      "required": false,
      "description": "Isha twilight angle in degrees (above 0, at most 30), replacing the method's angle or fixed interval.",
      "schema": {
       "type": "number",
       "exclusiveMinimum": 0,
       "maximum": 30
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "description": "Adds prayer names in this language and a written Hijri date. Keys and time values never change.",
      "schema": {
       "type": "string",
       "enum": [
        "en",
        "ar",
        "ur",
        "bn",
        "tr",
        "ms",
        "id",
        "fr"
       ]
      }
     },
     {
      "name": "tz",
      "in": "query",
      "required": false,
      "description": "IANA time zone overriding the one found from the coordinates.",
      "schema": {
       "type": "string"
      },
      "example": "America/Chicago"
     },
     {
      "name": "source",
      "in": "query",
      "required": false,
      "description": "auto: the official authority's timetable where one covers the location, else calculated. official: only the authority's (404 no_official_source elsewhere). calculated: never the authority's.",
      "schema": {
       "type": "string",
       "enum": [
        "auto",
        "official",
        "calculated"
       ],
       "default": "auto"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The month",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Times"
        }
       }
      }
     },
     "301": {
      "description": "Non-canonical request: permanent redirect to the canonical URL, which is the one to cache."
     },
     "400": {
      "description": "Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many uncached requests from this client; see Retry-After.",
      "headers": {
       "Retry-After": {
        "schema": {
         "type": "integer"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/ics/{lat},{lon}.ics": {
   "get": {
    "operationId": "getCalendar",
    "summary": "Calendar feed of the next 60 days (Fajr to Isha as 15-minute events marked free)",
    "parameters": [
     {
      "name": "lat",
      "in": "path",
      "required": true,
      "description": "Latitude, decimal degrees (rounded to 2 decimals in the canonical URL).",
      "schema": {
       "type": "number",
       "minimum": -90,
       "maximum": 90
      },
      "example": 41.88
     },
     {
      "name": "lon",
      "in": "path",
      "required": true,
      "description": "Longitude, decimal degrees (rounded to 2 decimals in the canonical URL).",
      "schema": {
       "type": "number",
       "minimum": -180,
       "maximum": 180
      },
      "example": -87.63
     },
     {
      "name": "method",
      "in": "query",
      "required": false,
      "description": "Calculation method. Default: the usual method in the location's country (see /v1/methods.json).",
      "schema": {
       "type": "string",
       "enum": [
        "mwl",
        "isna",
        "egyptian",
        "karachi",
        "umm_al_qura",
        "dubai",
        "kuwait",
        "qatar",
        "singapore",
        "turkey",
        "tehran",
        "moonsighting",
        "jakim"
       ]
      }
     },
     {
      "name": "asr",
      "in": "query",
      "required": false,
      "description": "Asr school: standard (Shafi'i, Maliki, Hanbali) or hanafi. Default by country.",
      "schema": {
       "type": "string",
       "enum": [
        "standard",
        "hanafi"
       ]
      }
     },
     {
      "name": "highlat",
      "in": "query",
      "required": false,
      "description": "How Fajr and Isha are set where twilight does not end.",
      "schema": {
       "type": "string",
       "enum": [
        "middle_of_the_night",
        "seventh_of_the_night",
        "twilight_angle"
       ],
       "default": "middle_of_the_night"
      }
     },
     {
      "name": "fajr_angle",
      "in": "query",
      "required": false,
      "description": "Fajr twilight angle in degrees (above 0, at most 30), replacing the method's.",
      "schema": {
       "type": "number",
       "exclusiveMinimum": 0,
       "maximum": 30
      }
     },
     {
      "name": "isha_angle",
      "in": "query",
      "required": false,
      "description": "Isha twilight angle in degrees (above 0, at most 30), replacing the method's angle or fixed interval.",
      "schema": {
       "type": "number",
       "exclusiveMinimum": 0,
       "maximum": 30
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "description": "Adds prayer names in this language and a written Hijri date. Keys and time values never change.",
      "schema": {
       "type": "string",
       "enum": [
        "en",
        "ar",
        "ur",
        "bn",
        "tr",
        "ms",
        "id",
        "fr"
       ]
      }
     },
     {
      "name": "tz",
      "in": "query",
      "required": false,
      "description": "IANA time zone overriding the one found from the coordinates.",
      "schema": {
       "type": "string"
      },
      "example": "America/Chicago"
     },
     {
      "name": "source",
      "in": "query",
      "required": false,
      "description": "auto: the official authority's timetable where one covers the location, else calculated. official: only the authority's (404 no_official_source elsewhere). calculated: never the authority's.",
      "schema": {
       "type": "string",
       "enum": [
        "auto",
        "official",
        "calculated"
       ],
       "default": "auto"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "iCalendar feed",
      "content": {
       "text/calendar": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "301": {
      "description": "Non-canonical request: permanent redirect to the canonical URL, which is the one to cache."
     },
     "400": {
      "description": "Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many uncached requests from this client; see Retry-After.",
      "headers": {
       "Retry-After": {
        "schema": {
         "type": "integer"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/methods.json": {
   "get": {
    "operationId": "getMethods",
    "summary": "Calculation methods, their angles, country defaults and official authorities",
    "responses": {
     "200": {
      "description": "Methods",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     }
    }
   }
  },
  "/v1/mosque/{id}.json": {
   "get": {
    "operationId": "getMosque",
    "summary": "One mosque's iqamah and Jumu'ah times, with azaan from the mosque, the official authority and the calculation",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "The mosque's Iqamah ID (a UUID), from /v1/mosques/near.",
      "schema": {
       "type": "string",
       "format": "uuid"
      }
     },
     {
      "name": "method",
      "in": "query",
      "required": false,
      "description": "Calculation method. Default: the usual method in the location's country (see /v1/methods.json).",
      "schema": {
       "type": "string",
       "enum": [
        "mwl",
        "isna",
        "egyptian",
        "karachi",
        "umm_al_qura",
        "dubai",
        "kuwait",
        "qatar",
        "singapore",
        "turkey",
        "tehran",
        "moonsighting",
        "jakim"
       ]
      }
     },
     {
      "name": "asr",
      "in": "query",
      "required": false,
      "description": "Asr school: standard (Shafi'i, Maliki, Hanbali) or hanafi. Default by country.",
      "schema": {
       "type": "string",
       "enum": [
        "standard",
        "hanafi"
       ]
      }
     },
     {
      "name": "highlat",
      "in": "query",
      "required": false,
      "description": "How Fajr and Isha are set where twilight does not end.",
      "schema": {
       "type": "string",
       "enum": [
        "middle_of_the_night",
        "seventh_of_the_night",
        "twilight_angle"
       ],
       "default": "middle_of_the_night"
      }
     },
     {
      "name": "fajr_angle",
      "in": "query",
      "required": false,
      "description": "Fajr twilight angle in degrees (above 0, at most 30), replacing the method's.",
      "schema": {
       "type": "number",
       "exclusiveMinimum": 0,
       "maximum": 30
      }
     },
     {
      "name": "isha_angle",
      "in": "query",
      "required": false,
      "description": "Isha twilight angle in degrees (above 0, at most 30), replacing the method's angle or fixed interval.",
      "schema": {
       "type": "number",
       "exclusiveMinimum": 0,
       "maximum": 30
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "description": "Adds prayer names in this language and a written Hijri date. Keys and time values never change.",
      "schema": {
       "type": "string",
       "enum": [
        "en",
        "ar",
        "ur",
        "bn",
        "tr",
        "ms",
        "id",
        "fr"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The mosque",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Mosque"
        }
       }
      }
     },
     "301": {
      "description": "Non-canonical request: permanent redirect to the canonical URL, which is the one to cache."
     },
     "400": {
      "description": "Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many uncached requests from this client; see Retry-After.",
      "headers": {
       "Retry-After": {
        "schema": {
         "type": "integer"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/v1/mosques/near/{lat},{lon}.json": {
   "get": {
    "operationId": "searchMosques",
    "summary": "Mosques near a point, nearest first (a directory: fetch a mosque's times from its url)",
    "parameters": [
     {
      "name": "lat",
      "in": "path",
      "required": true,
      "description": "Latitude, decimal degrees (rounded to 2 decimals in the canonical URL).",
      "schema": {
       "type": "number",
       "minimum": -90,
       "maximum": 90
      },
      "example": 41.88
     },
     {
      "name": "lon",
      "in": "path",
      "required": true,
      "description": "Longitude, decimal degrees (rounded to 2 decimals in the canonical URL).",
      "schema": {
       "type": "number",
       "minimum": -180,
       "maximum": 180
      },
      "example": -87.63
     },
     {
      "name": "radius_km",
      "in": "query",
      "required": false,
      "description": "Search radius in km.",
      "schema": {
       "type": "integer",
       "enum": [
        2,
        5,
        10,
        25,
        50
       ],
       "default": 10
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "Most results to return.",
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 50,
       "default": 20
      }
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "Keep only names containing this (case and accents ignored).",
      "schema": {
       "type": "string",
       "maxLength": 100
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Nearby mosques",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Near"
        }
       }
      }
     },
     "301": {
      "description": "Non-canonical request: permanent redirect to the canonical URL, which is the one to cache."
     },
     "400": {
      "description": "Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many uncached requests from this client; see Retry-After.",
      "headers": {
       "Retry-After": {
        "schema": {
         "type": "integer"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "Error": {
    "type": "object",
    "properties": {
     "error": {
      "type": "object",
      "properties": {
       "code": {
        "type": "string",
        "description": "Stable error code, e.g. bad_coordinates, bad_method, bad_radius, not_found, no_official_source, rate_limited."
       },
       "message": {
        "type": "string"
       }
      },
      "required": [
       "code",
       "message"
      ]
     }
    },
    "required": [
     "error"
    ]
   },
   "Day": {
    "type": "object",
    "properties": {
     "date": {
      "type": "string",
      "format": "date"
     },
     "hijri": {
      "type": "string",
      "description": "Umm al-Qura date, YYYY-MM-DD."
     },
     "hijri_official": {
      "type": "string",
      "description": "The authority's Hijri date, where published."
     },
     "hijri_text": {
      "type": "string"
     },
     "fajr": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local 24-hour time, or null where it cannot occur."
     },
     "sunrise": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local 24-hour time, or null where it cannot occur."
     },
     "dhuhr": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local 24-hour time, or null where it cannot occur."
     },
     "asr": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local 24-hour time, or null where it cannot occur."
     },
     "maghrib": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local 24-hour time, or null where it cannot occur."
     },
     "isha": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "Local 24-hour time, or null where it cannot occur."
     },
     "utc": {
      "type": "object",
      "additionalProperties": {
       "type": [
        "string",
        "null"
       ],
       "format": "date-time"
      }
     },
     "calculated": {
      "type": "object",
      "description": "On official days: the same prayers from the calculation, with its method."
     }
    },
    "required": [
     "date",
     "fajr",
     "sunrise",
     "dhuhr",
     "asr",
     "maghrib",
     "isha"
    ]
   },
   "Times": {
    "type": "object",
    "properties": {
     "location": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number"
       },
       "lon": {
        "type": "number"
       },
       "tz": {
        "type": "string"
       },
       "country": {
        "type": [
         "string",
         "null"
        ]
       },
       "high_latitude": {
        "type": "boolean"
       }
      }
     },
     "source": {
      "type": "object",
      "properties": {
       "kind": {
        "type": "string",
        "enum": [
         "calculated",
         "official"
        ]
       },
       "authority": {
        "type": "string"
       },
       "name": {
        "type": "string"
       },
       "zone": {
        "type": "string"
       },
       "url": {
        "type": "string"
       },
       "attribution": {
        "type": "string"
       },
       "retrieved": {
        "type": "string"
       },
       "note": {
        "type": "string"
       }
      },
      "required": [
       "kind"
      ]
     },
     "method": {
      "type": "object"
     },
     "days": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Day"
      }
     },
     "labels": {
      "type": "object",
      "additionalProperties": {
       "type": "string"
      }
     },
     "notes": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "api_version": {
      "type": "string"
     },
     "defaults_version": {
      "type": "string"
     }
    },
    "required": [
     "location",
     "source",
     "method",
     "days"
    ]
   },
   "PublishedTime": {
    "type": [
     "object",
     "null"
    ],
    "properties": {
     "text": {
      "type": "string",
      "description": "Exactly as the mosque published it, e.g. \"5:15 AM\" or \"5 mins after adhan\"."
     },
     "time": {
      "type": [
       "string",
       "null"
      ],
      "description": "\"HH:MM\" (24-hour, mosque-local) when text is a plain clock time, else null."
     }
    },
    "required": [
     "text",
     "time"
    ]
   },
   "MosquePrayer": {
    "type": "object",
    "properties": {
     "iqamah": {
      "$ref": "#/components/schemas/PublishedTime"
     },
     "azaan": {
      "type": "object",
      "properties": {
       "mosque": {
        "$ref": "#/components/schemas/PublishedTime"
       },
       "official": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^\\d{2}:\\d{2}$",
        "description": "Local 24-hour time, or null where it cannot occur."
       },
       "calculated": {
        "type": [
         "string",
         "null"
        ],
        "pattern": "^\\d{2}:\\d{2}$",
        "description": "Local 24-hour time, or null where it cannot occur."
       }
      }
     }
    }
   },
   "Mosque": {
    "type": "object",
    "properties": {
     "format": {
      "const": "mosque/v1"
     },
     "id": {
      "type": "string",
      "format": "uuid"
     },
     "name": {
      "type": "string"
     },
     "address": {
      "type": "object",
      "properties": {
       "text": {
        "type": [
         "string",
         "null"
        ]
       },
       "street": {
        "type": [
         "string",
         "null"
        ]
       },
       "city": {
        "type": [
         "string",
         "null"
        ]
       },
       "state": {
        "type": [
         "string",
         "null"
        ]
       },
       "postal_code": {
        "type": [
         "string",
         "null"
        ]
       },
       "country": {
        "type": [
         "string",
         "null"
        ]
       }
      }
     },
     "location": {
      "type": "object",
      "properties": {
       "lat": {
        "type": "number"
       },
       "lon": {
        "type": "number"
       }
      }
     },
     "timezone": {
      "type": "string"
     },
     "website": {
      "type": [
       "string",
       "null"
      ]
     },
     "status": {
      "type": "string",
      "enum": [
       "fresh",
       "stale",
       "queued",
       "none"
      ],
      "description": "stale: nothing stored for today and not read today; queued: no times yet, coming; none: no readable source."
     },
     "stale": {
      "type": "boolean"
     },
     "as_of": {
      "type": [
       "string",
       "null"
      ]
     },
     "extracted_at": {
      "type": [
       "string",
       "null"
      ],
      "format": "date-time"
     },
     "days": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "date": {
         "type": "string",
         "format": "date"
        },
        "hijri": {
         "type": "string"
        },
        "hijri_official": {
         "type": "string"
        },
        "published_for": {
         "type": "string",
         "format": "date",
         "description": "Set when the latest known day is carried to today."
        },
        "prayers": {
         "type": "object",
         "properties": {
          "fajr": {
           "$ref": "#/components/schemas/MosquePrayer"
          },
          "dhuhr": {
           "$ref": "#/components/schemas/MosquePrayer"
          },
          "asr": {
           "$ref": "#/components/schemas/MosquePrayer"
          },
          "maghrib": {
           "$ref": "#/components/schemas/MosquePrayer"
          },
          "isha": {
           "$ref": "#/components/schemas/MosquePrayer"
          }
         }
        },
        "sunrise": {
         "type": "object",
         "properties": {
          "mosque": {
           "$ref": "#/components/schemas/PublishedTime"
          },
          "official": {
           "type": [
            "string",
            "null"
           ],
           "pattern": "^\\d{2}:\\d{2}$",
           "description": "Local 24-hour time, or null where it cannot occur."
          },
          "calculated": {
           "type": [
            "string",
            "null"
           ],
           "pattern": "^\\d{2}:\\d{2}$",
           "description": "Local 24-hour time, or null where it cannot occur."
          }
         }
        },
        "jumuah": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "location": {
            "type": [
             "string",
             "null"
            ]
           },
           "azaan": {
            "$ref": "#/components/schemas/PublishedTime"
           },
           "khutbah": {
            "$ref": "#/components/schemas/PublishedTime"
           },
           "prayer": {
            "$ref": "#/components/schemas/PublishedTime"
           },
           "speaker": {
            "type": [
             "string",
             "null"
            ]
           }
          }
         }
        }
       }
      }
     },
     "calculated": {
      "type": "object",
      "description": "The method used for azaan.calculated."
     },
     "official": {
      "type": [
       "object",
       "null"
      ],
      "description": "The authority behind azaan.official, with its attribution."
     },
     "api_version": {
      "type": "string"
     },
     "defaults_version": {
      "type": "string"
     }
    },
    "required": [
     "format",
     "id",
     "name",
     "status",
     "days"
    ]
   },
   "Near": {
    "type": "object",
    "properties": {
     "location": {
      "type": "object"
     },
     "radius_km": {
      "type": "integer"
     },
     "q": {
      "type": [
       "string",
       "null"
      ]
     },
     "total": {
      "type": "integer"
     },
     "mosques": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "id": {
         "type": "string",
         "format": "uuid"
        },
        "name": {
         "type": "string"
        },
        "distance_km": {
         "type": "number"
        },
        "location": {
         "type": "object",
         "properties": {
          "lat": {
           "type": "number"
          },
          "lon": {
           "type": "number"
          }
         }
        },
        "city": {
         "type": [
          "string",
          "null"
         ]
        },
        "country": {
         "type": [
          "string",
          "null"
         ]
        },
        "has_source": {
         "type": "boolean"
        },
        "url": {
         "type": "string",
         "format": "uri"
        }
       }
      }
     },
     "api_version": {
      "type": "string"
     }
    },
    "required": [
     "total",
     "mosques"
    ]
   }
  }
 },
 "security": []
}
