curl --request POST \
--url https://api.croma.run/sv/mitur-sv/places-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "El Tunco",
"kind": "lodging",
"department": "La Libertad"
}
'import requests
url = "https://api.croma.run/sv/mitur-sv/places-search/v1"
payload = {
"query": "El Tunco",
"kind": "lodging",
"department": "La Libertad"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'El Tunco', kind: 'lodging', department: 'La Libertad'})
};
fetch('https://api.croma.run/sv/mitur-sv/places-search/v1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.croma.run/sv/mitur-sv/places-search/v1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'El Tunco',
'kind' => 'lodging',
'department' => 'La Libertad'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.croma.run/sv/mitur-sv/places-search/v1"
payload := strings.NewReader("{\n \"query\": \"El Tunco\",\n \"kind\": \"lodging\",\n \"department\": \"La Libertad\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.croma.run/sv/mitur-sv/places-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"El Tunco\",\n \"kind\": \"lodging\",\n \"department\": \"La Libertad\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/sv/mitur-sv/places-search/v1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"El Tunco\",\n \"kind\": \"lodging\",\n \"department\": \"La Libertad\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"kind": "<string>",
"theme": "<string>",
"department": "<string>",
"municipality": "<string>",
"language": "<string>",
"registered_only": true,
"total": 123,
"total_is_exact": true,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"kind": "destination",
"themes": [
"<string>"
],
"guide_level": "site",
"registered": true,
"access": "public",
"department": "Ahuachapán",
"municipality": "<string>",
"region": "<string>",
"languages": [
"<string>"
],
"hours": "<string>",
"phones": [
"<string>"
],
"emails": [
"<string>"
],
"address": "<string>",
"website": "<string>",
"whatsapp": "<string>",
"social_links": [
"<string>"
],
"official_url": "<string>",
"updated_at": "<string>"
}
]
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}El Salvador Tourism Places Search
Search El Salvador’s official tourism directory, kept by the Ministerio de Turismo: destinations, public and private tourist sites, restaurants, lodging, transport, recreation, tourist information, surf schools and certified tour guides. Free text matches the name, description, address, town and region. Filter by kind, theme (surf_city, bitcoin, nature_adventure, archaeology, towns, wellness, regional), department, municipality, the language a guide works in, and registered_only for businesses in the national tourism registry. Businesses carry the contact details the directory publishes; guides carry their languages and area, not personal contacts. Served by Croma (as_of says how current the data is).
Dataset endpoint: answers from the whole source in milliseconds and carries as_of.
curl --request POST \
--url https://api.croma.run/sv/mitur-sv/places-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "El Tunco",
"kind": "lodging",
"department": "La Libertad"
}
'import requests
url = "https://api.croma.run/sv/mitur-sv/places-search/v1"
payload = {
"query": "El Tunco",
"kind": "lodging",
"department": "La Libertad"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'El Tunco', kind: 'lodging', department: 'La Libertad'})
};
fetch('https://api.croma.run/sv/mitur-sv/places-search/v1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.croma.run/sv/mitur-sv/places-search/v1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'El Tunco',
'kind' => 'lodging',
'department' => 'La Libertad'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.croma.run/sv/mitur-sv/places-search/v1"
payload := strings.NewReader("{\n \"query\": \"El Tunco\",\n \"kind\": \"lodging\",\n \"department\": \"La Libertad\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.croma.run/sv/mitur-sv/places-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"El Tunco\",\n \"kind\": \"lodging\",\n \"department\": \"La Libertad\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/sv/mitur-sv/places-search/v1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"El Tunco\",\n \"kind\": \"lodging\",\n \"department\": \"La Libertad\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"as_of": "<string>",
"query": "<string>",
"kind": "<string>",
"theme": "<string>",
"department": "<string>",
"municipality": "<string>",
"language": "<string>",
"registered_only": true,
"total": 123,
"total_is_exact": true,
"page": 123,
"per_page": 123,
"total_pages": 123,
"count": 123,
"results": [
{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"kind": "destination",
"themes": [
"<string>"
],
"guide_level": "site",
"registered": true,
"access": "public",
"department": "Ahuachapán",
"municipality": "<string>",
"region": "<string>",
"languages": [
"<string>"
],
"hours": "<string>",
"phones": [
"<string>"
],
"emails": [
"<string>"
],
"address": "<string>",
"website": "<string>",
"whatsapp": "<string>",
"social_links": [
"<string>"
],
"official_url": "<string>",
"updated_at": "<string>"
}
]
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}Authorizations
Use Authorization: Bearer YOUR_API_KEY
Headers
Optional client-chosen key for this request (any string up to 255 characters, e.g. a UUID). Every Croma operation is an idempotent lookup: repeating a request with the same body returns the same result and creates nothing, so retrying after a timeout or network failure is always safe. The key is echoed back in the Idempotency-Key response header so you can correlate a retry with its first attempt. Each attempt that reaches the API counts against the rate limit.
255"0f8e9a42-6b7c-4d1e-9a3f-2c5d7e8f9a0b"
Body
Optional search terms matched against the name, the description, the address, the town and the region.
200Optional kind of place: destination, attraction (a tourist site, public or private), restaurant, lodging, transport, recreation, tourist_info, surf_school or guide (a certified tour guide).
, destination, attraction, restaurant, lodging, transport, recreation, tourist_info, surf_school, guide Optional theme the Ministerio de Turismo files a destination under: surf_city, bitcoin (its Bitcoin destinations), nature_adventure, archaeology, towns, wellness or regional (destinations in neighbouring countries).
, surf_city, bitcoin, nature_adventure, archaeology, towns, wellness, regional Optional department of El Salvador, e.g. La Libertad, Santa Ana, Usulután.
, Ahuachapán, Cabañas, Chalatenango, Cuscatlán, La Libertad, La Paz, La Unión, Morazán, San Miguel, San Salvador, San Vicente, Santa Ana, Sonsonate, Usulután Optional town or municipality, e.g. Suchitoto, Tamanique, Concepción de Ataco, matched from the start. Case and accents are ignored.
80Optional language a tour guide works in, as an ISO 639 code: es, en, fr, it, de, pt or nah (Náhuat).
, es, en, fr, it, de, pt, nah When true, only businesses inscribed in the national tourism registry (Registro Nacional de Turismo).
1-based page number for paginated results.
1 <= x <= 1000Results per page (1-50).
1 <= x <= 50Response
Successful response
Show child attributes
Show child attributes