Lexio · Schema
Quote
Devis : prix garanti, frais et code promo compris, jusqu’à `expiresAt`. Il ne réserve pas le véhicule.
Car RentalSoftware-as-a-ServiceFleet ManagementFrenchB2B
Properties
| Name | Type | Description |
|---|---|---|
| id | string | Identifiant du devis, à passer en `quoteId`. |
| createdAt | string | Instant du calcul. |
| expiresAt | string | Fin de la garantie de prix, 24 h après `createdAt` ; au-delà, `POST /rentals` répond 409 `QUOTE_EXPIRED`. |
| consumedAt | object | Instant où une location a été créée avec ce devis ; null tant qu’il n’a pas servi. |
| rentalId | object | Location créée avec ce devis ; null tant qu’il n’a pas servi. |
| currency | string | Devise ISO 4217 : tous les montants de la ressource sont dans cette devise. |
| vehicle | object | |
| period | object | |
| mileage | object | |
| deductible | object | Franchise retenue ; null sans franchise. |
| deposit | object | Caution retenue ; null sans caution. |
| promoCode | object | Code promo appliqué, en majuscules ; null sans code. |
| isVatReverseCharge | boolean | true : autoliquidation de la TVA, `vatPercent` vaut 0 et `totalTTC` = `totalHT`. |
| vatPercent | number | Taux de TVA appliqué, en pourcentage (20 = 20 %) ; 0 en autoliquidation ou pour un loueur exonéré. Au plus 2 décimales. |
| totalHT | number | Total hors taxes : somme des `lines[].amountHT`. |
| vatAmount | number | Montant de la TVA : `totalTTC − totalHT`. |
| totalTTC | number | Total toutes taxes comprises : somme des `lines[].amountTTC`. Caution et franchise n’y sont jamais comptées. |
| lines | array | Détail du prix, une ligne par règle appliquée. |
| pricingBasis | object | |
| choices | object | Prix de chaque forfait, franchise et option possible pour ce véhicule et cette période ; pour en retenir un autre, créez un nouveau devis. Le stock n’est pas réservé. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/lexio-rent/json-schema/lexio-rent-quote-schema.json",
"title": "Quote",
"description": "Devis : prix garanti, frais et code promo compris, jusqu’à `expiresAt`. Il ne réserve pas le véhicule.",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/lexio-rent-openapi.json#/components/schemas/Quote",
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du devis, à passer en `quoteId`."
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Instant du calcul."
},
"expiresAt": {
"type": "string",
"format": "date-time",
"description": "Fin de la garantie de prix, 24 h après `createdAt` ; au-delà, `POST /rentals` répond 409 `QUOTE_EXPIRED`."
},
"consumedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "Instant où une location a été créée avec ce devis ; null tant qu’il n’a pas servi."
},
"rentalId": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"description": "Location créée avec ce devis ; null tant qu’il n’a pas servi."
},
"currency": {
"type": "string",
"enum": [
"EUR",
"XPF",
"CHF",
"CAD",
"GBP",
"USD",
"XOF"
],
"description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise."
},
"vehicle": {
"$ref": "#/$defs/VehicleRef"
},
"period": {
"$ref": "#/$defs/Period"
},
"mileage": {
"$ref": "#/$defs/Mileage"
},
"deductible": {
"anyOf": [
{
"$ref": "#/$defs/DeductibleSnapshot"
},
{
"type": "null"
}
],
"description": "Franchise retenue ; null sans franchise."
},
"deposit": {
"anyOf": [
{
"$ref": "#/$defs/DepositSnapshot"
},
{
"type": "null"
}
],
"description": "Caution retenue ; null sans caution."
},
"promoCode": {
"anyOf": [
{
"type": "string",
"maxLength": 50
},
{
"type": "null"
}
],
"description": "Code promo appliqué, en majuscules ; null sans code."
},
"isVatReverseCharge": {
"type": "boolean",
"description": "true : autoliquidation de la TVA, `vatPercent` vaut 0 et `totalTTC` = `totalHT`."
},
"vatPercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Taux de TVA appliqué, en pourcentage (20 = 20 %) ; 0 en autoliquidation ou pour un loueur exonéré. Au plus 2 décimales."
},
"totalHT": {
"type": "number",
"description": "Total hors taxes : somme des `lines[].amountHT`."
},
"vatAmount": {
"type": "number",
"description": "Montant de la TVA : `totalTTC − totalHT`."
},
"totalTTC": {
"type": "number",
"description": "Total toutes taxes comprises : somme des `lines[].amountTTC`. Caution et franchise n’y sont jamais comptées."
},
"lines": {
"maxItems": 100,
"type": "array",
"items": {
"$ref": "#/$defs/PriceLine"
},
"description": "Détail du prix, une ligne par règle appliquée."
},
"pricingBasis": {
"$ref": "#/$defs/PricingBasis"
},
"choices": {
"type": "object",
"properties": {
"mileagePackages": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"mileage": {
"$ref": "#/$defs/Mileage"
},
"line": {
"description": "Ligne `MILEAGE` que ce forfait produirait.",
"$ref": "#/$defs/PriceLine"
}
},
"required": [
"mileage",
"line"
]
}
},
"deductibles": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"deductible": {
"$ref": "#/$defs/DeductibleSnapshot"
},
"deposit": {
"anyOf": [
{
"$ref": "#/$defs/DepositSnapshot"
},
{
"type": "null"
}
],
"description": "Caution qui serait retenue avec cette franchise ; null sans caution."
},
"line": {
"description": "Ligne `DEDUCTIBLE` que cette franchise produirait.",
"$ref": "#/$defs/PriceLine"
}
},
"required": [
"deductible",
"deposit",
"line"
]
}
},
"options": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"optionId": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string",
"maxLength": 200
},
"maxBookableQuantity": {
"type": "integer",
"minimum": 0,
"description": "Quantité réservable sur la période : stock restant, borné par la quantité maximale de l’option."
},
"line": {
"description": "Ligne `OPTION` pour une unité.",
"$ref": "#/$defs/PriceLine"
}
},
"required": [
"optionId",
"name",
"maxBookableQuantity",
"line"
]
}
}
},
"required": [
"mileagePackages",
"deductibles",
"options"
],
"description": "Prix de chaque forfait, franchise et option possible pour ce véhicule et cette période ; pour en retenir un autre, créez un nouveau devis. Le stock n’est pas réservé."
}
},
"required": [
"id",
"createdAt",
"expiresAt",
"consumedAt",
"rentalId",
"currency",
"vehicle",
"period",
"mileage",
"deductible",
"deposit",
"promoCode",
"isVatReverseCharge",
"vatPercent",
"totalHT",
"vatAmount",
"totalTTC",
"lines",
"pricingBasis",
"choices"
],
"$defs": {
"DeductibleSnapshot": {
"type": "object",
"properties": {
"deductibleId": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"description": "Franchise du catalogue (`GET /deductibles`) ; null si elle a été supprimée depuis."
},
"name": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Nom de la franchise ; null si elle a été supprimée depuis."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
],
"description": "Description de la franchise ; null si absente."
},
"excessAmount": {
"type": "number",
"minimum": 0,
"description": "Reste à charge du client en cas de sinistre, tel que fixé par le loueur, sans TVA appliquée. Jamais facturé ni compris dans les totaux : le prix de la franchise retenue est la ligne `DEDUCTIBLE` de `lines`."
}
},
"required": [
"deductibleId",
"name",
"description",
"excessAmount"
],
"description": "Franchise retenue, figée au moment du calcul."
},
"DepositSnapshot": {
"type": "object",
"properties": {
"depositId": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"description": "Caution du catalogue (`GET /deposits`) ; null si elle a été supprimée depuis."
},
"name": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Nom de la caution ; null si elle a été supprimée depuis."
},
"depositAmount": {
"type": "number",
"minimum": 0,
"description": "Caution demandée au client, telle que fixée par le loueur, sans TVA appliquée. Hors `totalTTC` et hors `balance` : elle s’encaisse à part (paiement `DEPOSIT`)."
}
},
"required": [
"depositId",
"name",
"depositAmount"
],
"description": "Caution retenue, figée au moment du calcul."
},
"Mileage": {
"type": "object",
"properties": {
"mileagePackageId": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"description": "Forfait kilométrique du catalogue (`GET /mileage-packages`) ; null sans forfait."
},
"name": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Nom du forfait ; null sans forfait."
},
"isUnlimited": {
"type": "boolean",
"description": "true : aucun plafond ; `includedKm` et `overageRatePerKmHT` valent alors null."
},
"includedKm": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Kilomètres inclus pour toute la période, pas par jour ; null si illimité."
},
"overageRatePerKmHT": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 999999.9999,
"description": "Au plus 4 décimales."
},
{
"type": "null"
}
],
"description": "Prix HT de chaque kilomètre au-delà de `includedKm`, facturé au retour ; null si illimité ou sans tarif de dépassement."
}
},
"required": [
"mileagePackageId",
"name",
"isUnlimited",
"includedKm",
"overageRatePerKmHT"
],
"description": "Kilométrage inclus et prix du dépassement."
},
"Period": {
"type": "object",
"properties": {
"startAt": {
"type": "string",
"format": "date-time",
"description": "Début contractuel, à l’heure du loueur."
},
"endAt": {
"type": "string",
"format": "date-time",
"description": "Fin contractuelle, à l’heure du loueur."
},
"timezone": {
"type": "string",
"minLength": 1,
"description": "Fuseau horaire IANA du loueur."
},
"billedDays": {
"type": "integer",
"minimum": 0,
"description": "Jours facturés : tranches de 24 h entamées, sans compter une dernière tranche d’au plus `toleranceHours` heures (`GET /organization`) ; 1 au minimum."
},
"durationMinutes": {
"type": "integer",
"minimum": 0,
"description": "Durée exacte entre `startAt` et `endAt`, en minutes."
}
},
"required": [
"startAt",
"endAt",
"timezone",
"billedDays",
"durationMinutes"
],
"description": "Période contractuelle, bornes à l’heure du loueur."
},
"PriceLine": {
"type": "object",
"properties": {
"key": {
"type": "string",
"enum": [
"BASE",
"LEAD_TIME_ADJUSTMENT",
"DURATION_DISCOUNT",
"COMMERCIAL_DISCOUNT",
"WEEKEND_SURCHARGE",
"SHORT_DURATION_SURCHARGE",
"MILEAGE",
"DEDUCTIBLE",
"OPTION",
"CHARGE",
"PROMO",
"MILEAGE_OVERAGE",
"MODIFICATION"
],
"description": "Règle qui a produit la ligne : `BASE` (prix de location), `LEAD_TIME_ADJUSTMENT` (délai de réservation), `DURATION_DISCOUNT` (remise de durée), `COMMERCIAL_DISCOUNT` (remise commerciale), `WEEKEND_SURCHARGE` et `SHORT_DURATION_SURCHARGE` (majorations), `MILEAGE` (forfait kilométrique), `DEDUCTIBLE` (prix de la franchise retenue), `OPTION`, `CHARGE` (frais ou remise saisis), `PROMO` (code promo), `MILEAGE_OVERAGE` (dépassement kilométrique au retour), `MODIFICATION` (écart de prix d’une modification de la location)."
},
"label": {
"type": "string",
"description": "Libellé affichable ; ne pas l’analyser, lire `key`."
},
"refId": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"description": "Élément à l’origine de la ligne : `optionId` pour `OPTION`, identifiant du frais pour `CHARGE` et `MILEAGE_OVERAGE` d’une location ; null sinon."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Nombre d’exemplaires (option) ; 1 pour les autres lignes."
},
"unitPriceHT": {
"type": "number",
"description": "Prix HT d’un exemplaire pour toute la période (`OPTION`) ; égal à `amountHT` sinon. Indicatif, arrondi à l’unité de la devise : `amountHT` fait foi, `unitPriceHT` × `quantity` peut différer d’une unité."
},
"unitPriceTTC": {
"type": "number",
"description": "Prix TTC d’un exemplaire pour toute la période (`OPTION`) ; égal à `amountTTC` sinon. Indicatif, arrondi à l’unité de la devise : `amountTTC` fait foi, `unitPriceTTC` × `quantity` peut différer d’une unité."
},
"amountHT": {
"type": "number",
"description": "Montant HT de la ligne, signé : négatif pour une remise."
},
"amountTTC": {
"type": "number",
"description": "Montant TTC de la ligne, signé : négatif pour une remise."
},
"ratePercent": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Au plus 2 décimales."
},
{
"type": "null"
}
],
"description": "Pourcentage appliqué (20 = 20 %) pour une remise de durée, une majoration, une franchise ou un forfait tarifés en pourcentage ; null pour les autres lignes et pour un montant saisi ou offert."
}
},
"required": [
"key",
"label",
"refId",
"quantity",
"unitPriceHT",
"unitPriceTTC",
"amountHT",
"amountTTC",
"ratePercent"
],
"description": "Ligne de prix d’une offre, d’un devis ou d’une location."
},
"PricingBasis": {
"type": "object",
"properties": {
"dailyPrices": {
"maxItems": 1095,
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "Jour facturé, à l’heure du loueur."
},
"seasonSlug": {
"description": "Saison du jour (`GET /seasons`) ; null sans saison.",
"type": [
"string",
"null"
]
},
"dailyPriceHT": {
"type": "number",
"minimum": 0,
"description": "Prix HT du jour au catalogue, avant facteur de délai."
}
},
"required": [
"date",
"seasonSlug",
"dailyPriceHT"
]
},
"description": "Un élément par jour facturé."
},
"leadTime": {
"anyOf": [
{
"type": "object",
"properties": {
"leadTimeTierId": {
"type": "string",
"format": "uuid",
"description": "Palier de délai (`GET /lead-time-tiers`)."
},
"leadDays": {
"type": "integer",
"minimum": 0,
"description": "Jours calendaires entre le calcul du prix et le départ."
},
"priceFactors": {
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"seasonSlug": {
"type": "string"
},
"priceFactor": {
"type": "number",
"minimum": 0.1,
"maximum": 10,
"description": "Facteur du prix journalier (1 = inchangé). Au plus 4 décimales."
}
},
"required": [
"seasonSlug",
"priceFactor"
]
},
"description": "Facteur appliqué au prix journalier de chaque saison."
}
},
"required": [
"leadTimeTierId",
"leadDays",
"priceFactors"
]
},
{
"type": "null"
}
],
"description": "Palier de délai de réservation appliqué ; null sans palier."
}
},
"required": [
"dailyPrices",
"leadTime"
],
"description": "Explication du prix : base journalière et délai de réservation. Elle explique les lignes sans permettre de recalculer le total, qui se lit dans `lines`."
},
"VehicleRef": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Identifiant du véhicule."
},
"name": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Nom d’usage donné par le loueur (ex. « 208 blanche ») ; null si absent."
},
"brand": {
"type": "string",
"maxLength": 50,
"description": "Marque (ex. Peugeot)."
},
"model": {
"type": "string",
"maxLength": 50,
"description": "Modèle (ex. 208)."
},
"vehicleType": {
"type": "string",
"enum": [
"CITY",
"COMPACT",
"CROSSOVER",
"SEDAN",
"BREAK",
"SUV",
"OFF_ROAD",
"PICKUP",
"MINIVAN",
"VAN",
"UTILITY",
"COUPE",
"CONVERTIBLE",
"SPORT",
"LUXURY",
"MOTORCYCLE",
"SCOOTER"
],
"description": "Type de véhicule : il fixe la famille et les champs applicables."
},
"plate": {
"description": "Immatriculation, en majuscules ; null si le véhicule n’en a pas. Une plaque ou un numéro de série est toujours présent.",
"type": [
"string",
"null"
]
},
"serialNumber": {
"description": "Numéro de série (deux-roues non immatriculé, par exemple) ; null si absent.",
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"name",
"brand",
"model",
"vehicleType",
"plate",
"serialNumber"
],
"description": "Véhicule, vue réduite de `GET /vehicles/{vehicleId}`."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/lexio-rent-quote"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.