Connecter votre site

GF

Équipe HUSSTEER · mis à jour 2026-09-16 · 8 min

La Website API permet à une agence de garder son propre site internet et d'utiliser Hussteer comme source de ses biens et réceptacle de ses prospects. Trois capacités : lire les biens publiables, envoyer un prospect, être prévenu quand une annonce change.

1. Créer une intégration

Dans Hussteer : Réglages → Website API → « Créer une intégration ». Seul un administrateur de l'agence peut le faire. Donnez un nom (celui du site), l'adresse du site, et — si vous voulez des webhooks — l'URL de réception.

Ouvrir Réglages → Website APIC'est là que les identifiants se créent, se révoquent et se régénèrent.

2. Client ID et Client Secret

À la création, Hussteer affiche un Client ID et un Client Secret. Le Client ID identifie l'intégration et peut être conservé en clair. Le Client Secret, lui, ne s'affiche QU'UNE FOIS : Hussteer n'en garde qu'une empreinte et ne peut pas vous le redonner. Si vous le perdez, régénérez-le — l'ancien cesse alors immédiatement de fonctionner.

Le Client Secret ne doit JAMAIS se trouver dans le JavaScript d'une page publique, dans un dépôt Git, ni dans une URL. Il vit sur votre serveur, dans une variable d'environnement. Cette API est faite pour être appelée de serveur à serveur : aucune en-tête CORS n'est servie, un navigateur ne peut donc pas l'appeler directement.

3. Obtenir un jeton d'accès

Échangez vos identifiants contre un jeton valable une heure. C'est le flux OAuth 2.0 « client_credentials » (RFC 6749 §4.4) — et lui seul : il n'existe ni code d'autorisation, ni jeton de rafraîchissement, ni connexion d'un utilisateur tiers.

POST/api/v1/oauth/token

Échange un `client_id` et un `client_secret` contre un jeton d'accès valable **1 heure**. Flux OAuth 2.0 `client_credentials` (RFC 6749 §4.4) — et lui seul : il n'existe ni code d'autorisation, ni jeton de rafraîchissement, ni connexion d'un utilisateur tiers. ⛔ Appel **serveur à serveur** uniquement : le `client_secret` ne doit jamais se trouver dans du JavaScript de navigateur.

Corps de la requête

{
  "grant_type": "client_credentials",
  "client_id": "hus_client_example",
  "client_secret": "hus_secret_example"
}

Réponses

  • 200 — Jeton émis.
  • 400
  • 401 — Identifiants refusés. ⚠️ La réponse est **identique** que le `client_id` soit inconnu, que le secret soit faux ou que l'intégration soit révoquée — pour ne rien apprendre à qui cherche.
  • 429
curl -X POST 'https://hussteer.com/api/v1/oauth/token' \
  -H 'Content-Type: application/json' \
  -d '{
    "grant_type": "client_credentials",
    "client_id": "hus_client_example",
    "client_secret": "hus_secret_example"
  }'
{
  "access_token": "hus_at_example",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "properties:read leads:write"
}

Réutilisez le même jeton pendant sa durée de vie : en redemander un à chaque visiteur épuiserait votre quota. Quand il expire, l'API rend 401 — redemandez-en un et rejouez l'appel.

Portées

  • properties:read — lire les biens publiables de votre agence.
  • leads:write — déposer un prospect.
  • webhooks:manage — réservé : la V1 gère les webhooks depuis l'écran Hussteer.
  • Le paramètre `scope` ne peut que RESTREINDRE : demander une portée non accordée ne l'accorde pas.

Erreurs

Toutes les erreurs ont la même forme. Branchez votre logique sur `error.code` — il est stable ; le message, lui, peut être réécrit.

{ "error": { "code": "invalid_token", "message": "Jeton absent, expiré ou révoqué." } }
  • 400 invalid_request — requête mal formée, ou curseur illisible.
  • 401 invalid_client — identifiants refusés. La réponse est identique que le client soit inconnu, le secret faux ou l'intégration révoquée.
  • 401 invalid_token — jeton absent, expiré ou révoqué.
  • 403 insufficient_scope — l'intégration n'a pas ce droit.
  • 404 not_found — inexistant, d'une autre agence, ou non publiable : indistinctement.
  • 413 payload_too_large — corps de requête au-delà de 16 Ko.
  • 422 unprocessable — données refusées ; `error.fields` dit quel champ.
  • 429 rate_limited — trop de requêtes ; voir `Retry-After`.
  • 503 unavailable — indisponibilité temporaire ; réessayez.

Limite d'appels

Par intégration et par minute : 300 lectures, 30 écritures, 30 demandes de jeton. Ces bornes protègent le service d'un emballement — elles ne sont pas un quota commercial. Chaque réponse porte X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset ; une 429 porte en plus Retry-After.

Sécurité

  • Le jeton détermine l'agence : aucun paramètre de requête ne peut la désigner, et un jeton ne voit jamais les données d'une autre agence.
  • Révoquer une intégration coupe l'accès au prochain appel, sans attendre l'expiration du jeton.
  • Régénérer le secret invalide immédiatement l'ancien et tous les jetons qu'il avait produits.
  • HTTPS uniquement, en entrée comme en sortie.

J'ai perdu mon Client Secret. Comment le récupérer ?

Vous ne pouvez pas, et personne chez Hussteer non plus : la base n'en conserve qu'une empreinte. Régénérez-le depuis Réglages → Website API, puis installez la nouvelle valeur sur votre serveur.

Puis-je appeler l'API depuis le JavaScript de mon site ?

Non. Aucune en-tête CORS n'est servie, et surtout : cela exposerait votre Client Secret à tous vos visiteurs. Appelez l'API depuis votre serveur, et servez le résultat à vos pages.

Combien de sites puis-je connecter ?

Autant que vous voulez. Créez une intégration par site : chacune a ses propres identifiants, et vous pouvez en révoquer une sans toucher aux autres.

Cet article vous a-t-il été utile ?