API REST Ts-Immo

Référence complète de l'API REST Ts-Immo — tous les endpoints, paramètres, corps de requête et exemples basés sur la spécification OpenAPI.

URL de base

https://api.ts-immo.org/v1

Authentification

Chaque appel API doit inclure votre clé API dans l'en-tête HTTP X-TS-IMMO-KEY.

X-TS-IMMO-KEY: <your-api-key>
Content-Type: application/json
Ne partagez jamais votre clé API. Utilisez des variables d'environnement et des secrets côté serveur uniquement.

Points de terminaison

Estates (Biens immobiliers)

Gestion des biens immobiliers : recherche, consultation, assignation d'URL publique, soumission de leads et relance de synchronisation.

GET/v1/estatesRecherche de biens avec filtres
GET/v1/estates/{id}Détail d'un bien
PUT/v1/estates/{id}/urlAssigner l'URL publique
PUT/v1/estates/{id}/leadSoumettre un lead acheteur
POST/v1/estates/{id}/replayRelancer la synchro d'un bien

GET/v1/estates

Retourne une liste paginée de biens immobiliers. Tous les paramètres de filtrage sont optionnels et combinables.

ParamTypeReq.Description
querystringRecherche texte libre
typestringType de bien (apartment, house, land…)
sub_typestringSous-type du bien (studio, penthouse, villa…)
offer_typestringType d'offre (sale, rental, auction…)
statusstringStatut du bien (available, sold, rented…)
min_pricenumberPrix minimum
max_pricenumberPrix maximum
min_surfacenumberSurface minimum (m²)
max_surfacenumberSurface maximum (m²)
bedroomsintegerNombre de chambres
bathroomsintegerNombre de salles de bain
citystringVille
postal_codestringCode postal
countrystringPays (code ISO)
regionstringRégion
featuredbooleanBiens mis en avant uniquement
is_projectbooleanProgrammes neufs uniquement
pageintegerNuméro de page (défaut : 1, min : 1)
limitintegerNombre de résultats par page (défaut : 50, max : 100)
orderbystringChamp de tri (défaut : created_at)
orderstringOrdre de tri : ASC | DESC (défaut : DESC)
curl -X GET "https://api.ts-immo.org/v1/estates?page=1&limit=20&city=Paris&offer_type=sale&min_price=100000" \
  -H "X-TS-IMMO-KEY: your-api-key"

Exemple de réponse :

{
  "data": [
    {
      "id": "uuid",
      "reference": "REF-001",
      "type": "apartment",
      "sub_type": "penthouse",
      "offer_type": "sale",
      "status": "available",
      "bedrooms": 3,
      "bathrooms": 2,
      "location": {
        "city": "Paris",
        "postal_code": "75008",
        "country": "FR",
        "geo": { "latitude": 48.8566, "longitude": 2.3522 }
      },
      "financial": {
        "transaction": {
          "price": { "amount": 450000, "currency": "EUR" }
        }
      },
      "images": [...],
      "amenities": ["parking", "terrace", "elevator"],
      "created_at": "2025-01-15T10:30:00Z"
    }
  ],
  "total": 142,
  "page": 1,
  "limit": 20
}

GET/v1/estates/{id}

Retourne le détail complet d'un bien par son identifiant UUID.

ParamTypeReq.Description
idstring*Identifiant Ts-Immo du bien — pas le slug (path)
curl -X GET "https://api.ts-immo.org/v1/estates/550e8400-e29b-41d4-a716-446655440000" \
  -H "X-TS-IMMO-KEY: your-api-key"

PUT/v1/estates/{id}/url

Assigne l'URL publique d'un bien sur votre site web. Permet à Ts-Immo de connaître l'adresse de la page de détail du bien.

ParamTypeReq.Description
idstring*Identifiant Ts-Immo du bien — pas le slug (path)

Corps de la requête

