Destination deep-dive — schema
Everything about one known place, for its detail page.
| Response key | Field group | Shape |
| (root) | item |
object |
Fields
| Group | Key | Type | Target field | Maps owns | |
| item |
description |
string |
description |
— |
edit |
| item |
rating |
number · nullable |
rating |
yes |
edit |
| item |
review_count |
integer · nullable |
review_count |
yes |
edit |
| item |
price_level |
string |
price_level |
yes |
edit |
| item |
visit_duration_min |
integer · nullable |
visit_duration_min |
— |
edit |
| item |
safety_level |
string |
safety_level |
— |
edit |
| item |
audience |
arreglo de valores enum |
audience |
— |
edit |
| item |
opening_hours |
string |
opening_hours |
yes |
edit |
| item |
zone |
string |
zone |
— |
edit |
| item |
best_time |
string |
best_time |
— |
edit |
| item |
tips |
arreglo de cadenas |
tips |
— |
edit |
Assembled JSON schema
{
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "2-4 sentence description in Spanish (Bolivian register). This is the ONLY free-text field — everything else is atomic."
},
"visit_duration_min": {
"type": [
"integer",
"null"
],
"description": "Typical visit length in MINUTES (e.g. 120); null if unknown."
},
"safety_level": {
"type": "string",
"enum": [
"safe",
"caution",
"care",
"avoid",
""
],
"description": "How safe the place is for a visitor."
},
"audience": {
"type": "array",
"items": {
"type": "string",
"enum": [
"solo",
"couple",
"family"
]
},
"description": "Who the place suits."
},
"zone": {
"type": "string",
"description": "Neighborhood / area, e.g. 'Sopocachi'. '' if unknown."
},
"best_time": {
"type": "string",
"description": "When to go, terse, e.g. 'may–oct · mañanas'. '' if n/a."
},
"tips": {
"type": "array",
"items": {
"type": "string"
},
"description": "0-6 short practical tips (fragments, not paragraphs)."
}
},
"required": [
"description",
"visit_duration_min",
"safety_level",
"audience",
"zone",
"best_time",
"tips"
],
"additionalProperties": false
}