3. Créer un lot (Unit)
Observé — aligné sur la doc utilisateur « Création d’un LOT dans le Patrimoine » et la mutation createUnit.
Pourquoi
Le lot (UnitV2) est l’unité locative. Un dossier de location ne peut référencer qu’un lot déjà créé.
Prérequis
- Lister les modèles de lots (paramétrage préalable dans l’UI) :
query listUnitTemplates {
unitTemplates {
data {
id
name
unitTypeId
archived
}
}
}
- (Optionnel) types / groupes / catégories :
query Lookups {
unitTypes { id name category kind active }
availableUnitGroupReferences
managementCategories { data { id name customReference } }
}
Étape — Créer le lot
- GraphQL
- Node.js
- curl
mutation createUnit($unit: UnitInputV2!) {
createUnit(unit: $unit) {
id
name
customReference
externalId
address {
number
street
zip
city
country
}
}
}
{
"unit": {
"name": "Appartement T2 Exemple",
"customReference": "U000014",
"externalId": "APT-T2-EXT-001",
"unitTemplateId": "00000000-0000-4000-8000-000000000010",
"address": {
"number": "16",
"street": "Quai Henri IV",
"city": "Paris",
"zip": "75004",
"country": "FR",
"coordinates": {
"latitude": 48.848251,
"longitude": 2.363691
}
}
}
}
import { ublo } from '../ubloClient.mjs';
const { unitTemplates } = await ublo(`
query { unitTemplates { data { id name archived } } }
`);
const template = unitTemplates.data.find((t) => !t.archived);
if (!template) throw new Error('Aucun unitTemplate actif');
const { createUnit } = await ublo(
`mutation createUnit($unit: UnitInputV2!) {
createUnit(unit: $unit) { id name customReference }
}`,
{
unit: {
name: 'Appartement T2 Exemple',
customReference: 'U000014',
externalId: 'APT-T2-EXT-001',
unitTemplateId: template.id,
address: {
number: '16',
street: 'Quai Henri IV',
city: 'Paris',
zip: '75004',
country: 'FR',
coordinates: { latitude: 48.848251, longitude: 2.363691 },
},
},
},
);
console.log(createUnit.id);
- Bearer
- Cookie session
curl -sS -X POST "$UBLO_GRAPHQL_URL" \
-H "Authorization: Bearer $UBLO_API_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"query": "mutation createUnit($unit: UnitInputV2!) { createUnit(unit: $unit) { id name customReference } }",
"variables": {
"unit": {
"name": "Appartement T2 Exemple",
"customReference": "U000014",
"externalId": "APT-T2-EXT-001",
"unitTemplateId": "00000000-0000-4000-8000-000000000010",
"address": {
"number": "16",
"street": "Quai Henri IV",
"city": "Paris",
"zip": "75004",
"country": "FR"
}
}
}
}'
curl -sS -X POST "$UBLO_GRAPHQL_URL" \
-H 'Content-Type: application/json' \
-b cookies.txt \
-d '{
"query": "mutation createUnit($unit: UnitInputV2!) { createUnit(unit: $unit) { id name customReference } }",
"variables": {
"unit": {
"name": "Appartement T2 Exemple",
"customReference": "U000014",
"externalId": "APT-T2-EXT-001",
"unitTemplateId": "00000000-0000-4000-8000-000000000010",
"address": {
"number": "16",
"street": "Quai Henri IV",
"city": "Paris",
"zip": "75004",
"country": "FR"
}
}
}
}'
Lecture
query GetUnit($id: UUID!) {
unit(id: $id) {
id
name
customReference
state
}
}
Doc utilisateur
Après création, l’UI signale en pastille rouge les sections encore obligatoires (adresse/situation, propriété, loyer…). Côté API, cela correspond à des updateUnit successifs — voir Compléter un lot.