Navvo
Changelog

API & SDK changelog

The integrator-facing slice of the Navvo changelog — endpoint, SDK and documentation changes only.

API & SDK changelog

The slice of the platform changelog that affects code you write against Navvo: endpoints, authentication, rate limits, response shapes, client SDKs and the documentation itself.

Changes that only affect navvo.io itself — the consumer map, the account UI, internal operations — are filtered out here. To see the whole picture, read the full platform changelog.
52updates
509changes
6 October 2026Latest
Follow changes programmaticallyJSON feedRSS feed
  1. October 2026
  2. Analysed traffic on the map, per-country Ramadan and Eid dates, and Atlas stays on topic

    Navvo now predicts the traffic expected at any place and time in the Middle East from years of past traffic, adjusted for Ramadan and iftar, Eid and holidays, school breaks, the month and the weather; the map draws it on roads that have no live traffic, and Atlas uses it to answer questions about usual and future traffic. Ramadan and Eid now fall on each country's own dates. Atlas and the documentation assistant also now answer only what they are for.

    • ChangedAtlas AI

      Atlas answers only map and place questions

      POST /ai/atlas now declines requests that have nothing to do with places, routes, traffic or the map, such as poems, homework, general trivia or unrelated code, with one friendly sentence in the user's language and action "answer". Questions about the place or area in view, including its history and what it is known for, are still answered.

    • ChangedAtlas AI

      Documentation assistant sticks to building on Navvo

      The assistant on these docs now helps only with Navvo's APIs, SDKs, keys and docs, including code that calls Navvo, and points you to a relevant docs topic for anything else.

    • FixedTraffic

      Traffic history is filed under the hour each drive happened

      Contributed trips used to be recorded under the hour they were processed, so a trip uploaded late landed in the wrong hour of the learned history. Each road a trip drove is now recorded under the hour its GPS points were captured, and a trip that crosses an hour boundary is split by road. Profiles, insights and forecasts learn from the right hours from now on.

      POST /telemetry/tripsDocs
    • FixedTraffic

      Traffic calendar follows each country's own weekend, Ramadan and holidays

      The holiday, weekend and Ramadan flags behind traffic profiles now cover 15 countries, each in its own local time, with its own weekend for the period (Saturday–Sunday in the UAE and Lebanon, for example), Ramadan from the Hijri date, and its public holidays and Eids. Roads are matched to the country they are in instead of all being read as Jordan, and older dates are classified correctly instead of being treated as ordinary workdays.

      GET /traffic/profileGET /traffic/labelsGET /traffic/forecastDocs
    • AddedTraffic

      Expected traffic for any place and time in the Middle East

      New `GET /traffic/analysed` returns the traffic expected at a point and moment, from Navvo's model of past traffic in the region, adjusted for Eid, public holidays and school holidays, the hour after iftar in Ramadan, the month, and heavy rain, storms or dust (from the forecast for the next 72 hours, or a what-if `weather`). `/traffic/analysed/week` adds seven days by hour with each day's best and worst two-hour windows, `/traffic/analysed/outlook` a short daily outlook in English or Arabic, and `/traffic/analysed/model` the model fits behind them. Answers are labelled `navvo-analysed-traffic`, are never live, and return `basis: "none"` instead of an error where the model has no data yet.

      GET /traffic/analysedGET /traffic/analysed/weekGET /traffic/analysed/outlookGET /traffic/analysed/modelDocs
    • AddedAtlas AI

      Atlas answers questions about usual and future traffic

      Ask Atlas how traffic will be tomorrow at 8, on Friday evening, during Ramadan or if it rains, or when it is best to leave, and it answers from analysed traffic in the user's local time, always as expected traffic rather than a live reading. Questions about traffic right now still use live data.

      POST /ai/atlasDocs
  3. SDKs 0.3.0, unlimited API keys, focused map search, cleaner Arabic names

    The SDKs reach 0.3.0 with the price filter and result details, Navvo can now make an API key unlimited, map search now shows only the search's pins, a data fix removes Arabic names that places had wrongly inherited from a brand, and search no longer lets a far branch of a chain outrank nearby ones.

    • FixedSearch & Places

      Wrong Arabic names removed from 1,076 places

      An August backfill had given places the bare Arabic name of a brand mentioned in their English name, such as an ATM named as the whole bank or a shop named after its mall, so many unrelated places shared one Arabic name. Those 1,076 names are removed, and these places show their English name until a real Arabic one is added. The 140 places whose name is the brand keep it, and 6 got a better reading.

      GET /searchGET /places/{slug}Docs
    • ImprovedSearch & Places

      A chain's far branch no longer outranks nearby ones

      With an origin, an exact name match more than 25 km away now competes on distance with nearer places whose names contain the query. So `carrefour` from Amman lists Amman's branches before one in another country. A major place, with thousands of reviews or very high popularity, keeps its lead however far it is, such as Petra or Al-Aqsa Mosque.

      GET /searchDocs
    • AddedSDKs

      Web, Node, Python, Go and Java SDKs 0.3.0: price filter and result details

      All five SDKs take the search `price` filter (levels 1–4) and return the new result details on search and similar-places results: today's hours, price range and level, a short address, area, review count, category name and highlights. Similar places also take a `locale`, and the Web SDK falls back to the client's `language`, so its `similar()` calls now send that language. Existing calls keep working, and downloads and checksums are at docs.navvo.io/sdks.

      GET /searchGET /search/similarDocsDocsDocsDocsDocs
    • FixedSDKs

      The script-tag Web SDK bundle now serves the latest version

      The bundle the quickstart loads from `docs.navvo.io/navvo-maps/` was still version 0.1.0, so pages using it had none of the search features added since. It now serves 0.3.0, which keeps every 0.1.0 class and method. If such a page sends its requests through your own proxy, allow the `x-navvo-source` request header in the proxy's CORS policy.

    • AddedDeveloper Platform

      API keys can be made unlimited

      Navvo can now mark a key unlimited: it has no per-minute or per-day quota and no per-IP limit, and on endpoints that need a scope it also skips the request throttle. Revocation, scopes, the key's website and IP locks, endpoints with their own anti-abuse limits and request-size limits still apply, and its usage is still counted and billed. Key objects carry a read-only `unlimited` field, the usage endpoint reports a `null` limit for such a key, and responses send `x-navvo-quota-unlimited: true`.

      GET /developer/api-keysGET /developer/api-keys/{id}/usageDocsDocsDocs
    • FixedDeveloper Platform

      Editing a key in the portal no longer lowers its quotas

      Saving any change to a key in the Developer Portal re-sent both quotas and cut a higher limit set by Navvo down to the self-serve cap, so a label edit could drop a key from 100,000 to 255 requests a minute. A quota now changes only when you change it, and an unlimited key's quotas are left as they are.

      PATCH /developer/api-keys/{id}Docs
  4. Search monitoring now tests location search; cleaner recovery after restarts

    Follow-ups to the 1 October incident and to a server restart on 4 October. Search analytics missed about two days of data.

    • FixedSearch & Places

      The first meaning-based search after a restart no longer comes back empty

      Right after the search engine restarted, the first meaning-based query could miss its time limit while the engine loaded its data, and the request fell back to keyword-only results — for a descriptive query such as `place to watch football`, an empty list. The platform now runs that first query itself at start-up and every few minutes. A worker that cannot reach the engine also checks again after 30 seconds instead of treating meaning-based matching as unavailable for five minutes.

      GET /searchDocs
    • FixedSearch & Places

      Search analytics missed two days of data (2–4 October)

      Search analytics was not recorded from 2 October 02:55 to 4 October 11:02 Amman time. Collection pauses by design when the database disk has less than 3 GB free, and it stayed below that until space was freed on 4 October. Searches were answered normally throughout; searches and click events from that window are missing from analytics and cannot be recovered. Collection has resumed.

      GET /searchPOST /search/eventsDocs
    • FixedSearch & Places

      `openNow` and opening hours work again

      Open/closed state was not being computed for any place: the stored opening hours were in a format the platform did not read. `openNow=true` on `GET /search` and `GET /places` returned nothing, `GET /places/{slug}/hours` reported no hours, and place details carried no `openState`. Hours are read again for all 43,864 places that have them; a day with no entry stays unknown rather than being reported as closed.

      GET /searchGET /placesGET /places/{slug}GET /places/{slug}/hoursDocsDocs
    • FixedSearch & Places

      Search suggestions: the starter list works

      `GET /search/suggestions` with an empty `q` always returned an empty list. It now returns everyday categories first (restaurant, coffee shop, fuel, pharmacy, supermarket …) followed by landmark places, in the language of `locale`, and the English list no longer contains Arabizi spellings.

      GET /search/suggestionsDocs
    • AddedSearch & Places

      `category` accepts several categories

      Send up to 10 category slugs separated by commas on `GET /search` to match any of them, for example `category=cafe,coffee-shop`. A single slug behaves as before, and a value that is not a category still matches nothing.

      GET /searchDocs
    • ImprovedSearch & Places

      Search analytics counts API-key traffic per key and removes more coordinate formats

      The recording limit for searches made with an API key is now applied per key rather than per network address, so a server that relays its users' searches is no longer undercounted. Before a query is stored, coordinates are also removed when written with hemisphere letters, in degrees, minutes and seconds, or as labelled `lat`/`lng` values.

      GET /searchDocs
  5. Meaning-based search is on; nearby search restored

    Distance-based search results were incomplete for part of the day; the search index was rebuilt and the cause fixed.

    • FixedSearch & Places

      Nearby and distance-sorted search results are complete again

      On 1 October, from about 03:00 to 14:30 Amman time, searches that depend on distance — near-me queries, `radiusKm`, `sort=distance` and category searches around a location — could miss places close to the caller, because an overnight maintenance step damaged the location part of the search index. Searches by name were not affected. The index was rebuilt and the maintenance step now preserves location data.

      GET /searchDocs
    • AddedSearch & Places

      Meaning-based matching is on

      Searches that keyword matching cannot answer, such as `fix my phone screen`, `place to watch football` or `take my dog to the vet`, now also find places that fit the description, across Arabic and English, entirely on Navvo's own infrastructure. It only adds results when keyword matching finds few strong ones, never runs while someone is typing (`mode=typeahead`), and responses where it contributed report `index.mode: hybrid`. API-key requests opt in with `semantic=on`.

      GET /searchDocs
    • ImprovedSearch & Places

      Meaning-based matching ignores random letters and reads Arabic as typed

      Meaning-based results need some evidence in the query (a word that matches the catalogue, a category or a filter), so random letters and off-topic questions return nothing, and Arabic queries are matched in the spelling the user typed. The hourly meaning-based budget for requests without an API key now counts only searches in which it actually runs.

      GET /searchDocs
  6. September 2026
  7. Milestone

    Search rebuilt for Arabic and Arabizi, with filters and analytics

    Place search has a new query pipeline: rule-based understanding of Arabic, English and Arabizi, match-first ranking, filters and facets, three new endpoints and consent-gated search analytics.

    • ImprovedSearch & Places

      Search understands Arabic, English and Arabizi without a model

      Query understanding is now a set of rules and curated vocabularies instead of a model call, so the same query always reads the same way and never waits. It recognises category words in all three scripts (`صيدلية`, `pharmacy`, `saydaliyeh`), areas (`cafe in Abdoun`), "near me", "open now" and qualifiers such as on-duty pharmacies, and it also tries Arabizi queries in Arabic script and Arabic queries in Latin letters. Category names in Arabic, English and Arabizi are now part of every place's searchable text: before, an Arabic category word such as فندق (hotel) matched only the 28 of 787 hotels whose Arabic name happened to contain it.

      GET /searchDocs
    • ImprovedSearch & Places

      Results rank by how well the name matches, then by distance and popularity

      Every result now falls into a match band (exact name, every word, every word allowing typos, partial, meaning-based), and a better band always ranks first; distance, popularity and text relevance decide within a band. A category search no longer favours a place that is merely named after the category, bus stops and car parks no longer outrank the place they serve, and without an origin, places in Jordan lead equally good matches abroad. `sort=distance` and `sort=rating` replace this order when you ask for them.

      GET /searchDocs
    • AddedSearch & Places

      Synonyms and alternative place names in Arabic, English and Arabizi

      Search now treats `circle`, `roundabout`, `dawar` and `دوار` as the same word, and likewise `street`, `share3` and `شارع`, following how places in Jordan are actually named and typed. Places can also carry alternative names, which Navvo administrators curate, so common transliterations and spellings find the same place.

      GET /searchDocs
    • ImprovedSearch & Places

      Place changes reach search within about two minutes

      The search index was rebuilt every six hours, so a new or edited place could take that long to become findable. Changes are now picked up every minute, hidden or removed places drop out on the same cycle, and scheduled full rebuilds run in place, so search keeps answering while they run.

      GET /searchDocs
    • AddedSearch & Places

      New search parameters: open now, rating, radius, amenities, sort and mode

      `GET /search` now accepts `openNow` (open right now, in Jordan time and holiday-aware), `minRating`, `radiusKm`, `amenities` (the same slugs as the place facets) and `sort=relevance|distance|rating`. `category` also includes sub-categories, so `category=food-and-drink` returns cafés, restaurants and bakeries. `originType=map` says the point is the map centre rather than the user's position, and `mode=typeahead|submit` separates keystrokes from searches.

      GET /searchDocs
    • AddedSearch & Places

      Search responses add facets, highlights, distance and a query id

      New additive fields: `queryId` for reporting clicks, `facets` with category and amenity counts (`facets=category,amenities`), HTML-escaped `highlight` names (`highlight=true`), `distanceKm`, `imageUrl`, `promoted` on results placed by an editorial or sponsored rule, `didYouMean` on misspelled queries that match nothing, and `index.mode`. Responses carry `Cache-Control: no-store`, and every existing field keeps its name and type.

      GET /searchDocs
  8. Milestone

    A junction view that looks like the place you are driving through

    The 3D junction window was redesigned — sky, stone-toned city, pavements, street trees and a lit tunnel interior — and the geometry behind it no longer drops out after a restart.

    • FixedPlatform & Ops

      Junction geometry stays available across restarts

      Junction views were blank and the bridge and tunnel endpoint answered with available: false. The service that computes that geometry kept stale state from its previous run, so every in-place restart left it unable to answer; the health check then replaced it, which failed the same way — 245 times. It now clears that state on every start, a restart is safe, and junction geometry answers normally again. Same endpoint, same response.

      GET /junction/structuresDocs
    • ImprovedDeveloper Platform

      Junction structures return buildings out to 360 m, nearest first

      The buildings array of GET /junction/structures now covers ~360 m around the point instead of ~220 m, sorted nearest first and capped at 900 (was: the first 320 found, in no particular order, so a cap could drop the blocks framing the junction itself). At one Amman junction that is 108 buildings instead of 35. The response shape is unchanged; a 450 m request is about 10–30 KB compressed.

      GET /junction/structuresDocs
  9. A faster, larger Atlas that says what it doesn't know

    Atlas and the documentation assistant move to a faster hosted model with a far larger context, traffic answers stop presenting usual patterns as live readings, and provider outages can no longer pass unnoticed.

    • ImprovedAtlas AI

      Atlas answers on a faster, larger model

      The model behind the map assistant is now a larger hosted model that typically answers in about one second, including when it looks up places or plans a route, and writes natural Arabic. The request and response contract is unchanged — the same actions, the same fields, and `model` is still always `navvo-ai`. If the hosted model is unavailable, Atlas falls back to a local model and then to its deterministic parser, as before.

      POST /ai/atlasPOST /ai/assistantDocs
    • FixedAtlas AI

      Atlas no longer presents usual traffic as live

      Most of Navvo's traffic answers are the usual pattern for the current hour, learned from past trips, rather than a live reading. Atlas used to receive that answer without its basis, so it could tell a user that a road was free flowing "right now". It now receives the basis with the data and phrases the answer accordingly — "usually at this time of day" — and makes clear that the answer covers an area, not a single road. Atlas also states only facts that came from Navvo's data in the same conversation, and says so when that data does not cover something, such as opening hours.

      POST /ai/atlasDocs
    • FixedAtlas AI

      "Near me" and traffic questions use the user's own area

      When a user asked for places near them, Atlas searched without the user's position, so results were not ranked by proximity; and "how is traffic?" returned a summary of the whole network labelled as the user's view. Both now use the area around the user when their position is known. When it is not, a traffic answer says it covers the whole network rather than presenting it as local.

      POST /ai/atlasDocs
    • ImprovedDocumentation

      The documentation assistant reads all of the documentation

      The assistant on docs.navvo.io used to answer from a selection of pages, trimmed to fit its model's limit — particularly in Arabic, where the full documentation did not fit. It now reads the entire documentation in the language of the question on every answer, and repeat questions are answered faster because the unchanged documentation is reused between them. When something is not documented it says so and points to the nearest page instead of guessing, and an error now shows a short, plain message rather than technical detail.

    • ImprovedDocumentation

      The first question after an update no longer waits for the documentation to be read

      The assistant reuses the documentation it has already read between questions, which is what makes most answers start within one to three seconds. After each update of the documentation site that reuse started from nothing, so the first question in each language waited around seventeen seconds while the assistant read the whole documentation. It now reads both languages once as the site starts, so the first visitor after an update typically gets an answer starting in a few seconds rather than waiting for that full read.

  10. Routing and address search restored

    Route planning, address search and junction geometry work again after a server restart left their supporting services unreachable.

    • FixedRouting & Navigation

      Route planning works again

      Starting a navigation session failed with "No route could be planned between the origin and destination" for every pair of points, and address search returned nothing from the base map. Neither was a data problem: the routing and address services could not be reached at all. A server restart on 18 September replayed a saved firewall snapshot that still contained forwarding rules for an older generation of those services, pointing three internal addresses at destinations that no longer existed. Anything listening on them was invisible, however healthy it was. The services now run on their own addresses, clear of those rules, and route planning, address search, reverse lookup and the bridge and tunnel geometry behind junction views are all working again. Nothing about the public API changed — same endpoints, same responses.

      POST /navigation/sessionsPOST /routing/routeGET /geocode/searchGET /geocode/reverseGET /junction/structures
  11. Imagery viewer token hardening

    The imagery viewer token is now issued from its own browser-scoped credential, with a new field so clients can tell a coverage gap from a disabled viewer.

    • SecurityImagery

      Viewer token is now issued from a dedicated browser-scoped credential

      GET /imagery/nearest-image previously fell back to a server-side credential when no dedicated viewer token was configured. That fallback has been removed: clientToken is now served only from a browser-scoped token and is null when none is set. Thumbnail URLs in image and nearby[] are pre-signed and unaffected, so place thumbnails keep working either way.

      GET /imagery/nearest-imageDocs
    • AddedImagery

      New viewerConfigured field on nearest-image

      Responses now include viewerConfigured, so a client can distinguish 'no imagery at this point' from 'the viewer is not enabled on this deployment' instead of showing one message for both.

      GET /imagery/nearest-imageDocs
  12. Domain ownership can be verified before a security review

    navvo.io can now prove to an outside reviewer that we control the domain, clearing the way for an authorised security assessment.

    • ChangedMapsBreaking

      The base map no longer shows businesses Navvo does not own

      The base map's tiles used to arrive carrying a layer of shops, banks, clinics, hotels, offices and transit stops from the open geographic survey they are built from. That was never Navvo data, and it is now removed from every vector tile before the tile is served. Because the removal happens in the tile itself and not in a style, it holds for any renderer — our styles, a style you wrote, or a third-party style pointed at our tiles — rather than only for maps drawn the way we expected. The same rule now applies to the API: address lookup returns streets, districts and cities and no longer surfaces businesses from that survey, and a reverse lookup on a coordinate that happens to sit on one still returns its street, neighbourhood and city with the business's name and category removed. The places Navvo does show are the ones in its own catalogue, and they are never painted onto the base map by default — ask for them through search, nearby, or the map-viewport endpoint and render them yourself. Tiles are also 18–35% smaller in cities as a result. Existing map sessions pick this up automatically; the tile address changes with the contents, so nothing is served from an old cache.

      GET /tiles/styleGET /tiles/vector/navvo/planet/{z}/{x}/{y}.pbfGET /geocode/searchGET /geocode/reverseDocsDocs
    • FixedMaps

      Road closures are clipped from map tiles again

      Three separate treatments of a vector tile — removing unowned businesses, applying label renames, and clipping closed roads — were written as mutually exclusive branches, so a tile received the first one that applied and none of the rest. With label renames active, which they have been, closed roads were never actually clipped out of a single tile: the closure still drew as an overlay, but the road underneath it stayed in the map data. The three now compose, so a tile gets every treatment that applies to it, and the tile's cache address names all of them so changing any one of them cannot serve a stale result.

      GET /tiles/vector/navvo/planet/{z}/{x}/{y}.pbfDocs
    • FixedSDKs

      Arabic labels read correctly in the Web SDK again

      Maps built with the Web SDK showed Arabic place and street names unshaped and in the wrong direction, or dropped them altogether, while everything else on the map looked right. The SDK loads a small text-shaping plugin the first time it meets right-to-left text, and the address it loads it from had been returning not-found: the file was in place, but the directory holding it carried no execute permission, so the web server could not reach into it. Nothing failed loudly — the map still drew, and only Arabic gave it away. The directory is fixed, so every existing integration is corrected without changing a line of their code or re-deploying anything, and a check now verifies at any time that each asset the SDK fetches at runtime is actually reachable and is the file it claims to be. If your own page blocks that request through a content-security policy, the plugin can be self-hosted and passed as rtlTextPluginUrl.

    • FixedSearch & Places

      Place search is back on the real search engine

      Place search had quietly been answering from a plain database text match for eight days, after the search engine behind it failed to come back from a server restart on 30 August. Nothing looked broken, because search is written to fall back rather than fail: results kept appearing, so the only outward sign was a single dependency reported as degraded. What was lost is everything the engine does that a plain text match cannot — tolerating a misspelling, ranking by relevance rather than by whether a substring happens to appear, and matching Arabic properly. The engine is running again, the index has been rebuilt over the full catalogue, and it is now set to restart automatically. Searching "pharmcy" or "hospitl" finds pharmacies and hospitals again.

      GET /searchDocs
Copyright © 2026