Skip to main content

Overview

The /v2/listing-search endpoint returns a paginated list of individual listings from the Obvlo content engine. Listings represent single points of interest such as restaurants, hotels, attractions, or experiences. You can filter by geography, free-text query, activity tags, and guest personalisation attributes.

Localised fields and the lang parameter

Several listing fields (name, summary, tagline, address, category, activityTags, keywords, priceLevelText, planVisit, whatToExpect, additionalTextAttributes, preferences, integratedCategories) carry translated content. The shape of these fields depends on whether lang is provided:
langField shapeExample
Provided (e.g. lang=en-GB)Plain value — a single string (or array/object) for the requested language."summary": "A great place to eat."
OmittedLanguage map — one key per available language code."summary": { "en-GB": "A great place to eat.", "fr-FR": "Un excellent endroit." }
When lang is omitted, at least the default language (en-GB) is always included in the map.

Request

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

Required parameters

ParameterTypeDescription
orgIdstringYour organisation ID.

Optional parameters

ParameterTypeDefaultDescription
profileIdstringScope results to a specific host profile.
searchQuerystringFull-text query matched against listing names and descriptions.
latlngstringGeo-center for proximity ranking. Format: latitude,longitude (e.g. 51.5074,-0.1278).
radiusstringSearch radius in metres around latlng.
pagestring"1"Page number (1-based).
hitsPerPagestring"10"Results 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.
activityTagsstringComma-separated activity tags to filter results (e.g. outdoor,family-friendly).
langstringBCP 47 language code for localised response fields (e.g. en, fr, de).
rankBystringscoreRanking strategy: score (relevance) or distance (nearest first, requires latlng).

Examples

Basic search for an organisation

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

Geo-filtered search near Paris

Geo-filtered, near Paris
curl "https://api.obvlo.com/v2/listing-search?orgId=YOUR_ORG_ID&latlng=48.8566,2.3522&radius=2000&hitsPerPage=10"

Filter by activity tags

Filter by activity tags
curl "https://api.obvlo.com/v2/listing-search?orgId=YOUR_ORG_ID&activityTags=outdoor,family-friendly"

Personalised search with a specific language

Personalised search
curl "https://api.obvlo.com/v2/listing-search?orgId=YOUR_ORG_ID&userCategory=couple&tripType=leisure&lang=en-GB"

Ranked by distance

Ranked by distance
curl "https://api.obvlo.com/v2/listing-search?orgId=YOUR_ORG_ID&latlng=51.5074,-0.1278&rankBy=distance"

Response

{
  "results": [
    {
      "id": "listing_abc123",
      "contentType": "listing",
      "name": "Padella",
      "summary": "Acclaimed pasta restaurant in Borough Market.",
      "tagline": "Hand-rolled pasta made fresh daily.",
      "address": "6 Southwark St, London SE1 1TQ",
      "neighborhood": "Borough Market",
      "category": "restaurant",
      "activityTags": ["food", "casual-dining"],
      "geoLocation": [51.5051, -0.0906],
      "geoDistance": 850.2,
      "googleRating": 4.6,
      "googleMapsUrl": "https://maps.google.com/?q=Padella",
      "priceLevel": 2,
      "priceLevelText": "££",
      "openingHours": {
        "openNow": true,
        "periods": [
          {
            "open": { "day": 1, "time": "1200" },
            "close": { "day": 1, "time": "2145" }
          }
        ]
      },
      "photos": [
        {
          "id": "photo_xyz",
          "category": "food",
          "attributions": ["© Padella"],
          "keywords": [],
          "images": [
            { "size": "small", "url": "https://cdn.obvlo.com/photos/small/photo_xyz.jpg" },
            { "size": "large", "url": "https://cdn.obvlo.com/photos/large/photo_xyz.jpg" }
          ]
        }
      ],
      "languageCodes": ["en-GB", "fr-FR"],
      "featured": false,
      "guideIds": ["guide_abc123"],
      "hostIds": ["host_xyz"],
      "score": 0.92,
      "searchId": "listing_abc123",
      "status": "active"
    }
  ],
  "total": 128,
  "pages": 13
}

Response fields

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

Listing object

FieldTypeDescription
idstringUnique listing identifier.
contentTypestringAlways "listing".
namestring | objectListing name. Plain string when lang is provided; language map otherwise.
summarystring | objectShort description. Plain string when lang is provided; language map otherwise.
taglinestring | objectOne-line tagline. Plain string when lang is provided; language map otherwise.
addressstring | objectStreet address. Plain string when lang is provided; language map otherwise.
neighborhoodstringNeighbourhood or area name (not localised).
categorystring | objectPrimary category. Plain string when lang is provided; language map otherwise.
activityTagsarray | objectActivity tags. Array when lang is provided; language map of arrays otherwise.
geoLocationarrayCoordinates as [latitude, longitude].
geoDistancenumberDistance in metres from the requested latlng (when provided).
googleRatingnumberGoogle Places rating (0–5).
googleMapsUrlstringLink to Google Maps.
phoneNumberstringContact phone number.
websiteUrlstringOfficial website URL.
priceLevelintegerNumeric price level (1–4).
priceLevelTextstring | objectPrice label (e.g. ££). Plain string when lang is provided; language map otherwise.
openingHoursobjectOpening hours data. See Opening hours object.
photosarrayArray of photo objects. See Image object.
languageCodesarrayLanguage codes for which content is available.
scorenumberRelevance score (0–1) used for ranking.
statusstringListing status (e.g. active).

Opening hours object

FieldTypeDescription
openNowbooleanWhether the listing is currently open.
nextCloseTimestringISO 8601 datetime of next closing time.
isUnavailablebooleantrue if opening hours data is not available.
periodsarrayArray of { open, close } period objects.
Each period has open and close objects with:
FieldTypeDescription
dayintegerDay of week (0 = Sunday, 6 = Saturday).
timestring24h time string without colon (e.g. "0900").

Image object

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