{
  "url": "https://www.your-agency.com/property/apartment-t3-paris"
}
curl -X PUT "https://api.ts-immo.org/v1/estates/ESTATE_ID/url" \
  -H "X-TS-IMMO-KEY: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://www.your-agency.com/property/apartment-t3-paris" }'

PUT/v1/estates/{id}/lead

Soumet les informations d'un prospect/acheteur intéressé par ce bien. Crée ou met à jour le contact dans le CRM.

ParamTypeReq.Description
idstring*Identifiant Ts-Immo du bien — pas le slug (path)

Corps de la requête

{
  "streamId": "stream-uuid",
  "civility": "MR",
  "firstname": "Jean",
  "lastname": "Dupont",
  "type": "PERSON",
  "mail": "jean.dupont@example.com",
  "phones": [
    { "number": "+33612345678", "type": "mobile" }
  ],
  "message": "I am interested in this property.",
  "lang": "fr",
  "preferences": [
    {
      "offerType": "sale",
      "budget": {
        "currency": "EUR",
        "min_price": { "amount": 200000 },
        "max_price": { "amount": 500000 }
      }
    }
  ]
}
Seul le champ streamId est obligatoire. Tous les autres champs sont optionnels et permettent d'enrichir le profil de l'acheteur.

Champs du lead (TsImmoBuyer) :

ParamTypeReq.Description
streamIdstring*Identifiant unique du flux (obligatoire)
civilityenumMR | MS
firstnamestringPrénom du contact
lastnamestringNom de famille du contact
typeenumPERSON | COMPANY
companyNamestringNom de la société (si type = COMPANY)
mailstringAdresse email principale
secondaryMailstringAdresse email secondaire
phonesTsImmoPhone[]Liste des numéros de téléphone
messagestringMessage du prospect
internalNotestringNote interne (non visible par le prospect)
langenumfr | en
locationTsImmoLocationLocalisation du contact
preferencesPreferences[]Préférences de recherche (budget, localisation, type de bien…)

POST/v1/estates/{id}/replay

Relance la synchronisation d'un bien spécifique. Utile pour forcer la mise à jour après une modification dans le CRM.

ParamTypeReq.Description
idstring*Identifiant Ts-Immo du bien — pas le slug (path)
curl -X POST "https://api.ts-immo.org/v1/estates/ESTATE_ID/replay" \
  -H "X-TS-IMMO-KEY: your-api-key"

Support (Tickets)

Gestion des tickets de support : création, consultation, commentaires et clôture.

GET/v1/support/?domain=...Lister les tickets support
POST/v1/support/Créer un ticket support
GET/v1/support/{id}?domain=...Consulter un ticket
GET/v1/support/{id}/commentAjouter un commentaire
POST/v1/support/support/{id}/close?domain=...Clôturer un ticket

GET/v1/support/

Retourne tous les tickets de support associés à votre domaine.

ParamTypeReq.Description
domainstring*Nom de domaine du site
curl -X GET "https://api.ts-immo.org/v1/support/?domain=www.your-site.com" \
  -H "X-TS-IMMO-KEY: your-api-key"

POST/v1/support/

Crée un nouveau ticket de support avec un sujet, un message et les informations du rapporteur.

Corps de la requête

{
  "domain": "www.your-site.com",
  "subject": "Sync issue on property REF-001",
  "message": "The property is not appearing on the website after sync.",
  "reporter": {
    "username": "admin",
    "mail": "admin@your-site.com",
    "display_name": "Site Admin"
  },
  "attachments": [
    {
      "filename": "screenshot.png",
      "mime_type": "image/png",
      "content_base64": "iVBORw0KGgo..."
    }
  ]
}
ParamTypeReq.Description
domainstring*Nom de domaine du site
subjectstring*Sujet du ticket
messagestring*Description du problème
reporterSupportReporter*Informations du rapporteur (username, mail, display_name)
attachmentsSupportAttachment[]Pièces jointes en base64 (filename, mime_type, content_base64)

Statuts possibles d'un ticket :

