Aller au contenu principal

Points de terminaison

Chaque endpoint public de l’API Kaleidr fait l’objet de sa propre section.

  • URL de base : https://api.kaleidr.com/inference-api/b2b/v1
  • Identifiant : Authorization: Bearer … ou X-Api-Key: …. Sur le serveur, utilisez une clé serveur (kld_sk_live_…). Dans le navigateur, utilisez un jeton de session (kld_sess_live_…). Une clé publiable est acceptée uniquement lors de l'échange de session. Voir Authentification et autorisations.
  • Corps des requêtes : JSON, UTF-8. Envoyez Content-Type: application/json pour chaque POST. La taille maximale est de 2 MiB, ou de 5 MiB pour les points de terminaison /design/*. Toute requête plus volumineuse reçoit 413 request_too_large.
  • Erreurs : les réponses 4xx ou 5xx contiennent un corps JSON, décrit dans Erreurs. Un point de terminaison signale aussi un échec avec un statut 200 : voir Itinéraires.

Les exemples utilisent une clé serveur stockée dans une variable d’environnement :

export KALEIDR_KEY="kld_sk_live_…"

Récapitulatif​

Point de terminaisonFonctionAutorisationFacturation
POST /sdk/sessionsÉchanger une clé publiable contre une sessionAutorisation du produitUn chargement de carte pour tile ; gratuit sinon
POST /sdk/share-sessionsÉchanger l'ID d'une carte publiée contre une session de discussionaucuneGratuit
POST /chat/control/streamPoser une question et diffuser réponse, lieux, actions et itinérairesaiCrédits IA selon les jetons consommés
POST /chat/control/routeCalculer un itinéraire entre des coordonnées connuesaiGratuit
GET /retrieval/geocode/forwardTransformer un texte saisi en lieux et adressesaiCrédits IA, coût fixe
POST /spotIdentifier un lieu, une adresse, des régions et du contenu facultatif en un pointaiCrédits IA, coût fixe
POST /spot/overview/streamDiffuser une présentation brève d'un élément renvoyé par /spotaiCrédits IA selon les jetons consommés
GET /retrieval/poi/enrichObsolète, utiliser /spot. Détails et photos d'un lieuaiCrédits IA, coût fixe
POST /chat/summary/streamObsolète, utiliser /spot/overview/stream. Diffuser le résumé d'un lieu ou d'un bâtimentaiCrédits IA selon les jetons consommés
POST /chat/button/streamDiffuser la réponse à une question sur un lieuaiCrédits IA selon les jetons consommés
POST /design/analyzeRecommander une conception de carte à partir d'un tableaudesignCrédits IA, coût fixe
POST /design/apply-directCréer une couche cartographique à partir d'un tableau et d'un styledesignGratuit
GET /design/styles, /design/samples, /design/themesCatalogues de conceptiondesignGratuit

Le fonctionnement de la facturation, des réservations et des limites est expliqué dans Quotas et limites de débit.

Tous les endpoints d’exécution peuvent renvoyer les erreurs répertoriées dans Erreurs communes à tous les endpoints d’exécution. Les sections ci-dessous ne présentent que les erreurs propres à chacun.


POST /sdk/sessions​

Échange une clé publiable contre un jeton de session de courte durée, lié à l'origine de l'appel et à un seul produit. Le SDK effectue cet échange pour chaque montage avec clé. N'appelez directement ce point de terminaison que depuis votre propre client de navigateur.

Authentification : clé publiable. Requis : en-tête Origin (ajouté par le navigateur). Coût : un chargement de carte lorsque product vaut tile ; aucun sinon.

ChampTypeObligatoireRemarques
productchaîneOuichat, editor, viewer ou tile.
curl -s https://api.kaleidr.com/inference-api/b2b/v1/sdk/sessions \
-H "X-Api-Key: kld_pk_live_…" \
-H "Origin: https://www.example.com" \
-H "Content-Type: application/json" \
-d '{"product":"chat"}'
{
"session_token": "kld_sess_live_eyJhbGciOi…",
"expires_in": 900,
"product": "chat",
"basemap_style_id": null
}

basemap_style_id est le fond de carte par défaut de votre organisation, ou null si aucun n’est défini.

StatutCodeCirconstance
401Invalid or missing API keyClé inconnue, révoquée ou expirée.
403publishable_key_requiredLa clé est une clé serveur ou héritée.
403origin_requiredEn-tête Origin absent.
403origin_not_allowedL'origine ne figure pas dans les origines autorisées de la clé.
403product_not_allowedLes produits autorisés pour la clé excluent product.
403tier_capability_not_allowedL'offre ne comprend pas le produit ou son autorisation.
403insufficient_scopeLa clé a été créée sans l'autorisation requise par le produit.
422validationproduct est absent ou ne fait pas partie des quatre valeurs possibles.
429rate_limitedTrop d'échanges pour cette clé. Retry-After: 5.
429map_load_quota_exceededtile uniquement : le quota de chargements de carte est épuisé.
404sessions_disabledLes sessions sont désactivées sur la plateforme. Contacter l'assistance.
503sessions_not_configuredDéfaillance de la plateforme. Réessayer puis contacter l'assistance si elle persiste.

La durée de vie, la règle de renouvellement et l’ordre des vérifications figurent dans Authentification et portées : échange de session.

POST /sdk/share-sessions​

Échange l'ID d'une carte publiée contre une session de discussion, afin que ses visiteurs puissent discuter sans clé dans la page. La tuile Kaleidr AI de la carte dans Studio doit activer la fonctionnalité demandée.

Authentification : aucune. Requis : en-tête Origin. Coût : aucun ; les appels de chat associés à cette session sont facturés à l’organisation propriétaire de la carte.

ChampTypeObligatoireRemarques
share_idchaîneOuiDe 1 à 128 caractères : lettres, chiffres, _ et -.
featurechaîneNoncontrol_tower (par défaut), le panneau Ask Kaleidr de la carte, ou popups, le chat IA dans ses popups. Chacune n'est accordée que tant que son interrupteur est activé.
curl -s https://api.kaleidr.com/inference-api/b2b/v1/sdk/share-sessions \
-H "Origin: https://www.example.com" \
-H "Content-Type: application/json" \
-d '{"share_id":"your-map-id","feature":"control_tower"}'
{ "session_token": "kld_sess_live_eyJhbGciOi…", "expires_in": 300, "product": "chat" }
StatutCodeCirconstance
403origin_requiredEn-tête Origin absent.
404not_foundAucune carte publiée ni aucun lien de partage ne possède cet ID, ou la carte du lien de partage est dépubliée.
403chat_disabledLa Kaleidr AI de la carte n'active pas la fonctionnalité demandée.
403origin_not_allowedLa page ne fait pas partie des domaines autorisés.
403owner_has_no_organizationLe propriétaire n'appartient à aucune organisation à facturer.
403tier_capability_not_allowedL'offre du propriétaire ne comprend pas le chat.
422validationshare_id est absent ou contient des caractères non admis, ou feature ne correspond à aucune des deux valeurs.
429rate_limitedTrop d'échanges pour cette carte ou depuis cette adresse. Retry-After: 5.
404sessions_disabledLes sessions sont désactivées sur la plateforme.
503share_grant_unavailable, sessions_not_configuredDéfaillance de la plateforme. Réessayer.

Voir Kaleidr AI sur une carte publiée.


POST /chat/control/stream​

Pose une question et diffuse la réponse au fur et à mesure de sa rédaction, ainsi que les lieux mentionnés avec leurs coordonnées, les actions sur la carte et les itinéraires. Ce point de terminaison alimente Kaleidr Chat.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : ai. Coût : crédits IA correspondant aux tokens utilisés pour la réponse. Réponse : text/event-stream, décrit dans le contrat de flux SSE.

ChampTypeObligatoireValeur par défautRemarques
messagestableau de { role, content }Non[]Historique de la conversation, de la plus ancienne à la plus récente, terminé par le nouveau message de l'utilisateur. role vaut user ou assistant. Les autres rôles, dont system, et les messages dont content est vide sont ignorés. La réponse porte sur le dernier message user. Limites de taille ci-dessous.
session_idchaîneNongénéréIdentifiant de conversation de 1 à 128 caractères : lettres, chiffres, _, ., : et -. Fournissez un ID stable et répétez-le à chaque tour. Si vous l'omettez, le serveur en crée un pour la requête et le renvoie dans les événements phase et start.
locationobjet { lat, lng }NonaucuneEndroit consulté par l'utilisateur : centre de la carte. Sert à interpréter « près d'ici ».
map_zoomnombreNonaucuneNiveau de zoom de la carte.
langchaîneNon"en"Langue de la réponse au format BCP 47, par exemple fr ou pt-BR. Au maximum 35 caractères.
layoutchaîneNonaucunLa mise en page du viewer dans laquelle se déroule la conversation : "guide" tant que le viewer intégré affiche sa mise en page guide ; omettez-le sinon. Au maximum 16 caractères.
app_snapshotobjetNonaucunAccepté, mais inutile ; omettez-le.
auto_actionsbooléenNonaucunAccepté, mais inutile ; omettez-le.

Les champs inconnus sont acceptés puis ignorés. Aucun champ ne permet de transmettre des instructions système, une personnalité, des outils ou votre propre contexte : la requête porte uniquement sur la conversation, un emplacement et une langue.

Le serveur ne conserve pas la transcription à votre place. Envoyez à chaque fois les tours précédents dans messages, avec le même session_id.

Un session_id est propre à votre organisation. Le contexte de conversation à court terme est isolé par organisation : une autre organisation utilisant le même ID ne peut ni voir ni modifier votre conversation. Dans votre organisation, attribuez un ID distinct à la conversation de chaque utilisateur final.

Limites des requêtes​

Une demande dépassant l’une de ces limites est refusée avec 422 avant toute réponse et n’est pas facturée. Le corps est {"detail": "<code>"}.

LimiteValeurCode
Nombre de messages dans messages400too_many_messages
Longueur du content d'un message64 000 caractèresmessage_too_long
Longueur cumulée de tous les content200 000 caractèresconversation_too_long
session_idDe 1 à 128 caractères : lettres, chiffres, _, ., :, -invalid_session_id
lang35 caractèreslang_too_long
layout16 caractèresinvalid_layout

Tous les messages sont comptabilisés, même ceux qui sont ignorés. Une longue conversation atteint généralement la limite de longueur totale avant celle du nombre de messages. Conservez les tours récents nécessaires et supprimez les plus anciens : voir Lecture du flux.

curl -N https://api.kaleidr.com/inference-api/b2b/v1/chat/control/stream \
-H "Authorization: Bearer $KALEIDR_KEY" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{
"session_id": "trip-42",
"messages": [{"role": "user", "content": "Where is the Louvre, and what is next to it?"}],
"location": {"lat": 48.8566, "lng": 2.3522},
"map_zoom": 12,
"lang": "en"
}'

-N désactive la mise en mémoire tampon de curl, afin d’afficher les trames dès leur arrivée. Exemple de réponse abrégée :

event: phase
data: {"type": "phase", "phase": "thinking", "session_id": "trip-42"}

: keep-alive

event: start
data: {"type": "start", "session_id": "trip-42", "purpose": "control"}

data: {"text": "The [[Louvre Museum]] is on the right bank of the Seine"}

event: place
data: {"name": "Louvre Museum", "coordinates": {"lat": 48.8606, "lng": 2.3376}, "category": "museum"}

data: {"text": ", with the [[Tuileries Garden]] directly to its west."}

event: place
data: {"name": "Tuileries Garden", "coordinates": {"lat": 48.8635, "lng": 2.3275}, "category": "park"}

event: early_actions
data: {"type": "early_actions", "actions": [{"type": "map.fitBounds", "payload": {"coordinates": [[2.3376, 48.8606], [2.3275, 48.8635]], "padding": 50, "maxZoom": 15, "duration": 1000}}], "places_count": 2, "is_partial": true}

event: end
data: {"type": "end", "full_text": "The [[Louvre Museum]] is on the right bank of the Seine, with the [[Tuileries Garden]] directly to its west.", "places": [{"name": "Louvre Museum", "coordinates": {"lat": 48.8606, "lng": 2.3376}, "category": "museum"}, {"name": "Tuileries Garden", "coordinates": {"lat": 48.8635, "lng": 2.3275}, "category": "park"}], "actions": [], "question_type": "…", "response_time": 6.4, "total_tokens": 3120}

event: quota
data: {"type": "quota", "product": "b2b", "meter": "b2b.tokens", "tier": "pro", "used": 184223, "limit": 5000000, "reset_at": "2026-11-01T04:00:00+00:00", "period": "month"}
StatutCodeCirconstance
413request_too_largeLe corps dépasse 2 MiB.
422validationLe corps n'est pas un JSON valide ou un champ possède un type incorrect.
422too_many_messages, message_too_long, conversation_too_long, invalid_session_id, lang_too_long, invalid_layoutLa requête dépasse une limite.
429quota_exceededLa réserve de crédits IA ou le plafond mensuel de la clé ne suffit pas.

L'événement quota de l'exemple correspond à ce que reçoit une clé serveur. Avec un jeton de session, le flux transmet une version plus courte : voir l'événement quota.

Après le démarrage du flux, les échecs sont envoyés sous forme d’événement error et non de code de statut. Pour créer un client, consultez Lecture du flux.

POST /chat/control/route​

Calcule un itinéraire entre des coordonnées déjà connues. Aucune question n’est posée et aucun texte n’est généré.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : ai. Coût : aucun. Il faut toutefois disposer d’une marge suffisante dans les crédits IA pour que l’appel soit accepté.

ChampTypeObligatoireValeur par défautRemarques
placestableau d'objetsOui, au moins deux[]Chaque objet est { lat, lng, name? } avec lat et lng numériques directement à la racine de l'objet. label peut remplacer name. Une entrée dont lat ou lng ne sont pas numériques est ignorée sans erreur.
profilechaîneNon"driving"driving, walking, cycling ou transit. Toute autre valeur utilise driving.
raw_querychaîneNon"Show directions"Les mots saisis par l'utilisateur, s'ils existent.

Le premier lieu est le point de départ, le dernier est la destination.

La structure d'un lieu diffère de celle du flux

Un événement place du flux de discussion imbrique la position : { "coordinates": { "lat": …, "lng": … } }. Ce point de terminaison attend lat et lng directement à la racine de l'objet. Transmettre un lieu du flux sans modification produit une réponse error, car aucune entrée ne possède de coordonnées exploitables.

curl -s https://api.kaleidr.com/inference-api/b2b/v1/chat/control/route \
-H "Authorization: Bearer $KALEIDR_KEY" \
-H "Content-Type: application/json" \
-d '{
"places": [
{"name": "Louvre Museum", "lat": 48.8606, "lng": 2.3376},
{"name": "Tuileries Garden", "lat": 48.8635, "lng": 2.3275}
],
"profile": "walking"
}'

Une réponse réussie est un 200 contenant action (valeurs données à titre d’exemple) :

{
"action": {
"type": "map.showRoute",
"payload": {
"id": "control-directions",
"label": "Directions",
"profile": "walking",
"coordinates": [[2.3376, 48.8606], [2.3352, 48.8619], [2.3275, 48.8635]],
"distance_m": 870,
"duration_s": 640,
"turn_by_turn": [{ "text": "Walk west on Rue de Rivoli." }],
"attribution": {
"text": "© OpenStreetMap contributors",
"url": "https://www.openstreetmap.org/copyright",
"license": "https://opendatacommons.org/licenses/odbl/"
}
}
},
"route": { "…": "the full planning result the action was built from" }
}

Tracez action.payload.coordinates, une liste de paires [lng, lat]. distance_m est exprimé en mètres et duration_s en secondes. Affichez attribution.text, avec un lien vers attribution.url, partout où vous tracez l'itinéraire.

Avec profile: "transit", payload.transit représente un trajet sans correspondance : marche, un transport, puis marche. Le niveau supérieur ne contient pas attribution ; le crédit de l'exploitant est dans payload.transit.attribution. Présentez-le avec le trajet.

Ce point de terminaison signale les échecs avec HTTP 200​

Une route impossible à calculer n’est pas une erreur 4xx. La réponse est 200 avec une chaîne error et sans action :

{ "error": "Route planning failed." }

Cela arrive lorsque le planificateur ne peut pas relier les lieux ou échoue pour toute autre raison. Si moins de deux lieux possèdent des coordonnées utilisables, le texte est At least two resolved places are required to build a route.. Comme ce texte peut être affiché tel quel, vérifiez la présence de error plutôt que sa formulation. Un trajet sans ligne de transport directe renvoie la même forme, avec une explication et trois champs supplémentaires : reason, covered et available.

Testez le corps de la réponse, pas le statut :

const res = await fetch(`${API}/chat/control/route`, { method: 'POST', headers, body });
if (!res.ok) throw new Error(`route request refused: ${res.status}`); // 401, 403, 422, 429
const data = await res.json();
if (data.error) {
showMessage(data.error); // a 200 that is a failure
} else {
drawLine(data.action.payload.coordinates);
}

Les erreurs d’authentification, de portée, de validation, de quota et de débit restent des réponses HTTP ordinaires 401, 403, 422 et 429.

GET /retrieval/geocode/forward​

Convertit du texte saisi en lieux et adresses correspondants. Conçu pour une zone de recherche ou des champs Départ/Arrivée.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : ai. Coût : crédits IA, forfait par appel, même lorsque results est vide.

ParamètreTypeObligatoireValeur par défautRemarques
qchaîneOuiDe 1 à 200 caractères : nom de lieu, adresse avec numéro de rue ou coordonnées lat,lng saisies.
near_latnombreNonDe −90 à 90. Favorise les correspondances proches ; uniquement avec near_lng.
near_lngnombreNonDe −180 à 180. Uniquement avec near_lat.
limitentierNon5De 1 à 20.
modechaîneNonMode de déplacement (driving, walking, cycling, transit). Un trajet court favorise les lieux proches.
curl -s -G https://api.kaleidr.com/inference-api/b2b/v1/retrieval/geocode/forward \
-H "Authorization: Bearer $KALEIDR_KEY" \
--data-urlencode "q=20 W 34th St, New York" \
--data-urlencode "limit=3"
{
"query": "20 W 34th St, New York",
"results": [
{
"lat": 40.7484,
"lng": -73.9857,
"display_name": "20 W 34th St, New York, NY 10001",
"type": "address",
"source": "…",
"id": "…",
"confidence": "exact",
"attribution": {
"dataset": "us/ny/city_of_new_york",
"license": "…",
"attribution": "Address data from the NYC Department of City Planning."
}
}
],
"attribution": {
"text": "Overture Maps Foundation, overturemaps.org",
"licenses": [
"https://cdla.dev/permissive-2-0/",
"https://www.apache.org/licenses/LICENSE-2.0",
"https://opensource.foursquare.com/places-notice-txt/",
"https://docs.overturemaps.org/attribution/"
],
"sources": [
{
"dataset": "us/ny/city_of_new_york",
"license": "…",
"attribution": "Address data from the NYC Department of City Planning."
}
]
}
}

Chaque résultat comprend lat, lng, display_name, type et source. Les autres champs sont présents selon les cas :

Champ du résultatSignification
idPour une adresse : identifiant Kaleidr de cette porte, stable entre les mises à jour des données, que vous pouvez conserver et comparer.
confidenceComment le résultat correspond au texte (tableau suivant). Absent pour des coordonnées lat,lng saisies.
approximate, method, matched_numbers, within_m, scoreSeulement pour une adresse estimée (ci-dessous).
attributionConditions du jeu de données d'origine : dataset, license et, selon le cas, license_url, attribution (crédit à afficher) et use_restriction.
confidenceLe résultat correspond à
exactLe numéro demandé, dans la rue et la localité demandées.
fuzzyMême adresse avec une faute dans le nom de la rue.
name_exactUn lieu dont le nom correspond exactement au texte.
localityVille, région ou quartier nommé dans la requête.
interpolated, nearestUne estimation d'un numéro absent des données.
partialUne rue dont le nom complet commence par le texte saisi.
name_partialUn lieu dont le nom partage certains mots saisis.
ambiguousUne adresse sans localité indiquée ni repère proche : l'une de plusieurs possibilités.

Adresses estimées. Lorsque le numéro saisi n'existe pas dans les données, la réponse le place dans la rue : entre les numéros connus les plus proches du même côté, au numéro connu le plus proche ou le long de l'îlot auquel appartient la plage de numérotation. Le résultat contient approximate: true ainsi que :

ChampSignification
method"interpolated" (entre deux numéros connus), "nearest" (au numéro connu proche) ou "range" (le long de l'îlot).
matched_numbersNuméros ayant servi à placer l'adresse.
within_mDistance entre ces numéros, ou longueur de l'îlot, en mètres : erreur maximale si les numéros progressent dans l'ordre. Absent pour "nearest".
scoreConfiance de 0 à 1. Une valeur faible indique une localisation au niveau de la rue, pas de la porte exacte.

Une correspondance exacte ne comporte jamais ces champs.

Attribution. Transmettez le champ attribution de premier niveau avec les résultats. Son text correspond au crédit à afficher, et licenses contient les conditions qui doivent accompagner les données. Lorsque des adresses sont présentes, attribution.sources énumère les jeux de données utilisés. Pour ces résultats, respectez la use_restriction propre à chacun :

Jeu de donnéesCrédit à afficherRestriction d'utilisation
au/countrywide (G-NAF)G-NAF © Geoscape Australia, concédé sous licence par le Commonwealth d'Australie selon l'Open Geo-coded National Address File (G-NAF) End User Licence Agreement.Ne pas générer une adresse ou une liste d'adresses destinées à l'envoi postal sans vérifier, pour chaque adresse, sa capacité à recevoir du courrier auprès d'une source autre que G-NAF ; l'usage doit être conforme aux Australian Privacy Principles.
ca/countrywide (Statistics Canada)Adapté de Statistics Canada, National Address Register, 2025-07-29. Cela ne constitue pas une approbation du produit par Statistique Canada.Ne pas identifier une personne, une entreprise ou une organisation, ni laisser penser qu'elle approuve le produit.
us/ny/city_of_new_yorkDonnées d'adresses du NYC Department of City Planning.Aucune.
us/ma/statewide (MassGIS)MassGIS (Bureau of Geographic Information), Commonwealth of Massachusetts EOTSSAucune (domaine public).

Aucun résultat et échec interne ont la même apparence. Une requête sans correspondance renvoie 200 avec "results": []. Une recherche qui échoue en interne peut produire la même réponse ; dans ce cas, elle n'est pas facturée. Interprétez un tableau vide comme « rien à afficher », pas comme une erreur.

StatutCodeCirconstance
422validationq est absent, vide ou dépasse 200 caractères ; limit ou une coordonnée est hors limites.
429quota_exceededLes crédits IA disponibles ne couvrent pas l'appel.

POST /spot​

Indique ce qui se trouve à un point donné : le lieu sélectionné, l'adresse la plus proche et les régions qui contiennent le point. Chaque valeur précise le crédit à afficher. Sur demande, le résultat inclut aussi une description et des photos du lieu.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : ai. Coût : crédits IA, forfait par appel selon l’élément le plus coûteux demandé dans want, même si aucun résultat n’est trouvé. content ou photos coûtent le tarif de /retrieval/poi/enrich lorsque le contenu est récupéré pour cet appel ; sinon, address coûte le tarif de /retrieval/geocode/forward. Le contenu déjà récupéré pour une requête précédente ne coûte rien ; un tel appel qui demande aussi address est donc facturé au tarif du géocodage. Un appel ne demandant que entities, regions, boundaries ou tenants est gratuit. Par défaut, want inclut address ; l’omission de want entraîne donc la facturation du géocodage.

ChampTypeObligatoireValeur par défautRemarques
latnombreOuiDe −90 à 90. Le point.
lngnombreOuiDe −180 à 180.
zoomnombreNonDe 0 à 24. Niveau de zoom de la carte.
hintobjetNonÉlément sélectionné par l'utilisateur (ci-dessous).
wanttableau de chaînesNon["entities", "address", "regions"]Parties à renvoyer (ci-dessous).
langchaîneNon"en"Langue de content, au maximum 16 caractères.

Le point détermine la réponse ; l'indication ne fait que sélectionner. Une indication sert à choisir parmi ce qui se trouve à ce point ; elle ne déplace jamais le résultat. Un lieu à plus de 75 mètres de lat, lng n'est pas renvoyé, quelle que soit l'indication.

Champ hintRemarques
idIdentifiant Kaleidr du lieu : la partie d'une référence poi: située après les deux-points.
nameNom du lieu tel qu'il apparaît sur l'étiquette de la carte. 200 caractères maximum. Il doit correspondre exactement à l'un des lieux situés au point indiqué et sert à désigner le lieu pour content. Si region_level vaut county, state ou country, il sélectionne également la région de ce niveau dont le nom correspond, sans tenir compte de la casse ni des accents, parmi les régions présentes au point (pour un État ou un pays, également celles situées à 5 km au maximum de ce point). Si aucun nom ne correspond, rien ne change.
categoryCatégorie du lieu. 100 caractères maximum. Utilisée pour content.
region_levelAvec boundaries, renvoie uniquement le contour de la région à ce niveau (city, county, state ou country) ; sans cette option, les contours de toutes les régions. Avec name, la région de ce niveau dans regions comme dans boundaries est celle sélectionnée par le nom.
layer, wiki_title, ta_location_id, yelp_business_id, data_sourceChamps acceptés. Utilisés par les propres applications de Kaleidr ; omettez-les.
Valeur de wantAjoute
entitiesLe lieu sur lequel l'utilisateur a cliqué, si hint désigne un lieu situé à ce point.
addressL'adresse de voirie la plus proche.
regionsLa ville et le comté (aux États-Unis uniquement), l'État et le pays contenant le point. Pour un point situé en mer, à 5 km au maximum de la côte, l'État et le pays les plus proches sont renvoyés.
boundariesregions, chacune avec son contour (un seul niveau lorsque hint.region_level est spécifié).
contentLe contenu descriptif du lieu : un résumé, des photos et un lien. Nécessite un nom de lieu, issu du lieu sélectionné ou de hint.name.
photosUniquement les photos du lieu. Le coût est identique à celui de content.
tenantsLes lieux nommés proches du point, du plus proche au plus éloigné : les établissements d'un bâtiment. Votre application conserve ceux qui se trouvent à l'intérieur de l'emprise au sol du bâtiment affichée.
curl -s https://api.kaleidr.com/inference-api/b2b/v1/spot \
-H "Authorization: Bearer $KALEIDR_KEY" \
-H "Content-Type: application/json" \
-d '{
"lat": 40.7484,
"lng": -73.9857,
"zoom": 17,
"hint": {"name": "Empire State Building", "category": "landmark"},
"want": ["entities", "address", "regions"]
}'

Réponse abrégée avec des valeurs illustratives :

{
"spot": { "lat": 40.7484, "lng": -73.9857, "zoom": 17 },
"entities": [
{
"ref": "poi:3f1c2a9e-…",
"kind": "poi",
"role": "clicked",
"name": { "value": "Empire State Building", "license": "CDLA-Permissive-2.0", "attr": "a1" },
"at": { "lat": 40.74844, "lng": -73.98566 },
"facts": {
"category": { "value": "landmark_and_historical_building", "license": "CDLA-Permissive-2.0", "attr": "a1" },
"website": { "value": "https://www.esbnyc.com", "license": "CDLA-Permissive-2.0", "attr": "a1" }
}
}
],
"address": {
"ref": "address:ka1…",
"line": { "value": "20 W 34th St, New York, NY 10001", "license": "CDLA-Permissive-2.0", "attr": "a2" },
"at": { "lat": 40.7484, "lng": -73.9857 }
},
"regions": [
{
"ref": "region:tiger:3651000",
"kind": "region",
"level": "city",
"name": { "value": "New York", "license": "LicenseRef-Public-Domain", "attr": "a3" },
"label": { "lat": 40.6976, "lng": -73.9795 }
},
{
"ref": "region:tiger:36",
"kind": "region",
"level": "state",
"name": { "value": "New York", "license": "LicenseRef-Public-Domain", "attr": "a3" },
"label": { "lat": 42.7559, "lng": -75.8099 }
}
],
"attributions": {
"a1": { "text": "© Overture Maps Foundation", "license": "CDLA-Permissive-2.0" },
"a2": { "text": "Address data from the NYC Department of City Planning.", "license": "CDLA-Permissive-2.0" },
"a3": { "text": "U.S. Census Bureau, TIGER/Line", "license": "LicenseRef-Public-Domain" }
},
"withheld": ["building_facts"]
}
ChampSignification
spotPoint transmis : { lat, lng, zoom }.
entitiesLieu sélectionné, puis occupants du bâtiment si demandés, ou tableau vide. Chaque élément possède ref, kind ("poi" pour le lieu sélectionné, "tenant" pour un occupant), role ("clicked" ou "inside"), name, at (position du lieu { lat, lng }) et facts (category, ainsi que website du lieu sélectionné si connu). La ref d'un occupant est une référence poi:, permettant aussi de diffuser sa présentation. Ignorez les types kind inconnus.
addressAdresse la plus proche ou null : { ref, line, at }.
regionsRégions contenant le point, de la plus petite à la plus grande. Chacune comporte ref, kind ("region"), level (city, county, state ou country), name et label, point de placement du nom { lat, lng } ou null. Avec want: ["boundaries"], elles comprennent aussi geometry, leur contour en géométrie GeoJSON.
contentPrésent si want contient content ou photos, si le nom du lieu est connu et si le contenu peut être restitué. C'est l'objet fourni par /retrieval/poi/enrich (champs) ou, pour photos seulement, { photos, source, cached }, avec license et attr ajoutés. Peut être null lorsqu'aucun contenu n'est accessible.
attributionsCrédits de la réponse : { text, license }, indexés par le attr des valeurs.
withheldInformations non restituées en raison des restrictions de l'API, classées par type ; tableau vide si rien n'a été omis.

Une ref identifie un objet pour /spot/overview/stream : poi:<id> pour un lieu, address:<id> pour une adresse, region:<source>:<id> pour une région (<source> vaut tiger, nuts ou ne). Les applications Kaleidr utilisent aussi building:<id>, que l'API ne renvoie pas. Traitez les références comme des chaînes opaques.

Afficher l’attribution de chaque valeur​

Chaque valeur issue d'un jeu de données est un objet { value, license, attr } : donnée, licence et clé dans attributions. Chaque fois que vous affichez une valeur, affichez aussi attributions[attr].text, à proximité ou dans une rubrique de crédits accessible. Une même réponse peut combiner plusieurs sources : une attribution unique pour toute la réponse ne suffit pas. Conservez license et le crédit avec la valeur lorsque vous la stockez ou la transmettez.

content est attribué de la même manière, via son propre attr. Une valeur portant live_only: true ne peut être montrée qu'à l'utilisateur actuel ; elle ne peut jamais être stockée ni transmise.

Consultez Licences des données pour connaître les obligations de chaque licence.

Données non renvoyées par l’API​

Les applications Kaleidr affichent davantage d’informations sur un point que l’API, certaines données n’étant pas autorisées sur d’autres sites :

  • Valeurs soumises à l'ODbL, dérivées d'OpenStreetMap : caractéristiques des bâtiments (étages, hauteur, catégorie). Les présentations de bâtiments ne sont pas disponibles non plus.
  • Résultats de prestataires tiers : recherches d'adresses dans les services de géocodage, et notes, avis et photos de Yelp et Tripadvisor.

withheld permet de distinguer « aucune donnée connue ici » de « non disponible via l'API ». Il ne nomme que des catégories, jamais des valeurs : building_facts si le point est dans un bâtiment, ou content si le seul contenu connu pour le lieu ne peut pas être renvoyé. D'autres entrées désignent de la même manière les autres parties exclues.

Erreurs de POST /spot :

StatutCodeCirconstance
413request_too_largeLe corps dépasse 2 MiB.
422validationlat ou lng est absent ou hors limites, zoom est hors de 0 à 24, want contient une valeur inconnue ou un champ est trop long ou mal formé.
429quota_exceededLes crédits IA disponibles ne couvrent pas l'appel.

Un élément introuvable est renvoyé vide (null ou []). L’appel reste facturé.

POST /spot/overview/stream​

Diffuse une courte présentation écrite d’un élément renvoyé par /spot, identifié par son ref.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : ai. Coût : crédits IA selon les tokens utilisés. Chaque présentation est rédigée pour sa demande. Réponse : text/event-stream : en général une trame place portant le nom complet du lieu, par exemple "Springfield, Ohio, United States of America", puis les trames d’un résumé de lieu ; voir Flux de résumés et de boutons.

ChampTypeObligatoireValeur par défautRemarques
refchaîneOuiUne ref issue de /spot, au plus 128 caractères, ou place: (ci-dessous).
lat, lngnombreOuiPoint précédemment transmis à /spot.
langchaîneNon"en"Langue de la présentation, au plus 16 caractères.
hintobjetPour place: uniquement{ name, category? } : nom à décrire.
refPrésentation
poi:<id>Le lieu.
region:<source>:<id>La région.
place:Un nom sans fiche correspondante chez Kaleidr, par exemple un lieu pour lequel /spot n'a renvoyé aucune entité. Envoyez son nom dans hint.name.
address:<id>, building:<id>Non disponible via l'API : le flux envoie une trame error. Voir Ce que l'API ne renvoie pas.

L'objet est de nouveau recherché aux coordonnées lat, lng ; aucun élément de la requête n'est considéré comme un fait établi à son sujet. Une référence poi: à plus de 75 mètres du point, une référence region: ne contenant pas le point ou place: sans hint.name reçoit aussi une trame error.

curl -N https://api.kaleidr.com/inference-api/b2b/v1/spot/overview/stream \
-H "Authorization: Bearer $KALEIDR_KEY" \
-H "Content-Type: application/json" \
-d '{"ref": "poi:3f1c2a9e-…", "lat": 40.7484, "lng": -73.9857, "lang": "en"}'

Une référence impossible à décrire renvoie cette trame au lieu d’un résumé. Elle contient ref, mais pas partial_text :

event: error
data: {"type": "error", "message": "Nothing to describe here.", "ref": "address:ka1…"}
StatutCodeCirconstance
413request_too_largeLe corps dépasse 2 MiB.
422validationref ne correspond pas aux formats précédents, lat ou lng est absent ou hors limites, ou lang dépasse 16 caractères.
429quota_exceededLes crédits IA disponibles ne couvrent pas l'appel.

Migration depuis les points de terminaison obsolètes​

GET /retrieval/poi/enrich et POST /chat/summary/stream sont obsolètes. Ils continuent de répondre de la même manière jusqu'au 2027-01-15 et pourront être supprimés à tout moment après cette date. Leurs en-têtes de réponse signalent cette situation ; Deprecation indique la date de dépréciation, 2026-10-16, sous forme d'horodatage Unix :

Deprecation: @1792108800
Sunset: Fri, 15 Jan 2027 00:00:00 GMT
Link: </inference-api/b2b/v1/spot>; rel="successor-version"

L’en-tête Link de /chat/summary/stream désigne /inference-api/b2b/v1/spot/overview/stream. Journalisez l’en-tête Sunset afin d’identifier les appels encore utilisés.

De GET /retrieval/poi/enrich vers POST /spot :

AvantAprès
lat, lon (requête)lat, lng (corps). Attention au nom du champ.
name, categoryhint.name, hint.category
langlang, au plus 16 caractères
Recherche complètewant: ["content"]
photos_only=truewant: ["photos"]
radius, dataSource, ta_location_id, regionLevelÀ omettre.
Corps de la réponsecontent : le même objet, plus live_only
attributioncontent.attribution

Le coût est le même ou inférieur : /spot ne facture pas le contenu déjà récupéré pour une requête précédente. Une recherche est facturée selon l’élément le plus coûteux de want ; lorsque le contenu est récupéré pour l’appel, ajouter entities, address ou regions permet donc de les obtenir sans frais supplémentaires lors du même appel.

De POST /chat/summary/stream vers POST /spot/overview/stream :

AvantAprès
Un lieu : location, building_properties.name, .categoryAppeler /spot avec le point et hint: { name, category }, puis diffuser la présentation de la ref du lieu figurant dans entities, avec les mêmes lat et lng. Si entities est vide, envoyer ref: "place:" avec le même hint.
building_properties.pidref: "poi:<id>"
langlang, au plus 16 caractères
max_tokensÀ omettre.
Un bâtiment : type: "building" et ses champsAucun successeur. La présentation d'un bâtiment est indisponible via l'API.
Les tramesCelles d'une présentation de lieu, précédées d'une nouvelle trame place qui nomme le lieu.

GET /retrieval/poi/enrich​

Obsolète

Ce point de terminaison est obsolète et peut être supprimé après le 2027-01-15. Utilisez POST /spot avec want: ["content"]. Voir Migration des anciens points de terminaison.

Renvoie du contenu descriptif sur un lieu : titre, résumé, photos et lien.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : ai. Coût : crédits IA, forfait par appel. Le coût est facturé même si aucun contenu n’est trouvé.

ParamètreTypeObligatoireValeur par défautRemarques
latnombreOuiLatitude du lieu.
lonnombreOuiLongitude du lieu. Attention au nom lon, et non lng.
namechaîneNonNom du lieu. Recommandé : un point seul ne donne souvent aucun résultat.
categorychaîneNonCatégorie du lieu issue d'un événement place.
radiusentierNon250Rayon de recherche en mètres autour du point.
langchaîneNon"en"Langue du contenu.
photos_onlybooléenNonfalseRenvoyer uniquement les photos (réponse plus courte, ci-dessous).
dataSource, ta_location_id, regionLevelchaîneNonAcceptés, mais destinés aux applications Kaleidr ; omettez-les.
curl -s -G https://api.kaleidr.com/inference-api/b2b/v1/retrieval/poi/enrich \
-H "Authorization: Bearer $KALEIDR_KEY" \
--data-urlencode "lat=48.8606" \
--data-urlencode "lon=2.3376" \
--data-urlencode "name=Louvre Museum" \
--data-urlencode "category=museum"
{
"source": "wikipedia",
"found": true,
"title": "Louvre",
"photos": ["https://upload.wikimedia.org/…/Louvre_Museum.jpg"],
"summary": "The Louvre is a national art museum in Paris, France…",
"rating": null,
"phone": null,
"hours": null,
"reviews": [],
"url": "https://en.wikipedia.org/wiki/Louvre",
"attribution": ["Wikipedia"]
}
ChampTypeSignification
sourcechaîneOrigine du contenu. "omitted" signifie que du contenu existe mais ne peut pas être transmis via l'API (ci-dessous).
foundbooléenfalse si rien n'est trouvé. Les autres champs sont alors vides.
titlechaîneTitre du lieu dans la source.
summarychaîne ou nullBrève description.
photostableau d'URLPeut être vide.
urlchaîne ou nullLien vers la page source.
attributiontableau de chaînesSources à créditer, par exemple ["Wikipedia"]. À afficher avec le contenu.
rating, phone, hours, reviewsPeuvent être null ou vides. L'API ne renvoie jamais les notes et avis de fournisseurs sous licence.
unverifiedbooléenFacultatif ; true si la correspondance avec le lieu est incertaine.

Avec photos_only=true, la réponse est { "photos": […], "source": "…", "cached": false }.

Contenu non restitué. Certains contenus sont sous licence exclusive pour les applications Kaleidr. Si c'est le seul contenu disponible pour un lieu, la réponse est 200 avec "source": "omitted", "found": false et aucun contenu. L'appel est néanmoins facturé. Voir Licences des données.

StatutCodeCirconstance
422validationlat ou lon est absent ou n'est pas un nombre.
429quota_exceededLes crédits IA disponibles ne couvrent pas l'appel.
500An internal error occurred. Please try again.La recherche a échoué. L'appel reste facturé.

POST /chat/summary/stream​

Obsolète

Ce point de terminaison est obsolète et peut être supprimé après le 2027-01-15. Utilisez POST /spot/overview/stream. Aucun point de terminaison ne remplace les résumés de bâtiments. Voir Migration des anciens points de terminaison.

Diffuse un bref résumé écrit d’un lieu ou d’un bâtiment. Ce contenu alimente la fiche de lieu de Kaleidr Chat.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : ai. Coût : crédits IA selon les tokens utilisés. Chaque résumé est rédigé pour sa demande. Réponse : text/event-stream. Voir Flux de résumés et de boutons.

Le champ type du corps sélectionne le type de résumé.

Un bâtiment ("type": "building") :

ChampTypeObligatoireRemarques
typechaîneOui"building".
addresschaîneOuiAdresse complète du bâtiment, au plus 500 caractères.
lat, lngnombreNonCoordonnées du bâtiment.
building_levelsentierNonNombre d'étages, si connu.
building_height_mnombreNonHauteur du bâtiment en mètres, si connue.
tenant_namestableau de chaînesNonEntreprises dans le bâtiment : au plus 100 noms de 200 caractères chacun.
poi_countentierNonNombre de lieux dans le bâtiment.
langchaîneNonValeur par défaut "en", jusqu'à 35 caractères.
curl -N https://api.kaleidr.com/inference-api/b2b/v1/chat/summary/stream \
-H "Authorization: Bearer $KALEIDR_KEY" \
-H "Content-Type: application/json" \
-d '{"type": "building", "address": "20 W 34th St, New York, NY 10001", "lat": 40.7484, "lng": -73.9857}'
event: start
data: {"type": "start", "address": "20 W 34th St, New York, NY 10001"}

data: {"text": "A landmark office tower in Midtown Manhattan"}

event: end
data: {"type": "end", "full_text": "A landmark office tower in Midtown Manhattan…", "parsed": {"…": "…"}, "total_tokens": 910}

event: quota
data: {"type": "quota", "product": "b2b", "meter": "b2b.tokens", "tier": "pro", "used": 185133, "limit": 5000000, "reset_at": "2026-11-01T04:00:00+00:00", "period": "month"}

Un lieu (type absent ou "poi"). Le corps accepte location (objet { lat, lng }), building_properties (objet), lang et max_tokens (entier). Cette forme est conçue pour le panneau interne de Kaleidr et la signification précise des champs n'est pas encore un contrat publié. Préférez /chat/control/stream pour interroger un lieu depuis votre propre code.

Champ du lieuLimite
building_properties.name, .type, .category, .poi_type200 caractères chacun
building_properties.pid128 caractères
Chaque champ textuel de building_properties.event4 000 caractères
lang35 caractères
max_tokensUne valeur supérieure au plafond par défaut est ramenée à ce plafond. Vous ne pouvez pas demander un résumé plus long.

Les deux variantes ne lisent que les champs répertoriés ici. Tout autre champ du corps est ignoré. Un champ dépassant sa limite de longueur est refusé avec 422 field_too_long, avant toute production de résumé.

StatutCodeCirconstance
413request_too_largeLe corps dépasse 2 MiB.
422field_too_longUn champ dépasse sa limite ou tenant_names contient plus de 100 entrées. Le corps est {"detail": "field_too_long"}.
500Summary stream errorImpossible de lire le corps, ou une requête sur un bâtiment ne contient pas address. Pour tout autre corps incorrect, ce point de terminaison renvoie 500 au lieu de 422.
429quota_exceededLes crédits IA disponibles ne couvrent pas l'appel.

POST /chat/button/stream​

Diffuse la réponse à une seule question sur un lieu, par exemple « Quels sont les horaires d'ouverture ? ». Il alimente les boutons de questions de la fiche de lieu de Kaleidr Chat. Il ne conserve pas de conversation : chaque appel est indépendant.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : ai. Coût : crédits IA correspondant aux tokens utilisés. Réponse : text/event-stream. Voir Flux de résumés et de boutons.

ChampTypeObligatoireValeur par défautRemarques
querychaîneOuiQuestion, au plus 4 000 caractères.
place_namechaîneNonNom du lieu concerné, au plus 200 caractères.
place_typechaîneNonSa catégorie, au plus 200 caractères.
addresschaîneNonAdresse du lieu, au plus 500 caractères.
locationobjet { lat, lng }NonSa position.
langchaîneNon"en"Langue de réponse, au plus 35 caractères.
descriptionchaîneNonDescription du lieu dont vous disposez déjà, au plus 4 000 caractères.
websitechaîneNonSite Web du lieu, si connu, au plus 2 048 caractères.
stores_previewtableau d'objets { name }NonEntreprises présentes au lieu et déjà connues. Au plus 50 entrées, avec 200 caractères maximum pour chaque name. Les autres membres sont ignorés.
button_id, session_id, place_idchaîneNonIdentifiants de corrélation personnalisés, au plus 128 caractères chacun.

Les champs absents de ce tableau sont ignorés. Si un champ dépasse sa limite de longueur, la demande est refusée avec 422 field_too_long avant toute réponse.

curl -N https://api.kaleidr.com/inference-api/b2b/v1/chat/button/stream \
-H "Authorization: Bearer $KALEIDR_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "What is this place known for?",
"place_name": "Louvre Museum",
"place_type": "museum",
"location": {"lat": 48.8606, "lng": 2.3376}
}'
event: start
data: {"type": "start", "query_type": "…"}

data: {"text": "The Louvre is best known for"}

event: end
data: {"type": "end", "full_text": "The Louvre is best known for…", "reply": "The Louvre is best known for…", "query_type": "…", "first_token_ms": 820, "total_ms": 3900, "total_tokens": 640}
StatutCodeCirconstance
413request_too_largeLe corps dépasse 2 MiB.
422field_too_longUn champ est trop long ou stores_preview comporte plus de 50 entrées. Le corps est {"detail": "field_too_long"}.
500Button chat stream errorLe corps n'est pas lisible ou query est absent. Pour tout autre corps incorrect, ce point de terminaison renvoie 500 plutôt que 422.
429quota_exceededLes crédits IA disponibles ne couvrent pas l'appel.

POST /design/analyze​

Examine les colonnes et un échantillon du tableau, puis recommande une représentation cartographique.

L’éditeur intégré n’appelle pas les endpoints de conception : ils constituent une interface REST pour vos propres outils.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : design. Coût : crédits IA, forfait par appel réussi. Un appel ayant échoué n’est pas facturé.

ChampTypeObligatoireRemarques
columnstableau de chaînesOuiDe 1 à 256 noms de colonnes, tous distincts.
sampleRowstableau d'objetsNonJusqu'à 1 000 lignes, chaque objet portant les noms de colonnes comme clés.
datasetNamechaîneNonAu plus 512 caractères.
rowCountentierNonNombre total de lignes du tableau, au moins 0.
userGoalchaîneNonAu plus 1 000 caractères : ce que la carte doit montrer.
supportedStylestableau de chaînesNonIdentifiants de style parmi lesquels choisir, formés de mots minuscules reliés par des tirets.

Les noms de champs utilisent camelCase. Les champs inconnus sont ignorés.

curl -s https://api.kaleidr.com/inference-api/b2b/v1/design/analyze \
-H "Authorization: Bearer $KALEIDR_KEY" \
-H "Content-Type: application/json" \
-d '{
"datasetName": "stores.csv",
"columns": ["name", "lat", "lng", "revenue"],
"sampleRows": [
{"name": "Downtown", "lat": 40.7128, "lng": -74.0060, "revenue": 120000},
{"name": "Uptown", "lat": 40.7831, "lng": -73.9712, "revenue": 86000}
],
"rowCount": 240,
"userGoal": "Show which stores earn the most"
}'
{
"datasetProfile": { "…": "what was detected in each column" },
"designPlan": { "…": "the recommended style, theme and reasoning" },
"issues": [],
"recommendation": { "…": "…" },
"suggestedConfig": { "…": "…" },
"explanation": "…"
}

Consultez designPlan ; sa valeur peut être null. recommendation, suggestedConfig et explanation sont d'anciens champs conservés pour compatibilité, destinés à être supprimés : ne vous appuyez pas dessus. issues énumère les problèmes détectés dans les données.

StatutCodeCirconstance
413request_too_largeLe corps dépasse 5 MiB. Même limite pour /design/apply-direct.
422validationcolumns est absent, vide, trop long ou contient des doublons ; ou une limite précédente est dépassée.
429quota_exceededLes crédits IA disponibles ne couvrent pas l'appel.
500map_design_analyze_failedL'analyse a échoué. Aucun frais.

POST /design/apply-direct​

Construit une couche cartographique à partir d’un tableau et d’un style choisi, sans analyse.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : design. Coût : aucun.

ChampTypeObligatoireRemarques
stylechaîneOuiID de style de 1 à 64 caractères. Les ID sont répertoriés dans /design/styles.
configobjetOuiObjet avec location, metric et visual. location.mode ("coordinates" ou "region") et visual.layerName sont obligatoires ; les autres sous-champs ne sont pas encore documentés.
tableobjetOui{ fileName?, columns[], rows[] }. Chaque ligne associe des noms de colonnes à des valeurs. Chaque valeur doit être une chaîne JSON : envoyez "120000", pas 120000. Une ligne contenant un nombre ou null est refusée avec 422.
layerLabelchaîneOuiNom affiché de la couche, de 1 à 512 caractères.
themePackIdchaîneNonID de thème fourni par /design/themes. Les ID inconnus sont ignorés.
datasetSourceobjetNon{ label, url? } : organisme ayant publié les données, pour le crédit de la couche.
datasetIdchaîneNonJusqu'à 128 caractères, utilisé comme ID de couche.
yearentierNonDe 1800 à 2100.

La réponse contient toujours un champ status :

{ "status": "applied", "message": null, "spec": { "…": "a partial map specification" } }
statusSignification
appliedspec contient la couche.
unsupported-styleCe style ne peut pas être créé à partir de ces données. message explique pourquoi.
insufficient-dataLe tableau ne possède pas les données requises, par exemple les colonnes de position. message précise lesquelles.

Les trois réponses portent le statut 200. Vérifiez status.

GET /design/styles, /design/samples, /design/themes​

Trois catalogues en lecture seule : styles de carte disponibles, exemples de cartes et ensembles de thèmes.

Authentification : clé serveur, jeton de session ou clé ancienne. Portée : design. Coût : aucun. Ces appels comptent dans le nombre de requêtes par minute de la clé, mais pas dans la limite de concurrence.

curl -s https://api.kaleidr.com/inference-api/b2b/v1/design/styles \
-H "Authorization: Bearer $KALEIDR_KEY"

Chaque réponse enveloppe sa liste dans une clé unique :

{ "styles": [ { "…": "…" } ] }

/design/samples renvoie { "samples": [ … ] } et /design/themes renvoie { "themes": [ … ] }.


Erreurs communes à tous les points de terminaison d’exécution​

Tous les endpoints, sauf les deux échanges de session, peuvent renvoyer ces erreurs avant leur traitement propre. Elles sont vérifiées dans l’ordre suivant.

OrdreStatutCodeCirconstance
1401Invalid or missing API keyAucune clé, ou clé inconnue, révoquée ou expirée.
2401publishable_requires_sessionUne clé publiable a été envoyée directement. Échangez-la d'abord contre une session.
2403server_key_in_browserClé serveur envoyée avec un en-tête Origin.
2403session_origin_mismatchJeton de session utilisé depuis une autre origine.
2403ip_not_allowedClé serveur ou héritée avec une liste d'IP autorisées, appelée depuis une adresse absente de cette liste.
3403insufficient_scopeLa clé ne dispose pas de l'autorisation requise par le point de terminaison.
3403tier_capability_not_allowedLa clé a l'autorisation, mais l'offre actuelle ne l'inclut plus.
3403product_not_allowedUne clé serveur ou héritée limitée à certains produits appelle un point de terminaison d'un autre produit. Voir Restreindre une clé.
4429quota_exceededPoints de terminaison facturés uniquement : le solde de crédits ou le plafond de la clé ne suffit pas.
5429visitor_limit_reachedSessions de cartes publiées uniquement : le visiteur a effectué trop de demandes.
6429rate_limitedLimite de requêtes par minute de la clé atteinte.
7429b2b_overloaded, org_overloadedTrop d'appels simultanés.

Un corps de requête trop volumineux est refusé avec 413 request_too_large : 2 MiB sur tous les points de terminaison, 5 MiB sur /design/*. Lorsque la longueur du corps est déclarée, ce refus intervient avant les contrôles énumérés ci-dessus.

Les corps des réponses et leur traitement sont détaillés dans Erreurs et Quotas et limites de débit.

Voir aussi​