Skip to content

Check a route for danger spots

Plans driving routes between two points (via OSRM, with alternatives) and lists every reported spot within 150 m of each route. Disputed spots are ignored.

Routes are sorted safest first: by risk (the sum of the severities of the spots along the route), then by duration.

Rate limit: 20 route checks per minute per visitor.

GET
https://deathspot.org/api/route

Query parameters

  • fromstringrequired

    Start point as lat,lng, inside Uganda.

    pattern: ^-?\d+(\.\d+)?,-?\d+(\.\d+)?$
    Example: "0.34918,32.57195"
  • tostringrequired

    Destination as lat,lng, inside Uganda.

    pattern: ^-?\d+(\.\d+)?,-?\d+(\.\d+)?$
    Example: "0.36582,32.52923"

Returns

200

One or more routes, safest first.

JSON
  • routesarray ofobjectrequired
    5 properties
    • distancenumberrequired

      Route length in metres.

      Example: 7350.2
    • durationnumberrequired

      Estimated driving time in seconds.

      Example: 492.8
    • linearray ofobjectrequired

      The route geometry as an ordered list of points.

      2 properties
      • latnumberrequired
        format: double
      • lngnumberrequired
        format: double
    • dangersarray ofobjectrequired
      3 properties
      • spotobjectrequired

        A reported danger spot on the public map.

        18 properties
        • idintegerrequired
          Example: 1
        • titlestringrequired
          maxLength: 80
          Example: "Mukwano Road (near CID HQ)"
        • descriptionstringrequired

          What people should know about the place. It may be empty.

          maxLength: 600
        • latnumberrequired
          format: double, maximum: 4.3, minimum: -1.6
          Example: 0.30827
        • lngnumberrequired
          format: double, maximum: 35.1, minimum: 29.5
          Example: 32.58721
        • areastringrequired

          Neighbourhood, division or landmark. It may be empty.

          maxLength: 80
          Example: "Kibuli, Makindye"
        • categorymurderormob_actionorboda_gangorrobberyorstabbingorkidnapping+1 morerequired

          What happens at the spot: murder (killing), mob_action, boda_gang, robbery (robbery or snatching), stabbing (stabbing or hacking), kidnapping, other.

        • severityintegerrequired

          1 = feels unsafe, 2 = harassment or threats, 3 = robbery or snatching, 4 = violent attack, 5 = someone was killed.

          maximum: 5, minimum: 1
          Example: 5
        • time_of_daydayornightoranyrequired

          When the spot is dangerous.

        • incident_datestring | nullrequired
          format: date
          Example: "2026-09-23"
        • source_urlstring | nullrequired

          A news, police or court source, if the reporter gave one.

          format: uri
        • created_atstringrequired
          format: date-time
        • last_confirmed_atstring | nullrequired

          When someone last voted "still dangerous".

          format: date-time
        • confirmationsintegerrequired

          Number of "still dangerous" votes.

          minimum: 0
        • denialsintegerrequired

          Number of "not anymore" votes.

          minimum: 0
        • statusunverifiedorconfirmedordisputedrequired

          The community's verdict from votes. confirmed needs at least 3 more confirmations than denials, and disputed means denials outnumber confirmations by more than 2.

        • moderator_verifiedbooleanrequired

          true when a moderator has checked the spot against a reliable source. Shown as "Verified by moderators".

        • seededbooleanrequired

          true for spots loaded from the project's sourced seed data rather than reported through the app.

      • distancenumberrequired

        Distance from the route, in metres (at most bufferMeters).

        Example: 42.7
      • alongnumberrequired

        How far into the trip the spot is, in metres. Dangers are sorted by this.

        Example: 1830.4
    • riskintegerrequired

      Sum of the severities of dangers. Lower is safer.

      Example: 10
  • bufferMetersintegerrequired

    How close to the route a spot must be to count, in metres.

    Example: 150

400

from or to is missing, malformed, or outside Uganda.

JSON
  • errorstringrequired

    A human-readable message you can show to users.

404

The routing service found no route between the points.

JSON
  • errorstringrequired

    A human-readable message you can show to users.

429

The caller exceeded a rate limit. Wait Retry-After seconds before retrying.

JSON
  • errorstringrequired

    A human-readable message you can show to users.

502

The upstream routing service (OSRM) is unavailable.

JSON
  • errorstringrequired

    A human-readable message you can show to users.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close