# Contacts d'un lead
Permet de gérer les contacts associés à un lead via son intérêt sur un programme.
IMPORTANT
Le lead doit disposer d'un intérêt sur le programme associé.
CONSENTEMENTS
Les champs optin_* et optout_* gèrent le consentement par canal (e-mail, téléphone, SMS). Un optout a priorité sur un optin pour le même canal.
# Lister les contacts
Permission requise : lead.view ou lead-extended.view (via le scoping de l'intérêt)
# Requête HTTP
GET https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts
# Paramètres d'URL
| Nom de la clé | Description |
|---|---|
| {tenantKey} | Clé de l'espace client - Détails |
| {programId} | ID du programme |
| {leadId} | ID du lead |
# curl
curl --location --request GET 'https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts' \
--header 'Accept: application/json' \
--header 'X-API-Key: VOTRE_CLE_API' \
# Body de réponse
DETAILS
{
"success": true,
"message": null,
"data": [
{
"id": 277,
"lead_id": 72933,
"title": "mr",
"title_display": "Monsieur",
"name": "Dupont",
"firstname": "Jean",
"fullname": "Jean Dupont",
"display_name": "Jean Dupont",
"capacity": null,
"email1": "jean.dupont@gmail.com",
"email2": null,
"phone1": "+33600000000",
"phone2": null,
"city": "Paris",
"zipcode": "75001",
"country": "FR",
"address1": "12 rue du Louvre",
"address2": null,
"legal_entity": false,
"legal_status": null,
"company_name": null,
"company_city": null,
"company_zipcode": null,
"company_country": null,
"company_address1": null,
"company_address2": null,
"company_siret": null,
"resides_since": 2018,
"optin_email": true,
"optin_phone": true,
"optin_sms": false,
"optout_email": false,
"optout_phone": false,
"optout_sms": false,
"birthdate": "1985-06-15",
"birthplace": "Lyon",
"nationality": "FR",
"marital_status": "married",
"marital_status_display": "Marié(e)",
"profession": "Cadre",
"socio_professional_category": "private-sector-executives",
"socio_professional_category_display": "Cadres du secteur privé",
"is_employed": true,
"employer_name": "Entreprise A",
"work_address": null,
"vehicles": 1,
"children": 2,
"monthly_net_income": null,
"annual_bonus": null,
"other_annual_income": null,
"annual_taxable_income_n1": null,
"annual_taxable_income_n2": null,
"annual_net_income": null,
"primary_residence": "tenant",
"primary_residence_display": "Locataire",
"own_secondary_residence": false,
"first_time_homeowner": true,
"has_already_invested": false,
"has_already_invested_comment": null,
"bank_name": "Société Générale",
"insurance_name": null,
"has_broker": false,
"created_at": "2024-01-15T10:00:00.000000Z",
"updated_at": "2024-03-08T16:54:03.000000Z"
}
]
}
# Consulter un contact
Permission requise : lead.view ou lead-extended.view (via le scoping de l'intérêt)
# Requête HTTP
GET https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts/{contactId}
# Paramètres d'URL
| Nom de la clé | Description |
|---|---|
| {tenantKey} | Clé de l'espace client - Détails |
| {programId} | ID du programme |
| {leadId} | ID du lead |
| {contactId} | ID du contact |
# curl
curl --location --request GET 'https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts/{contactId}' \
--header 'Accept: application/json' \
--header 'X-API-Key: VOTRE_CLE_API' \
# Body de réponse
Même structure que dans la liste ci-dessus, pour un seul contact.
# Créer un contact
Permission requise : contact.create
# Requête HTTP
POST https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts
# Paramètres d'URL
| Nom de la clé | Description |
|---|---|
| {tenantKey} | Clé de l'espace client - Détails |
| {programId} | ID du programme |
| {leadId} | ID du lead |
# curl
curl --location --request POST 'https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-Key: VOTRE_CLE_API' \
# Paramètres de Body
DOUBLON
Si un contact avec les mêmes coordonnées existe déjà sur un autre lead, la requête est rejetée avec un code 409.
# Schéma
| Champ | Type | Description | Requis | Format des données |
|---|---|---|---|---|
| name | string | Nom | Oui | |
| firstname | string | Prénom | Non | |
| title | string | Civilité | Non | mr ms — nullable |
| email1 | string | Adresse e-mail | Non | Format e-mail — nullable |
| email2 | string | Adresse e-mail secondaire | Non | Format e-mail — nullable |
| phone1 | string | Téléphone | Non | |
| phone2 | string | Téléphone secondaire | Non | |
| legal_entity | boolean | Personne morale | Non | |
| legal_status | string | Statut juridique | Non | Accéder au tableau — nullable |
| company_name | string | Nom de la société | Non | |
| company_siret | string | SIRET | Non | |
| city | string | Ville | Non | |
| zipcode | string | Code postal | Non | |
| country | string | Code pays | Non | |
| address1 | string | Adresse | Non | |
| address2 | string | Adresse 2 | Non | |
| resides_since | int | Réside à l'adresse depuis | Non | Année (4 chiffres) |
| birthdate | string | Date de naissance | Non | Y-m-d |
| birthplace | string | Lieu de naissance | Non | |
| nationality | string | Nationalité | Non | Code pays |
| marital_status | string | Situation maritale | Non | Accéder au tableau — nullable |
| profession | string | Profession | Non | |
| socio_professional_category | string | Catégorie socioprofessionnelle | Non | Accéder au tableau — nullable |
| is_employed | boolean | En activité | Non | Nullable |
| vehicles | int | Nombre de véhicules | Non | 1 chiffre |
| children | int | Nombre d'enfants | Non | 1 chiffre |
| primary_residence | string | Résidence principale | Non | Accéder au tableau — nullable |
| own_secondary_residence | boolean | Résidence secondaire | Non | |
| first_time_homeowner | boolean | Primo-accédant | Non | |
| has_already_invested | boolean | A déjà investi dans l'immobilier | Non | |
| has_already_invested_comment | string | Commentaire investissement | Non | |
| bank_name | string | Banque | Non | |
| insurance_name | string | Assureur | Non | |
| has_broker | boolean | A un courtier | Non | |
| optin_email | boolean | Consentement e-mail | Non | |
| optin_phone | boolean | Consentement téléphone | Non | |
| optin_sms | boolean | Consentement SMS | Non | |
| optout_email | boolean | Opposition e-mail (prioritaire) | Non | |
| optout_phone | boolean | Opposition téléphone (prioritaire) | Non | |
| optout_sms | boolean | Opposition SMS (prioritaire) | Non |
# Exemple
{
"name": "Dupont",
"firstname": "Marie",
"title": "ms",
"email1": "marie.dupont@gmail.com",
"phone1": "+33612345678",
"marital_status": "married",
"optin_email": true
}
# Body de réponse
DETAILS
{
"success": true,
"message": "Contact créé",
"data": {
"id": 16900,
"lead_id": 72933,
"title": "ms",
"title_display": "Madame",
"name": "Dupont",
"firstname": "Marie",
"fullname": "Marie Dupont",
"display_name": "Marie Dupont",
"capacity": null,
"email1": "marie.dupont@gmail.com",
"email2": null,
"phone1": "+33612345678",
"phone2": null,
"city": null,
"zipcode": null,
"country": null,
"address1": null,
"address2": null,
"legal_entity": false,
"legal_status": null,
"company_name": null,
"company_city": null,
"company_zipcode": null,
"company_country": null,
"company_address1": null,
"company_address2": null,
"company_siret": null,
"resides_since": null,
"optin_email": true,
"optin_phone": false,
"optin_sms": false,
"optout_email": false,
"optout_phone": false,
"optout_sms": false,
"birthdate": null,
"birthplace": null,
"nationality": null,
"marital_status": "married",
"marital_status_display": "Marié(e)",
"profession": null,
"socio_professional_category": null,
"socio_professional_category_display": null,
"is_employed": null,
"employer_name": null,
"work_address": null,
"vehicles": null,
"children": null,
"monthly_net_income": null,
"annual_bonus": null,
"other_annual_income": null,
"annual_taxable_income_n1": null,
"annual_taxable_income_n2": null,
"annual_net_income": null,
"primary_residence": null,
"primary_residence_display": null,
"own_secondary_residence": null,
"first_time_homeowner": null,
"has_already_invested": null,
"has_already_invested_comment": null,
"bank_name": null,
"insurance_name": null,
"has_broker": null,
"created_at": "2024-03-09T11:00:00.000000Z",
"updated_at": "2024-03-09T11:00:00.000000Z"
}
}
# Modifier un contact
Permission requise : contact.update
# Requête HTTP
PUT https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts/{contactId}
# Paramètres d'URL
| Nom de la clé | Description |
|---|---|
| {tenantKey} | Clé de l'espace client - Détails |
| {programId} | ID du programme |
| {leadId} | ID du lead |
| {contactId} | ID du contact |
# curl
curl --location --request PUT 'https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts/{contactId}' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-Key: VOTRE_CLE_API' \
# Paramètres de Body
Mêmes champs que la création. Seuls les champs envoyés sont modifiés.
DOUBLON
Si la modification génère un doublon avec un contact d'un autre lead, la requête est rejetée avec un code 409.
# Exemple
{
"phone1": "+33698765432",
"optout_sms": true
}
# Body de réponse
Même structure que la création, avec les champs mis à jour.
# Supprimer un contact
Permission requise : contact.delete
# Requête HTTP
DELETE https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts/{contactId}
# Paramètres d'URL
| Nom de la clé | Description |
|---|---|
| {tenantKey} | Clé de l'espace client - Détails |
| {programId} | ID du programme |
| {leadId} | ID du lead |
| {contactId} | ID du contact |
# curl
curl --location --request DELETE 'https://api.adlead.immo/v1/{tenantKey}/programs/{programId}/leads/{leadId}/contacts/{contactId}' \
--header 'Accept: application/json' \
--header 'X-API-Key: VOTRE_CLE_API' \
# Body de réponse
DETAILS
{
"success": true,
"message": "Contact supprimé",
"body": "Le contact Jean Dupont a été supprimé.",
"data": {
"id": 277,
"lead_id": 72933,
"...": "..."
}
}