curl --request POST \
--url 'https://api.obvlo.com/v2/orgs/{orgId}/chat?key=' \
--header 'Content-Type: application/json' \
--data '
{
"message": "",
"action": "chat"
}
'{
"message": "<string>",
"listings": [
{
"id": "<string>",
"name": "<string>",
"category": "<string>",
"address": "<string>",
"geoDistance": 123,
"googleRating": 123,
"priceLevel": 123,
"openNow": true,
"photo": {
"url": "<string>"
},
"googleMapsUrl": "<string>"
}
],
"guides": [
{
"id": "<string>",
"name": "<string>",
"description": "<string>",
"coverImage": {
"url": "<string>"
},
"listingCount": 123,
"geoDistance": 123
}
],
"toolUsed": true,
"actions": [
{
"id": "<string>",
"label": "<string>",
"value": "<string>",
"type": "query"
}
],
"hostInterests": [
{
"id": "<string>",
"name": "<string>",
"travellerTypes": [
"<string>"
]
}
],
"itinerary": {
"name": "<string>",
"durationDays": 123,
"days": [
{
"dayNumber": 123,
"activities": [
{
"timeOfDay": "morning",
"activityType": "<string>",
"placeType": "listing",
"placeId": "<string>",
"placeName": "<string>",
"rationale": "<string>",
"placePhoto": "<string>",
"travelTime": 123,
"listing": {
"id": "<string>",
"name": "<string>",
"category": "<string>",
"address": "<string>",
"geoDistance": 123,
"googleRating": 123,
"priceLevel": 123,
"openNow": true,
"photo": {
"url": "<string>"
},
"googleMapsUrl": "<string>"
},
"location": {
"id": "<string>",
"name": "<string>",
"address": "<string>",
"description": "<string>",
"geoDistance": 123,
"photo": {
"url": "<string>"
},
"googleMapsUrl": "<string>"
}
}
],
"summary": "<string>"
}
],
"summary": "<string>"
}
}Preview conversational endpoint for recommendations, guide card listings, itinerary generation, and itinerary email delivery.
curl --request POST \
--url 'https://api.obvlo.com/v2/orgs/{orgId}/chat?key=' \
--header 'Content-Type: application/json' \
--data '
{
"message": "",
"action": "chat"
}
'{
"message": "<string>",
"listings": [
{
"id": "<string>",
"name": "<string>",
"category": "<string>",
"address": "<string>",
"geoDistance": 123,
"googleRating": 123,
"priceLevel": 123,
"openNow": true,
"photo": {
"url": "<string>"
},
"googleMapsUrl": "<string>"
}
],
"guides": [
{
"id": "<string>",
"name": "<string>",
"description": "<string>",
"coverImage": {
"url": "<string>"
},
"listingCount": 123,
"geoDistance": 123
}
],
"toolUsed": true,
"actions": [
{
"id": "<string>",
"label": "<string>",
"value": "<string>",
"type": "query"
}
],
"hostInterests": [
{
"id": "<string>",
"name": "<string>",
"travellerTypes": [
"<string>"
]
}
],
"itinerary": {
"name": "<string>",
"durationDays": 123,
"days": [
{
"dayNumber": 123,
"activities": [
{
"timeOfDay": "morning",
"activityType": "<string>",
"placeType": "listing",
"placeId": "<string>",
"placeName": "<string>",
"rationale": "<string>",
"placePhoto": "<string>",
"travelTime": 123,
"listing": {
"id": "<string>",
"name": "<string>",
"category": "<string>",
"address": "<string>",
"geoDistance": 123,
"googleRating": 123,
"priceLevel": 123,
"openNow": true,
"photo": {
"url": "<string>"
},
"googleMapsUrl": "<string>"
},
"location": {
"id": "<string>",
"name": "<string>",
"address": "<string>",
"description": "<string>",
"geoDistance": 123,
"photo": {
"url": "<string>"
},
"googleMapsUrl": "<string>"
}
}
],
"summary": "<string>"
}
],
"summary": "<string>"
}
}POST /v2/orgs/{orgId}/chat
key query parameter.
actions, hostInterests, and itinerary payloads may evolve.action field controls how the endpoint behaves.
action | Purpose |
|---|---|
chat | Default conversational search and recommendation flow. |
createItinerary | Builds a day-by-day itinerary from the active profile and preferences. |
sendEmail | Sends a previously generated itinerary to an email address. |
| Parameter | In | Type | Description |
|---|---|---|---|
orgId | path | string | Organisation ID for the request. |
key | query | string | Public API key for the organisation. |
| Field | Type | Description |
|---|---|---|
message | string | User message for the chat turn. Use "" when triggering a non-text action. |
profileId | string | Optional host profile context for search and itinerary generation. Required for createItinerary. |
lang | string | Optional BCP-47 language code for response content. |
latlng | string | Optional lat,lng user location override. |
conversationHistory | array | Prior user and assistant messages. |
preferences | object | Optional guided-discovery preferences: tripType, userCategory, interests. |
sessionId | string | Optional client session identifier for tracking. |
fingerprintId | string | Optional end-user fingerprint identifier for tracking. |
isInitialSearch | boolean | Optional hint to randomise initial recommendation ranking. |
curl --request POST \
--url 'https://api.obvlo.com/v2/orgs/YOUR_ORG_ID/chat?key=YOUR_API_KEY' \
--header 'content-type: application/json' \
--data '{
"message": "Find great cocktail bars nearby",
"profileId": "YOUR_HOST_ID",
"lang": "en-GB",
"action": "chat"
}'
curl --request POST \
--url 'https://api.obvlo.com/v2/orgs/YOUR_ORG_ID/chat?key=YOUR_API_KEY' \
--header 'content-type: application/json' \
--data '{
"message": "",
"action": "createItinerary",
"profileId": "YOUR_HOST_ID",
"durationDays": 3,
"preferences": {
"tripType": "leisure",
"userCategory": "couple",
"interests": ["food", "culture"]
}
}'
curl --request POST \
--url 'https://api.obvlo.com/v2/orgs/YOUR_ORG_ID/chat?key=YOUR_API_KEY' \
--header 'content-type: application/json' \
--data '{
"message": "",
"action": "sendEmail",
"email": "guest@example.com",
"itinerary": {
"name": "Weekend in London",
"durationDays": 2,
"days": []
}
}'
{
"message": "Here are a few cocktail bars worth trying tonight.",
"listings": [
{
"id": "listing-1",
"name": "Swift Soho",
"category": "bar",
"address": "12 Old Compton Street, London",
"geoDistance": 420,
"googleRating": 4.7,
"priceLevel": 2,
"openNow": true,
"photo": { "url": "https://cdn.example.com/swift.jpg" },
"googleMapsUrl": "https://maps.google.com/?q=swift+soho"
}
],
"guides": [
{
"id": "guide-1",
"name": "Best Cocktail Bars",
"description": "A curated shortlist of standout bars.",
"coverImage": { "url": "https://cdn.example.com/guide.jpg" },
"listingCount": 8,
"geoDistance": 380
}
],
"toolUsed": true
}
GET /v2/orgs/{orgId}/chat?guideId={guideId}&lang={lang}
curl --request GET \
--url 'https://api.obvlo.com/v2/orgs/YOUR_ORG_ID/chat?key=YOUR_API_KEY&guideId=YOUR_GUIDE_ID&lang=en-GB' \
--header 'accept: application/json'
{
"listings": [
{
"id": "listing-1",
"name": "Bar Termini",
"category": "bar",
"address": "7 Old Compton Street, London",
"geoDistance": 0,
"googleRating": 4.6,
"priceLevel": 2,
"openNow": null,
"photo": { "url": "https://cdn.example.com/bar-termini.jpg" },
"googleMapsUrl": "https://maps.google.com/?q=bar+termini"
}
]
}
Organization Account Number
Chat request payload.
chat, createItinerary, sendEmail Show child attributes
Show child attributes
^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$1 <= x <= 7