Skip to main content

Overview

The /v2/guide-search endpoint returns a paginated list of curated travel guides from the Obvlo content engine. You can filter by geography, free-text query, and guest personalisation attributes such as trip type and interests. By default, each guide result includes its embedded listings (points of interest). You can disable this with includeListings=false to get a lighter response.

Localised fields and the lang parameter

Guide fields (name, description, introText, keywords, attribution, centerLocation, preferences) and all localised fields of embedded listings carry translated content. The shape of these fields depends on whether lang is provided:
langField shapeExample
Provided (e.g. lang=en-GB)Plain value for the requested language."name": "Top Restaurants in Shoreditch"
OmittedLanguage map — one key per available language code."name": { "en-GB": "Top Restaurants in Shoreditch" }
When lang is omitted, at least the default language (en-GB) is always included in the map.

Request

GET /v2/orgs/{orgId}/guide-search

Required parameters

ParameterTypeDescription
orgIdstringYour organisation ID.

Optional parameters

ParameterTypeDefaultDescription
profileIdstringScope results to a specific host profile.
searchQuerystringFull-text query matched against guide names and descriptions.
latlngstringGeo-center for proximity ranking. Format: latitude,longitude (e.g. 51.5074,-0.1278).
radiusnumberProfile defaultSearch radius in metres around latlng.
pageinteger1Page number (1-based).
hitsPerPageinteger10Results per page. Maximum 20.
userCategorystringFilter by user category (e.g. couple, family, solo).
tripTypestringFilter by trip type (e.g. leisure, business).
userInterestsstringComma-separated interest tags used for personalised ranking.
includeListingsstringtrueSet to false to omit embedded listings from each guide.
maxListingsPerGuideinteger20Maximum listings to embed per guide when includeListings=true.
rankBystringscoreRanking strategy: score (relevance) or distance (nearest first, requires latlng).
langstringBCP 47 language code (e.g. en-GB). When provided, localised fields in guides and their embedded listings are returned as plain values for that language instead of language maps.

Examples

Basic search for an organisation

Basic search
curl "https://api.obvlo.com/v2/guide-search?orgId=YOUR_ORG_ID"

Geo-filtered search near London

Geo-filtered, near London
curl "https://api.obvlo.com/v2/guide-search?orgId=YOUR_ORG_ID&latlng=51.5074,-0.1278&radius=5000&hitsPerPage=5"

Personalised search for a couple on a leisure trip

Personalised search
curl "https://api.obvlo.com/v2/guide-search?orgId=YOUR_ORG_ID&userCategory=couple&tripType=leisure&userInterests=food,culture"

Search with a specific language

With parameter
curl "https://api.obvlo.com/v2/guide-search?orgId=YOUR_ORG_ID&lang=en-GB"

Search without embedded listings

Without embedded listings
curl "https://api.obvlo.com/v2/guide-search?orgId=YOUR_ORG_ID&includeListings=false"

Response

{
  "results": [
    {
      "id": "guide_abc123",
      "contentType": "guide",
      "name": "Top Restaurants in Shoreditch",
      "description": "A curated selection of the best places to eat...",
      "introText": "Shoreditch is known for its vibrant food scene...",
      "keywords": ["restaurants", "food", "shoreditch"],
      "geoLocation": [51.5247, -0.0755],
      "featured": false,
      "hostIds": ["host_xyz"],
      "listingIds": ["listing_1", "listing_2"],
      "languageCodes": ["en-GB", "fr-FR"],
      "updatedAt": 1739800000000,
      "geoDistance": 1234.5,
      "listings": [
        {
          "id": "listing_1",
          "contentType": "listing",
          "name": "Padella",
          "summary": "Acclaimed pasta restaurant in Borough Market.",
          "address": "6 Southwark St, London SE1 1TQ",
          "category": "restaurant",
          "geoLocation": [51.5051, -0.0906],
          "geoDistance": 950.0,
          "featured": false,
          "guideIds": ["guide_abc123"],
          "hostIds": ["host_xyz"],
          "score": 0.89,
          "searchId": "listing_1",
          "status": "active",
          "photos": []
        }
      ]
    }
  ],
  "total": 42,
  "pages": 5
}

Response fields

FieldTypeDescription
resultsarrayArray of guide objects (see below).
totalintegerTotal number of guides matching the query.
pagesintegerTotal number of pages at the requested hitsPerPage.

Guide object

FieldTypeDescription
idstringUnique guide identifier.
contentTypestringAlways "guide".
namestring | objectGuide name. Plain string when lang is provided; language map otherwise.
descriptionstring | objectGuide description. Plain string when lang is provided; language map otherwise.
introTextstring | objectIntro text. Plain string when lang is provided; language map otherwise.
keywordsarray | objectKeywords. Array when lang is provided; language map of arrays otherwise.
geoLocationarrayCoordinates as [latitude, longitude].
coverImageobjectCover image with multiple size variants. See Image object.
featuredbooleanWhether the guide is featured.
hostIdsarrayIDs of host profiles associated with this guide.
listingIdsarrayIDs of listings included in this guide.
languageCodesarrayLanguage codes for which content is available.
updatedAtintegerLast updated timestamp (Unix ms).
geoDistancenumberDistance in metres from the requested latlng (when provided).
listingsarrayEmbedded listing objects (when includeListings=true). Localised fields follow the same lang behaviour as top-level listing search results.

Image object

FieldTypeDescription
idstringUnique image identifier.
categorystringImage category tag.
attributionsarrayAttribution strings for the image.
imagesarrayArray of { size, url } variant objects.