---
title: "Crée un bail sur un bien, avec ses occupants."
method: POST
path: "/api/v1/tenants"
tags: ["tenants"]
---

# Crée un bail sur un bien, avec ses occupants.

`POST /api/v1/tenants`

## Request

- Base URL: `https://api.qalimo.fr`
- URL: `https://api.qalimo.fr/api/v1/tenants`
- Auth: HTTP bearer

Pensé pour la retranscription d'un bail existant : pas de génération de
PDF ni d'envoi en signature (flux applicatifs). Le modèle de bail est
déduit du bien et de `lease_type`, sauf `lease_template_id` explicite.
`generate_initial_balance` reconstruit les appels depuis le début du bail.

## Request body

- TenantCreateInput
  - `property_id` integer, required: Bien loué (accessible en écriture).
  - `occupants` PersonInput[], required: Occupants du bail (au moins un).
    - `kind` 'individual' | 'company': Personne physique (individual) ou morale (company).
    - `last_name` string: Nom de famille (requis pour une personne physique).
    - `first_name` string: Prénom.
    - `company_name` string: Raison sociale (requise pour une personne morale).
    - `email` string: Adresse email de contact (quittances, invitations).
    - `phone` string: Téléphone.
    - `siret` string: SIRET (personne morale), 14 chiffres.
  - `start_date` string, date, required: Date de début du bail.
  - `rent_excluding_charges` number, required: Loyer hors charges, hors complément.
  - `charges` number, required: Charges.
  - `lease_type` 'lcd' | 'nu' | 'meuble' | 'commercial' | 'garage' | 'habitation' | 'mobilite' | 'professionnel' | 'etudiant' | 'commercial_derogatoire' | 'sous-location' | 'civil' | 'civil_habitation' | 'stockage' | 'parking': Type de bail. Requis pour un bien d'habitation ; déduit pour un bien commercial ou garage.
  - `lease_template_id` integer: Modèle de bail précis (sinon déduit du type et du bien).
  - `end_date` string, date: Date de fin du bail. Requise si contract_duration_months est absent, et toujours pour un bail mobilité ou de location courte durée.
  - `contract_duration_months` integer: Durée du contrat en mois.
  - `deposit` number: Dépôt de garantie (défaut : 0).
  - `payment_day` integer: Jour du mois auquel le loyer est dû (défaut : 1).
  - `payment_recurrence_months` integer: Périodicité de l'échéance en mois (défaut : 1).
  - `payment_periods_from_start_date` boolean: Vrai si les périodes trimestrielles, semestrielles ou annuelles sont calées sur le mois de début du bail plutôt que sur l'année civile (sans effet en mensuel). Défaut : false.
  - `signature_date` string, date: Date de signature du bail.
  - `allow_non_compliant` boolean: Retranscription d'un bail existant non conforme aux plafonds légaux (dépôt, durées) : désactive ces contrôles.
  - `generate_initial_balance` boolean: Génère les appels de loyer depuis le début du bail (reconstruction d'historique).
  - `generate_payments` boolean: Avec generate_initial_balance : marque aussi les paiements correspondants.

## Response `201`

Created

- TenantDetail
  - `id` integer, required: Identifiant du bail.
  - `name` string, required: Libellé du bail.
  - `occupants` string, required: Nom d'affichage des occupants.
  - `property_id` integer, required: Identifiant du bien loué.
  - `start_date` string, date, required: Date de début du bail.
  - `end_date` string, date, nullable: Date de fin du bail (null si non renseignée).
  - `rent_excluding_charges` number, nullable: Loyer hors charges, complément de loyer inclus.
  - `status` 'active' | 'candidate' | 'archived' | 'archived_candidate', required: État du bail (actif, candidat, archivé, candidat archivé).
  - `charges` number, nullable: Charges.
  - `additional_rent` number, nullable: Complément de loyer, déjà inclus dans rent_excluding_charges.
  - `deposit` number, nullable: Montant du dépôt de garantie.
  - `payment_day` integer, nullable: Jour du mois auquel le loyer est dû.
  - `payment_recurrence_months` integer, nullable: Périodicité de l'échéance en mois (1 = mensuelle, 3 = trimestrielle…).
  - `payment_periods_from_start_date` boolean: Vrai si les périodes trimestrielles, semestrielles ou annuelles sont calées sur le mois de début du bail plutôt que sur l'année civile (sans effet en mensuel).
  - `payment_type` 'prelevement' | 'virement' | 'espece' | 'cheque' | 'null', nullable: Mode de paiement du loyer.
  - `signature_date` string, date, nullable: Date de signature du bail.
  - `contract_duration_months` integer, nullable: Durée du contrat en mois.
  - `lease_type` 'lcd' | 'nu' | 'meuble' | 'commercial' | 'garage' | 'habitation' | 'mobilite' | 'professionnel' | 'etudiant' | 'commercial_derogatoire' | 'sous-location' | 'civil' | 'civil_habitation' | 'stockage' | 'parking' | 'null', nullable: Type de bail.
  - `charge_type` 'provision' | 'forfait' | 'null', nullable: Mode de facturation des charges.
  - `vat_enabled` boolean: Vrai si le loyer est soumis à TVA.
  - `caf_amount` number, nullable: Montant de l'aide CAF versée directement.
  - `last_rent_revision_date` string, date, nullable: Date de la dernière révision de loyer.
  - `notice_given` boolean, nullable: Vrai si le locataire a posé son préavis.
  - `occupant_profiles` PersonSummary[]: Profils occupants du bail (identité et coordonnées).
    - `id` integer, required: Identifiant du profil.
    - `kind` 'individual' | 'company', required: Personne physique (individual) ou morale (company).
    - `last_name` string, nullable: Nom de famille.
    - `first_name` string, nullable: Prénom.
    - `company_name` string, nullable: Raison sociale (personne morale).
    - `email` string, nullable: Adresse email de contact.
    - `phone` string, nullable: Téléphone.
    - `siret` string, nullable: SIRET (personne morale).
  - `guarantor_profiles` PersonSummary[]: Profils garants.
    - `id` integer, required: Identifiant du profil.
    - `kind` 'individual' | 'company', required: Personne physique (individual) ou morale (company).
    - `last_name` string, nullable: Nom de famille.
    - `first_name` string, nullable: Prénom.
    - `company_name` string, nullable: Raison sociale (personne morale).
    - `email` string, nullable: Adresse email de contact.
    - `phone` string, nullable: Téléphone.
    - `siret` string, nullable: SIRET (personne morale).

## Other responses

- `422`: Unprocessable Content
- `default`: Default error response

---

[API](https://skmtc.dev/qalimo/apis/qalimo-api.md) · [All operations](https://skmtc.dev/qalimo/apis/qalimo-api/llms.txt) · [OpenAPI document](https://skmtc.dev/qalimo/apis/qalimo-api/revisions/f97d62827e94?raw)
