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/v1Authentification
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/jsonPoints de terminaison
Estates (Biens immobiliers)
Gestion des biens immobiliers : recherche, consultation, assignation d'URL publique, soumission de leads et relance de synchronisation.
/v1/estatesRecherche de biens avec filtres/v1/estates/{id}Détail d'un bien/v1/estates/{id}/urlAssigner l'URL publique/v1/estates/{id}/leadSoumettre un lead acheteur/v1/estates/{id}/replayRelancer la synchro d'un bienGET/v1/estates
Retourne une liste paginée de biens immobiliers. Tous les paramètres de filtrage sont optionnels et combinables.
| Param | Type | Req. | Description |
|---|---|---|---|
query | string | — | Recherche texte libre |
type | string | — | Type de bien (apartment, house, land…) |
sub_type | string | — | Sous-type du bien (studio, penthouse, villa…) |
offer_type | string | — | Type d'offre (sale, rental, auction…) |
status | string | — | Statut du bien (available, sold, rented…) |
min_price | number | — | Prix minimum |
max_price | number | — | Prix maximum |
min_surface | number | — | Surface minimum (m²) |
max_surface | number | — | Surface maximum (m²) |
bedrooms | integer | — | Nombre de chambres |
bathrooms | integer | — | Nombre de salles de bain |
city | string | — | Ville |
postal_code | string | — | Code postal |
country | string | — | Pays (code ISO) |
region | string | — | Région |
featured | boolean | — | Biens mis en avant uniquement |
is_project | boolean | — | Programmes neufs uniquement |
page | integer | — | Numéro de page (défaut : 1, min : 1) |
limit | integer | — | Nombre de résultats par page (défaut : 50, max : 100) |
orderby | string | — | Champ de tri (défaut : created_at) |
order | string | — | Ordre 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.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | 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.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | 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.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | 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 }
}
}
]
}Champs du lead (TsImmoBuyer) :
| Param | Type | Req. | Description |
|---|---|---|---|
streamId | string | * | Identifiant unique du flux (obligatoire) |
civility | enum | — | MR | MS |
firstname | string | — | Prénom du contact |
lastname | string | — | Nom de famille du contact |
type | enum | — | PERSON | COMPANY |
companyName | string | — | Nom de la société (si type = COMPANY) |
mail | string | — | Adresse email principale |
secondaryMail | string | — | Adresse email secondaire |
phones | TsImmoPhone[] | — | Liste des numéros de téléphone |
message | string | — | Message du prospect |
internalNote | string | — | Note interne (non visible par le prospect) |
lang | enum | — | fr | en |
location | TsImmoLocation | — | Localisation du contact |
preferences | Preferences[] | — | 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.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | 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.
/v1/support/?domain=...Lister les tickets support/v1/support/Créer un ticket support/v1/support/{id}?domain=...Consulter un ticket/v1/support/{id}/commentAjouter un commentaire/v1/support/support/{id}/close?domain=...Clôturer un ticketGET/v1/support/
Retourne tous les tickets de support associés à votre domaine.
| Param | Type | Req. | Description |
|---|---|---|---|
domain | string | * | 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..."
}
]
}| Param | Type | Req. | Description |
|---|---|---|---|
domain | string | * | Nom de domaine du site |
subject | string | * | Sujet du ticket |
message | string | * | Description du problème |
reporter | SupportReporter | * | Informations du rapporteur (username, mail, display_name) |
attachments | SupportAttachment[] | — | Pièces jointes en base64 (filename, mime_type, content_base64) |
Statuts possibles d'un ticket :
IN_PROGRESS | WAITING_FOR_SUPPORT | PENDING | DONE | CLOSEDGET/v1/support/{id}/comment
Ajoute un commentaire à un ticket de support existant.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | Identifiant UUID du ticket |
comment | SupportComment | * | Commentaire à ajouter (comment, reporter) |
POST/v1/support/support/{id}/close
Clôture un ticket de support existant.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | Identifiant UUID du ticket |
domain | string | * | Nom de domaine du site |
Sites
Activation, désactivation et relance de synchronisation des sites connectés.
/v1/sites/activateActiver un site/v1/sites/deactivateDésactiver un site/v1/sites/replayRelancer la synchro globalePOST/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"
}| Param | Type | Req. | Description |
|---|---|---|---|
domain | string | * | Nom de domaine du site à activer |
plugin_auth_key | string | * | Clé d'authentification du plugin |
theme_id | string | — | Identifiant 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.
/v1/plugins/plugins?domain=...Lister les plugins disponibles/v1/plugins/plugins/{pluginId}/download?domain=...Télécharger un pluginGET/v1/plugins/plugins
Retourne la liste des plugins disponibles pour votre domaine avec leurs métadonnées.
| Param | Type | Req. | Description |
|---|---|---|---|
domain | string | * | 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.
| Param | Type | Req. | Description |
|---|---|---|---|
pluginId | string | * | Identifiant UUID du plugin |
domain | string | * | 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.zipCodes 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"
}| Param | Type | Req. | Description |
|---|---|---|---|
200 | — | Succès | |
400 | — | Requête invalide — paramètres manquants ou incorrects | |
401 | — | Non authentifié — clé API manquante ou invalide | |
403 | — | Accès interdit — permissions insuffisantes | |
404 | — | Ressource non trouvée | |
429 | — | Trop de requêtes — rate limit dépassé | |
500 | — | Erreur serveur interne |