API d'ingestion d'annonces
Synchronisez automatiquement les annonces de votre logiciel immobilier (Apimo, Hektor, ou tout autre CRM) avec Tchabita. Idéal pour les agences qui gèrent plusieurs centaines d'annonces.
🔑 Authentification
Chaque agence reçoit un token API à la création (transmis par votre interlocuteur Tchabita).
Ce token doit être envoyé dans le header HTTP Authorization: Bearer <token>.
📡 Endpoint
Headers requis : Authorization, Content-Type: application/json
📦 Format du body
JSON avec un tableau listings (max 500 par requête, paginer si vous avez plus).
{
"listings": [
{
"externalId": "REF-12345",
"title": "Maison de ville rénovée",
"transaction": "VENTE",
"type": "MAISON",
"price": 395000,
"surface": 112,
"rooms": 5,
"bedrooms": 3,
"floor": null,
"city": "Pontoise",
"postcode": "95300",
"neighborhood": "Centre-ville",
"addressLine": "12 rue de la Paix",
"dpe": "C",
"description": "Charmante maison de 112 m² avec jardin...",
"features": ["jardin", "garage", "cheminée"],
"imageUrls": [
"https://votre-cdn.com/photos/abc.jpg",
"https://votre-cdn.com/photos/def.jpg"
],
"status": "active",
"sourceCrm": "apimo",
"createdAtExternal": "2026-04-15T10:30:00Z",
"updatedAtExternal": "2026-05-31T18:00:00Z"
}
]
} city, le postcode et le neighborhood sont affichés publiquement, mais l'addressLine (numéro + rue) reste strictement privé et n'est visible qu'à votre agence et à l'agent. Pas de risque de fuite côté annonces publiques.
description sont automatiquement masquées par [contact via Tchabita]. Cela garde vos prospects dans la messagerie Tchabita et protège vos données commerciales. Les mentions légales obligatoires (loi Hoguet, carte T, SIRET, DPE) passent intactes.
📑 Champs détaillés
externalId string ID unique dans votre CRM. Sert d'idempotence (envoyer la même externalId = update). title string Titre de l'annonce. Max 100 caractères recommandé. transaction enum VENTE | LOCATION | VIAGER type enum APPARTEMENT | MAISON | DUPLEX | STUDIO | TERRAIN | PARKING | LOFT | LOCAL | BUREAU price number Prix en euros (entier). Pour location = loyer mensuel. charges number? Charges mensuelles (location). Optionnel. surface number Surface en m² (entier). rooms number Nombre de pièces total. bedrooms number? Nombre de chambres. Par défaut = rooms. floor number? Étage. Null pour rez-de-chaussée ou maison. city string Ville (ex: Pontoise) — AFFICHÉE PUBLIQUEMENT. postcode string Code postal (ex: 95300) — AFFICHÉ PUBLIQUEMENT. neighborhood string? Quartier (ex: Notre-Dame) — AFFICHÉ PUBLIQUEMENT à côté de la ville. addressLine string? 🔐 Adresse complète (n°+rue). PRIVÉE — visible uniquement par votre agence et l'agent, jamais en public. dpe enum? A | B | C | D | E | F | G — ou null si non communiqué. description string? Description longue. Les coordonnées (tél/email/URL/concurrents) sont auto-masquées par Tchabita pour garder vos prospects dans la messagerie. features string[]? Tags : jardin, garage, balcon, ascenseur, etc. imageUrls string[]? URLs des photos (Tchabita ne re-héberge pas, sert directement vos URLs). status enum? active | sold | rented | under_offer | withdrawn. Défaut: active. sourceCrm enum? apimo | hektor | pericles | netty | other. Identifie votre logiciel source. shareWithTchabita bool? INIT seulement — diffusion sur tchabita.com. Par défaut = défaut agence. Géré ensuite depuis le back-office Tchabita. shareWithVisio bool? INIT seulement — relais vers VisioHabitat. Par défaut = défaut agence. Géré ensuite depuis le back-office Tchabita. createdAtExternal string? Timestamp ISO 8601 de création côté votre CRM. Optionnel mais recommandé pour le tri. updatedAtExternal string? Timestamp ISO 8601 de dernière modif côté votre CRM. ✅ Réponse
{
"agencyId": "ag_abc123",
"processed": 24,
"created": 5,
"updated": 19,
"errors": [
{ "externalId": "REF-789", "reason": "price must be a positive number" }
]
} 💡 Exemple curl
curl -X POST https://europe-west1-tchabita-prod.cloudfunctions.net/ingestListings \
-H "Authorization: Bearer VOTRE_TOKEN_ICI" \
-H "Content-Type: application/json" \
-d '{
"listings": [
{
"externalId": "REF-12345",
"title": "T3 lumineux centre-ville",
"transaction": "LOCATION",
"type": "APPARTEMENT",
"price": 1200,
"surface": 68,
"rooms": 3,
"city": "Pontoise",
"postcode": "95300",
"dpe": "B"
}
]
}' 🔄 Recommandations d'intégration
- Synchroniser chaque nuit via cron : push de toutes vos annonces actives. Les disparues seront marquées obsolètes (V2.5).
- Conserver le même externalId entre deux exports pour éviter de créer des doublons.
- Si une annonce est vendue/louée côté CRM, vous pouvez la supprimer côté Tchabita via DELETE (V2.5) ou simplement arrêter de l'envoyer.
- Pour les images, fournissez des URLs publiques HTTPS. Tchabita ne re-héberge pas (gain bande passante / RGPD).
- Pagination : si vous avez 1000+ annonces, faites plusieurs POST de 500 max.
📋 Lister vos annonces
Renvoie la liste de vos annonces actuellement sur Tchabita avec leur externalId — utile pour la réconciliation entre votre CRM et Tchabita.
Paginé : utilisez afterTs pour récupérer la page suivante.
🗑️ Supprimer une annonce
Quand un bien est vendu/loué et n'est plus actif côté CRM, vous pouvez le retirer immédiatement de Tchabita. La sécurité est assurée : seules les annonces appartenant à votre agence peuvent être supprimées via votre token.
GET sur la même URL renvoie les détails de l'annonce (utile pour vérifier avant suppression).
🤝 Support intégration
Votre CRM utilise un format différent (XML Apimo, Hektor flux, propriétaire) ? Notre équipe peut développer un connecteur dédié. Contactez-nous : contact@tchabita.com
