POIs locaux (Search API)
Nécessite une clé API : Obtenez-en une à https://api.search.brave.com
Plan : Inclus dans le plan Search. Voir https://api-dashboard.search.brave.com/app/subscriptions/subscribe
Flux en deux étapes : Cet endpoint nécessite des IDs POI d'une recherche web préalable.
- Appelez
web-searchavecresult_filter=locationspour obtenir les IDs POI depuislocations.results[].id- Passez ces IDs à cet endpoint pour obtenir les détails commerciaux complets
Démarrage rapide (cURL)
Obtenir les détails d'un POI
curl -s "https://api.search.brave.com/res/v1/local/pois" \
-H "Accept: application/json" \
-H "Accept-Encoding: gzip" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
-G \
--data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA="
Plusieurs POIs avec en-têtes de localisation
curl -s "https://api.search.brave.com/res/v1/local/pois" \
-H "Accept: application/json" \
-H "Accept-Encoding: gzip" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
-H "X-Loc-Lat: 37.7749" \
-H "X-Loc-Long: -122.4194" \
-G \
--data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=" \
--data-urlencode "ids=loc4HTAVTJKP4RBEBZCEMBI3NG26YD4II4PATIHPDYI=" \
--data-urlencode "units=imperial"
Remarque : Les IDs POI sont des chaînes opaques retournées dans locations.results[].id des résultats de recherche web. Les IDs sont éphémères et expirent après ~8 heures. Les IDs d'exemple ci-dessus sont à titre d'illustration — récupérez des IDs frais via web-search avec result_filter=locations. Utilisez --data-urlencode car les IDs peuvent contenir =.
Endpoint
GET https://api.search.brave.com/res/v1/local/pois
Authentification : En-tête X-Subscription-Token: <API_KEY>
Paramètres
| Paramètre | Type | Requis | Défaut | Description |
|---|---|---|---|---|
ids |
string[] | Oui | — | IDs POI des résultats de recherche web (1-20) |
search_lang |
string | Non | en |
Préférence de langue (code de langue 2+ caractères) |
ui_lang |
string | Non | en-US |
Langue de l'interface (code de locale, ex. « en-US ») |
units |
string | Non | null | metric (km) ou imperial (miles) |
En-têtes de localisation (Optionnel)
Pour le calcul de distance à partir de la localisation utilisateur :
| En-tête | Type | Plage | Description |
|---|---|---|---|
X-Loc-Lat |
float | -90,0 à 90,0 | Latitude utilisateur |
X-Loc-Long |
float | -180,0 à 180,0 | Longitude utilisateur |
Champs de la réponse
La réponse a type: "local_pois" et un tableau results d'objets LocationResult :
| Champ | Type | Description |
|---|---|---|
title |
string | Nom du commerce/POI |
url |
string | URL canonique pour la localisation |
provider_url |
string | URL de la page du fournisseur |
type |
string | Toujours "location_result" |
id |
string | Identifiant POI (chaîne opaque, valide ~8 heures) |
description |
string? | Brève description |
postal_address.type |
string | Toujours "PostalAddress" |
postal_address.displayAddress |
string | Adresse formatée pour l'affichage |
postal_address.streetAddress |
string? | Adresse postale |
postal_address.addressLocality |
string? | Ville |
postal_address.addressRegion |
string? | État/région |
postal_address.postalCode |
string? | Code postal/ZIP |
postal_address.country |
string? | Code pays |
contact.telephone |
string? | Numéro de téléphone |
contact.email |
string? | Adresse email |
rating.ratingValue |
float? | Note moyenne (≥0) |
rating.bestRating |
float? | Note maximale possible |
rating.reviewCount |
int? | Nombre d'avis |
rating.profile.name |
string? | Nom du fournisseur de note |
rating.profile.url |
string? | URL du fournisseur de note |
opening_hours.current_day |
object[]? | Horaires d'aujourd'hui (abbr_name, full_name, opens, closes) |
opening_hours.days |
object[][]? | Horaires pour chaque jour de la semaine (même structure) |
coordinates |
[float, float]? | Tuple [latitude, longitude] |
distance.value |
float? | Distance à partir de la localisation utilisateur |
distance.units |
string? | Unité de distance (km ou miles) |
categories |
string[] | Catégories commerciales (défaut []) |
price_range |
string? | Indicateur de prix ($, $$, $$$, $$$$) |
serves_cuisine |
string[]? | Types de cuisines (restaurants) |
thumbnail.src |
string? | URL de l'image miniature |
thumbnail.original |
string? | URL de l'image originale |
profiles |
object[]? | Profils externes (name, url, long_name, img) |
reviews.reviews_in_foreign_language |
bool | Si des avis en langue étrangère sont disponibles |
pictures.results |
object[]? | Miniatures de photos |
action |
object? | Action à effectuer — possède type (string) et url (string) |
results |
object[]? | Résultats web connexes (LocationWebResult avec meta_url) |
timezone |
string? | Fuseau horaire IANA (ex. America/Los_Angeles) |
timezone_offset |
int? | Décalage de fuseau horaire UTC |
Exemple de réponse
{
"type": "local_pois",
"results": [
{
"type": "location_result",
"title": "Park Mediterranean Grill",
"url": "https://yelp.com/biz/park-mediterranean-grill-sf",
"provider_url": "https://yelp.com/biz/park-mediterranean-grill-sf",
"id": "loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=",
"postal_address": {
"type": "PostalAddress",
"displayAddress": "123 Main St, San Francisco, CA 94102",
"streetAddress": "123 Main St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94102",
"country": "US"
},
"contact": { "telephone": "+1 415-555-0123" },
"thumbnail": {
"src": "https://example.com/thumb.jpg",
"original": "https://example.com/original.jpg"
},
"rating": {
"ratingValue": 4.5,
"bestRating": 5.0,
"reviewCount": 234,
},
"opening_hours": {
"current_day": [
{ "abbr_name": "Mon", "full_name": "Monday", "opens": "07:00", "closes": "21:00" }
]
},
"coordinates": [37.7749, -122.4194],
"distance": { "value": 0.3, "units": "miles" },
"categories": ["Mediterranean", "Greek"],
"price_range": "$$",
"serves_cuisine": ["Mediterranean", "Greek"],
"timezone": "America/Los_Angeles"
}
]
}
Obtenir les IDs POI
Les IDs POI proviennent de l'API Web Search (web-search) avec result_filter=locations :
# 1. Rechercher des commerces locaux
curl -s "https://api.search.brave.com/res/v1/web/search?q=coffee+shops+near+me&result_filter=locations" \
-H "Accept: application/json" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
-H "X-Loc-Lat: 37.7749" \
-H "X-Loc-Long: -122.4194"
# 2. Extraire les IDs POI depuis locations.results[].id
# 3. Utiliser ces IDs avec cet endpoint
Cas d'usage
- Recherche de commerces locaux : Récupérer les détails complets (horaires, contact, adresse) pour les POIs surfacés dans la recherche web
- Pipeline de découverte de restaurants : Chercher des restaurants, récupérer les détails POI, filtrer par cuisine/note/gamme de prix
- Vérificateur d'horaires commerciaux : Obtenir opening_hours pour un commerce afin de déterminer s'il est actuellement ouvert
- Application sensible à la localisation : Combiner avec les en-têtes de localisation pour obtenir les calculs de distance pour les POIs à proximité
Remarques
- Format ID : Chaînes opaques (utilisez
--data-urlencodepour cURL) - Unités :
metricouimperialpour la préférence d'unité de distance - IDs max : Jusqu'à 20 IDs par requête