API REST pour les professionnels de l'immobilier
https://doctimmo.fr/api/v1Toutes les requêtes doivent inclure un en-tête Authorization avec votre clé API :
Authorization: Bearer dk_pro_votre_cle_ici
Les clés API sont créées depuis votre tableau de bord professionnel, section "API".
Chaque clé a des scopes (permissions) qui limitent les endpoints accessibles. Le scope * donne accès à tout.
Chaque clé API a une limite de requêtes par minute (configurable, 60/min par défaut, max 300/min).
Les headers de réponse indiquent l'état de votre quota :
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 45 X-RateLimit-Reset: 1712000000
En cas de dépassement, vous recevrez un 429 Too Many Requests avec un header Retry-After.
Les endpoints qui retournent des listes sont paginés :
GET /api/v1/properties?page=2&per_page=50
{
"data": [...],
"meta": {
"pagination": {
"page": 2,
"per_page": 50,
"total": 150,
"total_pages": 3,
"has_next": true,
"has_prev": true
}
}
}Les erreurs suivent un format standard :
{
"error": {
"message": "Description de l'erreur",
"status": 404
}
}/api/v1/meprofile:readRécupère le profil de l'utilisateur authentifié, son profil professionnel et les informations de la clé API.
Exemple de réponse
{
"data": {
"uuid": "abc-123",
"email": "pro@example.com",
"user_type": "agent_immo",
"first_name": "Jean",
"last_name": "Dupont",
"professional_profile": {
"company_name": "Agence Dupont",
"siret": "12345678901234",
...
},
"api_key": {
"uuid": "key-uuid",
"scopes": ["*"],
"rate_limit": 60
}
}
}/api/v1/propertiesproperties:readListe les biens auxquels le professionnel a accès.
Query Parameters
page(number)— Page (défaut: 1)per_page(number)— Résultats par page (défaut: 20, max: 100)city(string)— Filtrer par villepostal_code(string)— Filtrer par code postalproperty_type(string)— Filtrer par type (maison, appartement, etc.)/api/v1/propertiesproperties:writeCréer un nouveau bien.
Body (JSON)
address_street(string)— Adresse (requis)city(string)— Ville (requis)postal_code(string)— Code postal (requis)property_type(string)— Type de biensurface_m2(number)— Surface en m²rooms_count(number)— Nombre de piècesusage_type(string)— Usage (residence_principale, locatif, etc.)/api/v1/properties/:uuidproperties:readDétail d'un bien.
Paramètres URL
uuid(string)— UUID du bien/api/v1/properties/:uuidproperties:writeMettre à jour un bien (propriétaire/créateur uniquement).
Paramètres URL
uuid(string)— UUID du bienBody (JSON)
address_street(string)— Adressecity(string)— Villepostal_code(string)— Code postalsurface_m2(number)— Surface en m²property_type(string)— Type de bien/api/v1/properties/:uuidproperties:writeSupprimer un bien (soft delete).
Paramètres URL
uuid(string)— UUID du bien/api/v1/properties/:uuid/documentsdocuments:readListe les documents d'un bien.
Paramètres URL
uuid(string)— UUID du bienQuery Parameters
category(string)— Filtrer par catégoriepage(number)— Pageper_page(number)— Résultats par page/api/v1/properties/:uuid/diagnosticsdiagnostics:readListe les diagnostics d'un bien.
Paramètres URL
uuid(string)— UUID du bienQuery Parameters
type(string)— Filtrer par type (dpe, amiante, plomb, etc.)page(number)— Page/api/v1/properties/:uuid/diagnosticsdiagnostics:writeCréer un diagnostic sur un bien.
Paramètres URL
uuid(string)— UUID du bienBody (JSON)
diagnostic_type(string)— Type (dpe, amiante, plomb, etc.) (requis)diagnostic_date(string)— Date YYYY-MM-DD (requis)expiry_date(string)— Date d'expirationscore(string)— Score (A-G pour DPE)diagnostician_name(string)— Nom du diagnostiqueur/api/v1/properties/:uuid/accessesaccesses:readListe les accès accordés sur un bien (propriétaire ou créateur uniquement).
Paramètres URL
uuid(string)— UUID du bien/api/v1/properties/:uuid/accessesaccesses:writeAccorder un accès à un utilisateur sur un bien.
Paramètres URL
uuid(string)— UUID du bienBody (JSON)
user_email(string)— Email de l'utilisateur (requis)access_type(string)— Type d'accès/api/v1/properties/:uuid/accessesaccesses:writeRévoquer un accès.
Paramètres URL
uuid(string)— UUID du bienBody (JSON)
user_email(string)— Email de l'utilisateur (requis)/api/v1/leadsleads:readartisanagent_immoListe les leads. Pour les artisans: leads qui leur sont assignés. Pour les agents: leads sur leurs biens.
Query Parameters
status(string)— Filtrer par statut (new, contacted, quote_sent, accepted, in_progress, completed)work_type(string)— Filtrer par type de travaux/api/v1/leads/:idleads:readartisanagent_immoDétail d'un lead.
Paramètres URL
id(string)— UUID du lead/api/v1/leads/:idleads:writeartisanagent_immoMettre à jour le statut ou les notes d'un lead.
Body (JSON)
status(string)— Nouveau statutartisan_notes(string)— Notes de l'artisan/api/v1/leads/:id/quotesquotes:readartisanListe les devis d'un lead.
/api/v1/leads/:id/quotesquotes:writeartisanCréer un devis pour un lead.
Body (JSON)
amount(number)— Montant (requis)description(string)— Descriptionvalid_until(string)— Date d'expiration YYYY-MM-DD/api/v1/leads/:id/invoicesinvoices:readartisanListe les factures d'un lead.
/api/v1/leads/:id/invoicesinvoices:writeartisanCréer une facture pour un lead.
Body (JSON)
amount(number)— Montant (requis)invoice_number(string)— Numéro de factureinvoice_date(string)— Date YYYY-MM-DD/api/v1/buildingsbuildings:readsyndicListe les immeubles gérés par le syndic.
/api/v1/buildingsbuildings:writesyndicCréer un immeuble.
Body (JSON)
name(string)— Nom (requis)address(string)— Adresse (requis)city(string)— Ville (requis)postal_code(string)— Code postal (requis)total_lots(number)— Nombre total de lotsconstruction_year(number)— Année de construction/api/v1/buildings/:idbuildings:readsyndicDétail d'un immeuble.
Paramètres URL
id(string)— ID de l'immeuble/api/v1/buildings/:idbuildings:writesyndicMettre à jour un immeuble.
Paramètres URL
id(string)— ID de l'immeuble/api/v1/buildings/:idbuildings:writesyndicSupprimer un immeuble (soft delete).
Paramètres URL
id(string)— ID de l'immeuble/api/v1/buildings/:id/lotslots:readsyndicListe les lots d'un immeuble.
Paramètres URL
id(string)— ID de l'immeuble/api/v1/buildings/:id/lotslots:writesyndicCréer un lot dans un immeuble.
Paramètres URL
id(string)— ID de l'immeubleBody (JSON)
lot_number(string)— Numéro du lot (requis)floor(number)— Étagetype(string)— Type de lotsurface_area(number)— Surface en m²tantieme(number)— Tantièmes/api/v1/buildings/:id/assembliesassemblies:readsyndicListe les assemblées générales d'un immeuble.
Paramètres URL
id(string)— ID de l'immeubleQuery Parameters
status(string)— Filtrer par statut (planned, in_progress, completed, cancelled)/api/v1/buildings/:id/assembliesassemblies:writesyndicCréer une assemblée générale.
Paramètres URL
id(string)— ID de l'immeubleBody (JSON)
title(string)— Titre (requis)date(string)— Date YYYY-MM-DD (requis)time(string)— Heure (requis)location(string)— Lieu (requis)type(string)— ordinaire ou extraordinaire/api/v1/notificationsnotifications:readListe les notifications.
Query Parameters
unread_only(boolean)— Ne retourner que les non-luespage(number)— Page/api/v1/notifications/mark-readnotifications:writeMarquer des notifications comme lues.
Body (JSON)
all(boolean)— Marquer toutes les notifications comme luesids(string[])— IDs des notifications à marquer/api/v1/conversationsmessages:readListe les conversations.
/api/v1/conversations/:id/messagesmessages:readListe les messages d'une conversation.
Paramètres URL
id(string)— ID de la conversation/api/v1/conversations/:id/messagesmessages:writeEnvoyer un message dans une conversation.
Paramètres URL
id(string)— ID de la conversationBody (JSON)
content(string)— Contenu du message (max 5000 caractères)/api/v1/teamteam:readListe les membres de l'équipe.
/api/v1/teamteam:writeInviter un membre dans l'équipe.
Body (JSON)
email(string)— Email du membre (requis)role(string)— Rôle: admin ou member (défaut: member)/api/v1/teamteam:writeModifier le rôle d'un membre.
Body (JSON)
email(string)— Email du membre (requis)role(string)— Nouveau rôle: admin ou member (requis)/api/v1/teamteam:writeRetirer un membre de l'équipe.
Body (JSON)
email(string)— Email du membre (requis)/api/v1/diagnostic-requestsdiagnostic-requests:readListe les demandes de diagnostic. Diagnostiqueurs: demandes reçues. Autres: demandes envoyées.
/api/v1/diagnostic-requestsdiagnostic-requests:writeCréer une demande de diagnostic.
Body (JSON)
property_uuid(string)— UUID du bien (requis)diagnostic_types(string[])— Types de diagnostics (requis)message(string)— Messagepreferred_date(string)— Date souhaitée YYYY-MM-DD/api/v1/diagnostic-requestsdiagnostic-requests:writeMettre à jour une demande (statut, prix, date).
Body (JSON)
id(string)— ID de la demande (requis)status(string)— Nouveau statutestimated_price(number)— Prix estiméscheduled_date(string)— Date programmée/api/v1/document-requestsdocument-requests:readListe les demandes de documents envoyées.
/api/v1/document-requestsdocument-requests:writeCréer une demande de documents.
Body (JSON)
property_uuid(string)— UUID du bien (requis)document_types(string[])— Types de documents (requis)message(string)— Message/api/v1/webhooksprofile:readListe les webhooks configurés.
/api/v1/webhooksprofile:writeCréer un webhook. Le secret HMAC est retourné une seule fois.
Body (JSON)
url(string)— URL HTTPS du webhook (requis)events(string[])— Événements à écouter (ou ["*"] pour tous)Exemple de réponse
{
"data": {
"uuid": "wh-123",
"url": "https://example.com/webhook",
"events": ["*"],
"secret": "abc123...",
"is_active": true
}
}/api/v1/webhooks/:idprofile:writeMettre à jour un webhook (URL, événements, actif/inactif).
Paramètres URL
id(string)— UUID du webhookBody (JSON)
url(string)— Nouvelle URLevents(string[])— Nouveaux événementsis_active(boolean)— Activer/désactiver/api/v1/webhooks/:idprofile:writeSupprimer un webhook.
Paramètres URL
id(string)— UUID du webhook/api/v1/webhooks/:id/deliveriesprofile:readHistorique des livraisons d'un webhook.
Paramètres URL
id(string)— UUID du webhook