IN_PROGRESS | WAITING_FOR_SUPPORT | PENDING | DONE | CLOSED

GET/v1/support/{id}/comment

Ajoute un commentaire à un ticket de support existant.

ParamTypeReq.Description
idstring*Identifiant UUID du ticket
commentSupportComment*Commentaire à ajouter (comment, reporter)

POST/v1/support/support/{id}/close

Clôture un ticket de support existant.

ParamTypeReq.Description
idstring*Identifiant UUID du ticket
domainstring*Nom de domaine du site

Sites

Activation, désactivation et relance de synchronisation des sites connectés.

POST/v1/sites/activateActiver un site
POST/v1/sites/deactivateDésactiver un site
POST/v1/sites/replayRelancer la synchro globale

POST/v1/sites/activate

Active un site en l'associant à votre compte Ts-Immo via la clé d'authentification du plugin.

Corps de la requête

{
  "domain": "www.your-site.com",
  "plugin_auth_key": "your-plugin-auth-key",
  "theme_id": "theme-uuid"
}
ParamTypeReq.Description
domainstring*Nom de domaine du site à activer
plugin_auth_keystring*Clé d'authentification du plugin
theme_idstringIdentifiant du thème (optionnel)

Exemple de réponse :

{
  "success": true,
  "plan": "professional",
  "expires_at": "2026-12-31",
  "max_properties": 500,
  "error_message": null
}

POST/v1/sites/deactivate

Désactive un site et arrête la synchronisation des biens.

Corps de la requête

{
  "domain": "www.your-site.com"
}

POST/v1/sites/replay

Relance une synchronisation globale de tous les biens vers tous les sites actifs.

curl -X POST "https://api.ts-immo.org/v1/sites/replay" \
  -H "X-TS-IMMO-KEY: your-api-key"

Plugins

Liste et téléchargement des plugins disponibles pour votre domaine.

GET/v1/plugins/plugins?domain=...Lister les plugins disponibles
GET/v1/plugins/plugins/{pluginId}/download?domain=...Télécharger un plugin

GET/v1/plugins/plugins

Retourne la liste des plugins disponibles pour votre domaine avec leurs métadonnées.

ParamTypeReq.Description
domainstring*Nom de domaine du site

Exemple de réponse :

[
  {
    "id": "plugin-uuid",
    "name": "ts-immo-sync",
    "description": "WordPress synchronization plugin",
    "version": "2.1.0",
    "shortcodes": ["ts_immo_listings", "ts_immo_property", "ts_immo_search", "ts_immo_map"],
    "signature": "sha256:abc123...",
    "file_url": "https://api.ts-immo.org/v1/plugins/plugins/plugin-uuid/download"
  }
]

GET/v1/plugins/plugins/{pluginId}/download

Télécharge le fichier d'un plugin spécifique. Retourne le contenu binaire du plugin.

ParamTypeReq.Description
pluginIdstring*Identifiant UUID du plugin
domainstring*Nom de domaine du site
curl -X GET "https://api.ts-immo.org/v1/plugins/plugins/PLUGIN_ID/download?domain=www.your-site.com" \
  -H "X-TS-IMMO-KEY: your-api-key" \
  -o plugin.zip

Codes d'erreur

En cas d'échec, l'API retourne une erreur JSON structurée avec un code HTTP et un message descriptif.

{
  "statusCode": 400,
  "message": ["One or more fields are invalid"],
  "error": "Bad Request"
}
ParamTypeReq.Description
200Succès
400Requête invalide — paramètres manquants ou incorrects
401Non authentifié — clé API manquante ou invalide
403Accès interdit — permissions insuffisantes
404Ressource non trouvée
429Trop de requêtes — rate limit dépassé
500Erreur serveur interne
La limite est de 100 requêtes/minute par clé API. Surveillez les en-têtes X-RateLimit-Remaining et X-RateLimit-Reset pour lisser votre charge et éviter les erreurs 429.