Soumettre une recherche
GET /v1/place-lookup/{id} jusqu’à ce que lookup.status vaille COMPLETED. La plupart des recherches se terminent en moins de deux minutes : interrogez toutes les 5 à 10 secondes. Une recherche n’envoie pas de webhook. Le schéma de la requête est dans la référence API.
Champs de la requête
Les autres champs,
webhook compris, renvoient 400 VALIDATION_ERROR.
Comment une recherche interroge
Chaque moteur reçoit deux questions. ChatGPT, Gemini et Copilot doivent afficher l’établissement sur une carte, la seconde fois avec son adresse. Sur la page de résultats de Google, la recherche porte sur l’emplacement de l’établissement, puis sur son nom depuis sa propre position. Naver AI Tab est interrogé sur l’emplacement de l’établissement, puis sur son nom.
Pour
KR, les questions sont en coréen, et la seconde question de ChatGPT est Show {name} on a map en anglais, car ChatGPT affiche plus souvent la carte d’un établissement coréen quand on l’interroge en anglais. Sans place.address, un moteur dont la seconde question ajoute l’adresse pose deux fois la première. Sans place.location, la seconde recherche Google ajoute l’adresse hors de KR. via[] dans le résultat montre chaque question telle qu’elle a été envoyée.
Lire le résultat
La recherche Canlis se lit ainsi, réduite aux champs principaux :found vaut false.
engines[]
record
issues
Un numéro que toutes les succursales d’une chaîne affichent, comme un numéro gratuit, n’est pas comparé.
summary et credits
lookup.status vaut PROCESSING jusqu’à la fin de tous les moteurs, puis COMPLETED. Le résultat est évalué à partir des réponses enregistrées à chaque lecture, et une recherche reste lisible 24 heures après la fin de ses tâches.
Renvoyer une recherche
Chaque question est une tâche dont la clé est{lookup id}:{engine}:{ask}, par exemple canlis-2026-10:GEMINI:2. Renvoyez la même requête avec la même idempotencyKey : la recherche renvoie les tâches qu’elle a et envoie les questions qui n’ont pas encore de tâche, comme celles refusées faute de crédits. Le même id avec un autre établissement, pays ou liste de moteurs renvoie 409 RESOURCE_ALREADY_EXISTS et ne crée rien. Pour relancer la recherche plus tard, utilisez une nouvelle idempotencyKey.
Concurrence du plan
Chaque question compte comme une tâche dans la limite de concurrence de votre plan. Une recherche lance les questions pour lesquelles votre plan a de la place, et les autres attendent danstasks[] avec status: "PENDING" :
FAILED avec API_KEY_INACTIVE et coûtent 0. Voir Crédits et limites.
Erreurs et facturation
Une recherche sur les moteurs par défaut du pays coûte 10 crédits. Chaque question paie sa part : 1 crédit pour chacune des 10 questions enKR, et 1,25 pour chacune des 8 ailleurs. Une recherche sur moins de moteurs paie les questions qu’elle envoie. Le prix de chaque question est bloqué à l’envoi et facturé quand elle se termine, et une question en échec coûte 0. Voir Crédits et limites.
Refus à l’envoi
Quand toutes les questions sont refusées, le premier refus est la réponse, avec son propre statut, par exemple
402 INSUFFICIENT_CREDITS ou 403 KEY_SCOPE_DENIED, et rien n’est créé. Quand certaines sont admises, la réponse est 200 et chaque question refusée porte son error dans tasks[] :
Lire une recherche
GET /v1/place-lookup/{id} renvoie 404 RESOURCE_NOT_FOUND pour un id que votre compte n’a pas utilisé, et pour une recherche dont les tâches ont dépassé la fenêtre de 24 heures. Une question en échec affiche status: "FAILED" dans via[] et une error qui commence par son code, par exemple ENGINE_NO_RESULT. Ces codes sont ceux des tâches du moteur, et une question en attente qui se termine avant de démarrer porte API_KEY_INACTIVE ou INSUFFICIENT_CREDITS. Voir Erreurs.
Étapes suivantes
ChatGPT
Les cartes de lieux que ChatGPT affiche, dans
map.Lots et grilles
Posez une même question depuis chaque point d’une grille autour d’un établissement.