Aller au contenu principal

Propriétés

Endpoints

EndpointUsage
GET /propertiesListe des propriétés
GET /properties/{id}Détail d'une propriété
GET /properties/filterRecherche filtrée (texte, visibilité, type, adresse)
GET /properties/publicPropriétés publiques (page Explorer)
GET /properties/recommended, GET /properties/popularRecommandations / logements populaires
POST /properties/{id}, PUT /properties/{id}, DELETE /properties/{id}Création / mise à jour / suppression
GET /properties/{id}/promosOffres et codes promo liés
GET /properties/{id}/favorite, GET /properties/get/favoritesFavoris
GET /property-typesRéférentiel des types de propriétés ({ id, name, description?, created_at, updated_at })
remarque

Il n'existe pas de liste fixe de types de propriété ou de politique d'annulation codée en dur côté frontend : la liste des types vient de GET /property-types, chargée dynamiquement.

Formulaire de création (assistant en 8 étapes)

Champs validés à la création, par étape :

// Étape 1 — compte
who_are_you: "individual" | "company";
user_id: number;
name_of_structure?: string;

// Étape 2 — identité
internal_name: string; // min 2 caractères, usage interne/admin
public_name: string; // min 2 caractères, visible des voyageurs
type: { id: string; name?: string };
description: string; // min 20 caractères

// Étape 3 — localisation
country: { id: string; name?: string };
address: string;
location: string; // format "lat,lng", ex. "5.336,-4.026"
neighborhood_id: number;

// Étape 4 — tarification
base_price: number;
price_per_night: number;
pricing: number;
cleaning_fee: number;
tax: number;
security_deposit: number;

// Étape 5 — capacité & horaires
capacity: number;
square_footage: number;
check_in_time: string; // format HH:MM:SS
check_in_time_end: string;
check_out_time: string;

// Étape 6 — règles & politique
rules: string[];
cancellation_policy: string[];
specifications: string[];

// Étape 7 — synchronisation canal
channex_sync_now?: boolean;

// Étape 8 — informations complémentaires
some_informations: Array<{ key: string; value: string }>;
wifi_informations: { network: string; password: string; speed: string };
Format qui change entre la saisie et la lecture

Sur le formulaire, cancellation_policy est saisie comme un tableau de chaînes (étape 6). Mais l'objet renvoyé en lecture (GET /properties/{id}) le représente comme un objet à trois indicateurs booléens :

cancellation_policy: {
flexible: boolean;
moderate: boolean;
strict: boolean;
description: string;
} | null;

Une transformation a donc lieu entre la saisie et l'enregistrement — le code qui l'effectue n'a pas été localisé dans le frontend (probablement côté backend). Ne présumez pas qu'un même champ garde la même forme entre écriture et lecture.

Objet propriété (lecture, GET /properties/{id})

Champs principaux (liste non exhaustive des relations) :

{
id: number;
internal_name: string;
public_name: string;
type: string;
description: string;
address: string;
location: string;
status: string;
visibility: number; // 0/1
breakfast_included: number; // 0/1
pets_allowed: number; // 0/1
recommended: number; // 0/1
base_price: string; // valeurs numériques sérialisées en chaîne
price_per_night: string;
capacity: number;
cleaning_fee: string;
tax: string;
security_deposit: string;
rating: string;
like_count: number;
is_favorite?: boolean | number; // typage incohérent selon l'endpoint
is_reserved: boolean;
reserved_dates: string[];

check_in_time: string;
check_in_time_end: string;
check_out_time: string;

commodities: Array<{ id: number; name: string; type: string }>;
medias: Array<{ id: number; media_type: string; url: string; thumbnail_url: string | null }>;
seasons: any[]; // non typé sur cet endpoint
offers: any[]; // non typé sur cet endpoint
packages: any[]; // non typé sur cet endpoint

owner: {
id: number; username: string; first_name: string; last_name: string;
location: string; email: string; avatar: string | null; phone: string;
};

// Intégration Channex (channel manager)
channex_property_id?: string | null;
channex_synced_at?: string | null;
channex_room_types: ChannexRoomType[]; // voir ci-dessous

currency_model?: {
id: number; code: string; name: string; symbol: string;
exchange_rate: string; is_default: boolean; is_active: boolean;
} | null;
}
remarque

Une deuxième route de lecture (celle utilisée pour lister les propriétés d'un propriétaire) renvoie une forme différente où features, commodities, rules, wifi_informations, cancellation_policy etc. sont des chaînes JSON à parser côté client, plutôt que des objets déjà décodés comme ci-dessus. Les deux formes coexistent dans le code selon l'endpoint appelé — vérifiez laquelle s'applique avant d'implémenter un client.

Chambres et tarifs Channex (channex_room_types)

{
id: number;
title: string;
count_of_rooms: number;
occ_adults: number;
occ_children: number;
capacity: number;
rate_plans: Array<{
id: number;
title: string;
currency: string;
max_stay: number[];
min_stay_arrival: number[];
closed_to_arrival: boolean[];
closed_to_departure: boolean[];
stop_sell: boolean[];
sell_mode: string;
rate_mode: string;
}>;
}