{
  "openapi": "3.1.0",
  "info": {
    "title": "API Lexio",
    "version": "1.0.1",
    "description": "# API Lexio v1\n\nL’API Lexio permet à un loueur de véhicules, ou à une plateforme partenaire autorisée par lui, de chiffrer, réserver, suivre et administrer ses locations depuis un serveur. Chaque appel agit sur l’organisation Lexio d’un seul loueur.\n\n- **Adresse de base** : `https://api.lexio.rent/api/external/v1`\n- **Authentification** : `Authorization: Bearer lck_…`, une clé créée par le loueur dans Lexio.\n- **Format** : JSON en UTF-8 ; erreurs RFC 9457 avec un `code` stable.\n- **Spécification OpenAPI 3.1** : [https://docs.lexio.rent/openapi.json](https://docs.lexio.rent/openapi.json), à importer dans votre client HTTP ou à utiliser pour générer un client.\n- **Contact** (support technique, demande d’accès, organisation de test) : contact@lexio.rent.\n\nVocabulaire : une **location** (`/rentals`) est un contrat de location d’un véhicule ; un **lieu** (`/locations`) est une adresse de départ ou de retour.\n\n## Guides\n\n1. [Démarrage rapide](https://docs.lexio.rent/demarrage-rapide) : de la recherche d’un véhicule à l’annulation.\n2. [Authentification et scopes](https://docs.lexio.rent/authentification) : clés du loueur et clés partenaires, scopes, plans.\n3. [Montants et TVA](https://docs.lexio.rent/montants-et-tva) : HT, TTC, devises, caution et franchise.\n4. [Cycle de vie d’une location](https://docs.lexio.rent/cycle-de-vie) : statuts et actions possibles.\n5. [Limites de débit](https://docs.lexio.rent/limites), [Pagination](https://docs.lexio.rent/pagination), [Idempotence et reprise](https://docs.lexio.rent/idempotence).\n6. [Synchronisation par événements](https://docs.lexio.rent/synchronisation) : suivre les changements sans webhook.\n7. [Versions et évolutions](https://docs.lexio.rent/versions), [Erreurs](https://docs.lexio.rent/erreurs).\n8. [Intégration d’une plateforme de réservation](https://docs.lexio.rent/integration-broker) : parcours partenaire, paiement.\n9. [Ce qui se gère dans Lexio](https://docs.lexio.rent/ce-qui-se-gere-dans-lexio) et [Historique des versions](https://docs.lexio.rent/historique).",
    "contact": {
      "name": "Support Lexio",
      "email": "contact@lexio.rent",
      "url": "https://docs.lexio.rent"
    }
  },
  "servers": [
    {
      "url": "https://api.lexio.rent/api/external/v1",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Organisation",
      "description": "Réglages de l’organisation liée à la clé : devise, fuseau, TVA, horaires, règles de réservation."
    },
    {
      "name": "Offre",
      "description": "Disponibilités et devis : ce qui est réservable, à quel prix, avant de créer une location."
    },
    {
      "name": "Locations",
      "description": "Les contrats de location : création, lecture, modification de notes, suppression."
    },
    {
      "name": "Modifications",
      "description": "Changer les dates, le véhicule, la protection, le titulaire ou les options d’une location, ou l’annuler."
    },
    {
      "name": "Départ et retour",
      "description": "Remise des clés et retour du véhicule : kilométrage, carburant, photos, état des lieux."
    },
    {
      "name": "Paiements",
      "description": "Encaissements, cautions et remboursements enregistrés sur une location."
    },
    {
      "name": "Événements",
      "description": "Flux des changements à relire pour synchroniser votre système, sans webhook."
    },
    {
      "name": "Clients",
      "description": "Fiches des clients particuliers et entreprises."
    },
    {
      "name": "Flotte",
      "description": "Véhicules, leur archivage et leurs indisponibilités."
    },
    {
      "name": "Catalogue",
      "description": "Catégories, lieux, options, franchises, cautions et forfaits kilométriques proposés à la location."
    },
    {
      "name": "Tarification",
      "description": "Saisons, remises de durée, paliers de délai et réglages de prix."
    },
    {
      "name": "Entretien",
      "description": "Alertes et historique d’entretien des véhicules."
    }
  ],
  "security": [
    {
      "ApiKey": []
    }
  ],
  "paths": {
    "/availability": {
      "get": {
        "operationId": "listAvailability",
        "summary": "Lister les disponibilités et les prix",
        "description": "**Accès** : `offers.read`\n\nPrix réservable de chaque véhicule sur la période, avec forfait, franchise et caution par défaut (ceux de `POST /quotes`) : un devis sur les mêmes `vehicleId`, `startAt` et `endAt`, sans autre champ, donne le même `totalTTC`. Seul un devis fige le prix.\n\n**Périmètre** : véhicules actifs, non archivés, dont la catégorie tarifaire a un prix (sans catégorie : `NO_PRICING_CATEGORY` dans `notBookableReasons` de `GET /vehicles`).\n\n**Filtres** : `startAt` et `endAt` obligatoires. `isAvailable=true` : réservables ; `false` : les autres, avec `unavailableReasons`. Identifiant inconnu : aucun élément.\n\n**Pagination** : par `displayOrder` puis `id`, au plus 3 100 jours-véhicule par page (`limit` × jours facturés) : une page peut être incomplète, voire vide ; suivez `nextCursor` jusqu’à null.\n\n**Refus** : `BOOKING_RULE_VIOLATION`, période hors des règles de réservation (clé partenaire).",
        "tags": [
          "Offre"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "offers.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "startAt",
            "schema": {
              "examples": [
                "2026-11-10T10:00"
              ],
              "type": "string"
            },
            "required": true,
            "description": "Heure murale de l’agence, sans décalage : YYYY-MM-DDTHH:mm ou YYYY-MM-DDTHH:mm:ss (secondes ignorées)."
          },
          {
            "in": "query",
            "name": "endAt",
            "schema": {
              "examples": [
                "2026-11-10T10:00"
              ],
              "type": "string"
            },
            "required": true,
            "description": "Heure murale de l’agence, sans décalage : YYYY-MM-DDTHH:mm ou YYYY-MM-DDTHH:mm:ss (secondes ignorées)."
          },
          {
            "in": "query",
            "name": "vehicleId",
            "schema": {
              "type": "string"
            },
            "description": "Identifiants UUID séparés par des virgules, 100 au plus."
          },
          {
            "in": "query",
            "name": "categoryId",
            "schema": {
              "type": "string"
            },
            "description": "Identifiants UUID séparés par des virgules, 50 au plus."
          },
          {
            "in": "query",
            "name": "vehicleType",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : CITY, COMPACT, CROSSOVER, SEDAN, BREAK, SUV, OFF_ROAD, PICKUP, MINIVAN, VAN, UTILITY, COUPE, CONVERTIBLE, SPORT, LUXURY, MOTORCYCLE, SCOOTER."
          },
          {
            "in": "query",
            "name": "isAvailable",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les disponibilités et les prix",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "vehicle": {
                        "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
                        "name": "208 Allure",
                        "brand": "Peugeot",
                        "model": "208",
                        "vehicleType": "CITY",
                        "plate": "AB-123-CD",
                        "serialNumber": null,
                        "description": "Citadine 5 portes, idéale pour la ville et la Côte d’Azur.",
                        "color": "Blanc",
                        "seats": 5,
                        "doors": 5,
                        "transmission": "MANUAL",
                        "fuelType": "PETROL",
                        "equipment": [
                          "AIR_CONDITIONING",
                          "BLUETOOTH",
                          "GPS"
                        ],
                        "imageUrls": [
                          "https://cdn.lexio.rent/vehicles/3b1f5c2a/front.webp"
                        ],
                        "category": {
                          "id": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
                          "name": "Citadine"
                        }
                      },
                      "currency": "EUR",
                      "period": {
                        "startAt": "2026-11-10T10:00:00+01:00",
                        "endAt": "2026-11-15T10:00:00+01:00",
                        "timezone": "Europe/Paris",
                        "billedDays": 5,
                        "durationMinutes": 7200
                      },
                      "isAvailable": true,
                      "unavailableReasons": [],
                      "mileage": {
                        "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
                        "name": "200 km/jour",
                        "isUnlimited": false,
                        "includedKm": 1000,
                        "overageRatePerKmHT": 0.25
                      },
                      "deductible": {
                        "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
                        "name": "Franchise réduite",
                        "description": "Reste à charge réduit en cas de sinistre.",
                        "excessAmount": 500
                      },
                      "deposit": {
                        "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
                        "name": "Caution citadine",
                        "depositAmount": 800
                      },
                      "vatPercent": 20,
                      "totalHT": 237,
                      "vatAmount": 47.4,
                      "totalTTC": 284.4,
                      "lines": [
                        {
                          "key": "BASE",
                          "label": "Tarif de base",
                          "refId": null,
                          "quantity": 1,
                          "unitPriceHT": 210,
                          "unitPriceTTC": 252,
                          "amountHT": 210,
                          "amountTTC": 252,
                          "ratePercent": null
                        },
                        {
                          "key": "DURATION_DISCOUNT",
                          "label": "Réduction durée 5 jours",
                          "refId": null,
                          "quantity": 1,
                          "unitPriceHT": -10.5,
                          "unitPriceTTC": -12.6,
                          "amountHT": -10.5,
                          "amountTTC": -12.6,
                          "ratePercent": 5
                        },
                        {
                          "key": "MILEAGE",
                          "label": "Forfait 200 km/jour",
                          "refId": null,
                          "quantity": 1,
                          "unitPriceHT": 0,
                          "unitPriceTTC": 0,
                          "amountHT": 0,
                          "amountTTC": 0,
                          "ratePercent": null
                        },
                        {
                          "key": "DEDUCTIBLE",
                          "label": "Franchise réduite",
                          "refId": null,
                          "quantity": 1,
                          "unitPriceHT": 37.5,
                          "unitPriceTTC": 45,
                          "amountHT": 37.5,
                          "amountTTC": 45,
                          "ratePercent": null
                        }
                      ],
                      "pricingBasis": {
                        "dailyPrices": [
                          {
                            "date": "2026-11-10",
                            "seasonSlug": "basse",
                            "dailyPriceHT": 42
                          },
                          {
                            "date": "2026-11-11",
                            "seasonSlug": "basse",
                            "dailyPriceHT": 42
                          },
                          {
                            "date": "2026-11-12",
                            "seasonSlug": "basse",
                            "dailyPriceHT": 42
                          },
                          {
                            "date": "2026-11-13",
                            "seasonSlug": "basse",
                            "dailyPriceHT": 42
                          },
                          {
                            "date": "2026-11-14",
                            "seasonSlug": "basse",
                            "dailyPriceHT": 42
                          }
                        ],
                        "leadTime": null
                      }
                    }
                  ],
                  "nextCursor": null
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Offer"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`BOOKING_RULE_VIOLATION`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/BookingRuleViolationProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/offre/list-availability",
          "metadata": {
            "title": "Lister les disponibilités et les prix",
            "sidebarTitle": "Lister les disponibilités et les prix"
          }
        }
      }
    },
    "/categories": {
      "get": {
        "operationId": "listCategories",
        "summary": "Lister les catégories tarifaires",
        "description": "**Accès** : `catalog.read`\n\nListe les catégories tarifaires de l’organisation, avec leurs prix journaliers par saison et leurs nombres de véhicules. Tri : `name`, puis `id`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les catégories tarifaires",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Category"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/list-categories",
          "metadata": {
            "title": "Lister les catégories tarifaires",
            "sidebarTitle": "Lister les catégories tarifaires"
          }
        }
      },
      "post": {
        "operationId": "createCategory",
        "summary": "Créer une catégorie tarifaire",
        "description": "**Accès** : `catalog.write`\n\nCrée une catégorie tarifaire ; ses prix de saison (`seasonPrices`) sont calculés dans la même transaction.\n\n**Refus** : nom déjà porté par une autre catégorie, casse ignorée → 409 `ALREADY_EXISTS`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "name": "Citadine",
                "baseDailyPriceHT": 42,
                "overageRatePerKmHT": 0.25
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom de la catégorie, unique dans l’organisation (casse ignorée).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "baseDailyPriceHT": {
                    "description": "Prix journalier HT de base. Le prix de chaque saison en découle : base × `priceFactor` de la saison (`GET /seasons`).",
                    "type": "number"
                  },
                  "overageRatePerKmHT": {
                    "description": "Prix HT de chaque kilomètre au-delà des kilomètres inclus, 4 décimales au plus ; null : aucun prix de dépassement défini.",
                    "anyOf": [
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 999999.9999,
                        "description": "Au plus 4 décimales."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "name",
                  "baseDailyPriceHT"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer une catégorie tarifaire",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Category"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/create-category",
          "metadata": {
            "title": "Créer une catégorie tarifaire",
            "sidebarTitle": "Créer une catégorie tarifaire"
          }
        }
      }
    },
    "/categories/{categoryId}": {
      "delete": {
        "operationId": "deleteCategory",
        "summary": "Supprimer une catégorie tarifaire",
        "description": "**Accès** : `catalog.write`\n\nSupprime une catégorie tarifaire et son prix de dépassement ; 204 sans corps.\n\n**Refus** : catégorie encore rattachée à un véhicule (archivé compris), une caution ou une franchise → 409 `RESOURCE_IN_USE`, avec toutes les causes dans `blockers` (`VEHICLES`, `DEPOSITS`, `DEDUCTIBLES`) ; rien n’est supprimé.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "categoryId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la catégorie."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/delete-category",
          "metadata": {
            "title": "Supprimer une catégorie tarifaire",
            "sidebarTitle": "Supprimer une catégorie tarifaire"
          }
        }
      },
      "get": {
        "operationId": "getCategory",
        "summary": "Lire une catégorie tarifaire",
        "description": "**Accès** : `catalog.read`\n\nRenvoie une catégorie tarifaire, dans la même représentation que la liste.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "categoryId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la catégorie."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire une catégorie tarifaire",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Category"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/get-category",
          "metadata": {
            "title": "Lire une catégorie tarifaire",
            "sidebarTitle": "Lire une catégorie tarifaire"
          }
        }
      },
      "patch": {
        "operationId": "updateCategory",
        "summary": "Modifier une catégorie tarifaire",
        "description": "**Accès** : `catalog.write`\n\nModifie une catégorie tarifaire : seuls les champs envoyés changent.\n\n- Un nouveau `baseDailyPriceHT` recalcule `seasonPrices` dans la même transaction.\n- `overageRatePerKmHT: null` supprime le prix de dépassement.\n\n**Refus** : nom déjà porté par une autre catégorie, casse ignorée → 409 `ALREADY_EXISTS`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "categoryId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la catégorie."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "baseDailyPriceHT": 45
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom de la catégorie, unique dans l’organisation (casse ignorée).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "baseDailyPriceHT": {
                    "description": "Prix journalier HT de base. Le prix de chaque saison en découle : base × `priceFactor` de la saison (`GET /seasons`).",
                    "type": "number"
                  },
                  "overageRatePerKmHT": {
                    "description": "Prix HT de chaque kilomètre au-delà des kilomètres inclus, 4 décimales au plus ; null : aucun prix de dépassement défini.",
                    "anyOf": [
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 999999.9999,
                        "description": "Au plus 4 décimales."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "baseDailyPriceHT": 45
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom de la catégorie, unique dans l’organisation (casse ignorée).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "baseDailyPriceHT": {
                    "description": "Prix journalier HT de base. Le prix de chaque saison en découle : base × `priceFactor` de la saison (`GET /seasons`).",
                    "type": "number"
                  },
                  "overageRatePerKmHT": {
                    "description": "Prix HT de chaque kilomètre au-delà des kilomètres inclus, 4 décimales au plus ; null : aucun prix de dépassement défini.",
                    "anyOf": [
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 999999.9999,
                        "description": "Au plus 4 décimales."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier une catégorie tarifaire",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Category"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/update-category",
          "metadata": {
            "title": "Modifier une catégorie tarifaire",
            "sidebarTitle": "Modifier une catégorie tarifaire"
          }
        }
      }
    },
    "/customers": {
      "get": {
        "operationId": "listCustomers",
        "summary": "Lister les clients",
        "description": "**Accès** : `customers.read`\n\nListe les clients visibles par la clé, fiches anonymisées comprises : toute l’agence pour une clé interne, les clients de son `partnerCode` pour une clé partenaire. Tri : `lastName` (raison sociale d’une société), puis `id`.\n\n**Filtres** : `email`, égalité exacte, casse ignorée, plusieurs fiches possibles (sociétés, une fiche particulier par `partnerCode`) ; `companyRegistrationNumber`, égalité exacte.",
        "tags": [
          "Clients"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "customers.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "email",
            "schema": {
              "description": "Égalité exacte, casse ignorée.",
              "type": "string",
              "maxLength": 255,
              "format": "email"
            },
            "description": "Égalité exacte, casse ignorée."
          },
          {
            "in": "query",
            "name": "companyRegistrationNumber",
            "schema": {
              "description": "Égalité exacte.",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "description": "Égalité exacte."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les clients",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Customer"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/clients/list-customers",
          "metadata": {
            "title": "Lister les clients",
            "sidebarTitle": "Lister les clients"
          }
        }
      },
      "post": {
        "operationId": "createCustomer",
        "summary": "Créer un client",
        "description": "**Accès** : `customers.write`\n\nCrée un client, particulier (`firstName`, `lastName`) ou société (`isCompany: true`, `companyName`). Une clé partenaire lui attribue son `partnerCode`.\n\n**Refus** : champ de l’autre type de client → 400 `not_applicable` ; société française sans `companyRegistrationNumber` → 400 `required` ; email déjà pris par un particulier du même `partnerCode` → 409 `ALREADY_EXISTS`.\n\n**Effet** : si l’agence a connecté sa comptabilité, la fiche comptable est créée en différé.",
        "tags": [
          "Clients"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "customers.write"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "firstName": "Alice",
                "lastName": "Martin",
                "email": "a.martin@example.com",
                "phone": "06 12 34 56 78",
                "birthDate": "1990-06-14",
                "address": {
                  "street": "59 avenue Saint-Augustin",
                  "postalCode": "06200",
                  "city": "Nice",
                  "country": "FR"
                },
                "acquisitionSource": "PHONE"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "isCompany": {
                    "description": "true : société (`companyName` requis) ; false : particulier.",
                    "default": false,
                    "type": "boolean"
                  },
                  "firstName": {
                    "description": "Prénom (particulier) ; null pour une société ou une fiche anonymisée.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "lastName": {
                    "description": "Nom de famille (particulier), publié en majuscules ; null pour une société ou une fiche anonymisée.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "companyName": {
                    "description": "Raison sociale (société) ; null pour un particulier.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "email": {
                    "description": "Email, en minuscules ; celui d’un particulier est unique pour un même `partnerCode`.",
                    "type": "string",
                    "maxLength": 255,
                    "format": "email"
                  },
                  "phone": {
                    "anyOf": [
                      {
                        "description": "Téléphone, 7 à 15 chiffres, `+` initial admis ; espaces, tirets, points, barres obliques et parenthèses sont ignorés. Enregistré au format international (`+33612345678`) quand l’indicatif ou le pays de l’adresse le permet.",
                        "type": "string",
                        "minLength": 7,
                        "maxLength": 25,
                        "pattern": "^\\+?[\\d\\s\\-()./]+$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "birthDate": {
                    "description": "Date de naissance (particulier), `YYYY-MM-DD`.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "birthCity": {
                    "description": "Lieu de naissance (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "nationality": {
                    "description": "Nationalité, en texte libre (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "licenseNumber": {
                    "description": "Numéro du permis de conduire (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 50
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "licenseIssueDate": {
                    "description": "Date de délivrance du permis de conduire (particulier), `YYYY-MM-DD`.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "address": {
                    "description": "Adresse postale ; en modification, fusionnée champ par champ, null la retire.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "street": {
                            "description": "Numéro et voie.",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 300
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "complement": {
                            "description": "Complément d’adresse (bâtiment, étage…).",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 300
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "postalCode": {
                            "description": "Code postal.",
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "city": {
                            "description": "Ville.",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "country": {
                            "description": "Pays, code ISO 3166-1 alpha-2 (casse ignorée) ; omis à la création : celui de l’agence, sinon FR.",
                            "type": "string"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "companyRegistrationNumber": {
                    "description": "Numéro d’immatriculation de la société. En France et dans les DROM : SIREN, 9 chiffres, requis pour une société ; ailleurs, format du pays. Pays : celui de l’adresse, sinon celui de l’agence.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "companyEstablishmentNumber": {
                    "description": "Numéro de l’établissement (en France : SIRET, 14 chiffres).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vatNumber": {
                    "description": "Numéro de TVA intracommunautaire de la société.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 50
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "acquisitionSource": {
                    "description": "Canal par lequel le client est arrivé. Omis : `ONLINE`.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ONLINE",
                          "PHONE",
                          "WALKIN",
                          "PARTNER",
                          "OTHER"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "email"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer un client",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/clients/create-customer",
          "metadata": {
            "title": "Créer un client",
            "sidebarTitle": "Créer un client"
          }
        }
      }
    },
    "/customers/{customerId}": {
      "delete": {
        "operationId": "deleteCustomer",
        "summary": "Supprimer un client",
        "description": "**Accès** : `customers.delete`\n\nSupprime définitivement un client, avec ses documents, notes et pièces d’identité ; 204 sans corps.\n\n**Refus** : client lié à une location (titulaire ou conducteur, tout statut), une facture, un devis commercial ou un incident → 409 `RESOURCE_IN_USE` avec toutes les causes ; rien n’est supprimé. Pour effacer ses données personnelles, demandez son anonymisation au support Lexio (contact@lexio.rent).\n\n**Effets** : un mandat de prélèvement SEPA est détaché chez Stripe ; si l’agence a connecté sa comptabilité, la fiche comptable est supprimée. Un échec de ces effets ne change pas la réponse.",
        "tags": [
          "Clients"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "customers.delete"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "customerId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la fiche client."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/clients/delete-customer",
          "metadata": {
            "title": "Supprimer un client",
            "sidebarTitle": "Supprimer un client"
          }
        }
      },
      "get": {
        "operationId": "getCustomer",
        "summary": "Lire un client",
        "description": "**Accès** : `customers.read`\n\nRenvoie un client visible par la clé, dans la même représentation que la liste, sans historique de locations. Hors du périmètre de la clé : 404.",
        "tags": [
          "Clients"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "customers.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "customerId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la fiche client."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire un client",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/clients/get-customer",
          "metadata": {
            "title": "Lire un client",
            "sidebarTitle": "Lire un client"
          }
        }
      },
      "patch": {
        "operationId": "updateCustomer",
        "summary": "Modifier un client",
        "description": "**Accès** : `customers.write`\n\nModifie un client en Merge Patch : champ omis inchangé, `null` efface ; `address` est fusionnée champ par champ, `address: null` la retire. Pour changer de type (`isCompany`), fournissez dans la même requête les noms du nouveau type.\n\n**Refus** : fiche anonymisée → 409 `CUSTOMER_ANONYMIZED` ; email de particulier déjà pris → 409 `ALREADY_EXISTS`.\n\n**Effets** : si l’agence a connecté sa comptabilité, la fiche comptable est mise à jour ou créée pendant l’appel ; une adresse complétée émet ensuite les factures en attente des locations payées.",
        "tags": [
          "Clients"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "customers.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "customerId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la fiche client."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "phone": null,
                "address": {
                  "street": "99 boulevard Haussmann",
                  "postalCode": "75008",
                  "city": "Paris"
                },
                "licenseIssueDate": "2015-03-20"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "isCompany": {
                    "description": "Change le type du client : fournir dans la même requête les noms du nouveau type.",
                    "type": "boolean"
                  },
                  "firstName": {
                    "description": "Prénom (particulier) ; null pour une société ou une fiche anonymisée.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastName": {
                    "description": "Nom de famille (particulier), publié en majuscules ; null pour une société ou une fiche anonymisée.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "companyName": {
                    "description": "Raison sociale (société) ; null pour un particulier.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "email": {
                    "description": "Email, en minuscules ; celui d’un particulier est unique pour un même `partnerCode`.",
                    "type": "string",
                    "maxLength": 255,
                    "format": "email"
                  },
                  "phone": {
                    "anyOf": [
                      {
                        "description": "Téléphone, 7 à 15 chiffres, `+` initial admis ; espaces, tirets, points, barres obliques et parenthèses sont ignorés. Enregistré au format international (`+33612345678`) quand l’indicatif ou le pays de l’adresse le permet.",
                        "type": "string",
                        "minLength": 7,
                        "maxLength": 25,
                        "pattern": "^\\+?[\\d\\s\\-()./]+$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "birthDate": {
                    "description": "Date de naissance (particulier), `YYYY-MM-DD`.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "birthCity": {
                    "description": "Lieu de naissance (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "nationality": {
                    "description": "Nationalité, en texte libre (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "licenseNumber": {
                    "description": "Numéro du permis de conduire (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 50
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "licenseIssueDate": {
                    "description": "Date de délivrance du permis de conduire (particulier), `YYYY-MM-DD`.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "address": {
                    "description": "Adresse postale ; en modification, fusionnée champ par champ, null la retire.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "street": {
                            "description": "Numéro et voie.",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 300
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "complement": {
                            "description": "Complément d’adresse (bâtiment, étage…).",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 300
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "postalCode": {
                            "description": "Code postal.",
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "city": {
                            "description": "Ville.",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "country": {
                            "description": "Pays, code ISO 3166-1 alpha-2 (casse ignorée) ; omis à la création : celui de l’agence, sinon FR.",
                            "type": "string"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "companyRegistrationNumber": {
                    "description": "Numéro d’immatriculation de la société. En France et dans les DROM : SIREN, 9 chiffres, requis pour une société ; ailleurs, format du pays. Pays : celui de l’adresse, sinon celui de l’agence.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "companyEstablishmentNumber": {
                    "description": "Numéro de l’établissement (en France : SIRET, 14 chiffres).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vatNumber": {
                    "description": "Numéro de TVA intracommunautaire de la société.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 50
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "acquisitionSource": {
                    "description": "Canal par lequel le client est arrivé.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ONLINE",
                          "PHONE",
                          "WALKIN",
                          "PARTNER",
                          "OTHER"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "phone": null,
                "address": {
                  "street": "99 boulevard Haussmann",
                  "postalCode": "75008",
                  "city": "Paris"
                },
                "licenseIssueDate": "2015-03-20"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "isCompany": {
                    "description": "Change le type du client : fournir dans la même requête les noms du nouveau type.",
                    "type": "boolean"
                  },
                  "firstName": {
                    "description": "Prénom (particulier) ; null pour une société ou une fiche anonymisée.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastName": {
                    "description": "Nom de famille (particulier), publié en majuscules ; null pour une société ou une fiche anonymisée.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "companyName": {
                    "description": "Raison sociale (société) ; null pour un particulier.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "email": {
                    "description": "Email, en minuscules ; celui d’un particulier est unique pour un même `partnerCode`.",
                    "type": "string",
                    "maxLength": 255,
                    "format": "email"
                  },
                  "phone": {
                    "anyOf": [
                      {
                        "description": "Téléphone, 7 à 15 chiffres, `+` initial admis ; espaces, tirets, points, barres obliques et parenthèses sont ignorés. Enregistré au format international (`+33612345678`) quand l’indicatif ou le pays de l’adresse le permet.",
                        "type": "string",
                        "minLength": 7,
                        "maxLength": 25,
                        "pattern": "^\\+?[\\d\\s\\-()./]+$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "birthDate": {
                    "description": "Date de naissance (particulier), `YYYY-MM-DD`.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "birthCity": {
                    "description": "Lieu de naissance (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "nationality": {
                    "description": "Nationalité, en texte libre (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "licenseNumber": {
                    "description": "Numéro du permis de conduire (particulier).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 50
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "licenseIssueDate": {
                    "description": "Date de délivrance du permis de conduire (particulier), `YYYY-MM-DD`.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "address": {
                    "description": "Adresse postale ; en modification, fusionnée champ par champ, null la retire.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "street": {
                            "description": "Numéro et voie.",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 300
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "complement": {
                            "description": "Complément d’adresse (bâtiment, étage…).",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 300
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "postalCode": {
                            "description": "Code postal.",
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "city": {
                            "description": "Ville.",
                            "anyOf": [
                              {
                                "type": "string",
                                "maxLength": 100
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "country": {
                            "description": "Pays, code ISO 3166-1 alpha-2 (casse ignorée) ; omis à la création : celui de l’agence, sinon FR.",
                            "type": "string"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "companyRegistrationNumber": {
                    "description": "Numéro d’immatriculation de la société. En France et dans les DROM : SIREN, 9 chiffres, requis pour une société ; ailleurs, format du pays. Pays : celui de l’adresse, sinon celui de l’agence.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "companyEstablishmentNumber": {
                    "description": "Numéro de l’établissement (en France : SIRET, 14 chiffres).",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vatNumber": {
                    "description": "Numéro de TVA intracommunautaire de la société.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 50
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "acquisitionSource": {
                    "description": "Canal par lequel le client est arrivé.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "ONLINE",
                          "PHONE",
                          "WALKIN",
                          "PARTNER",
                          "OTHER"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier un client",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `CUSTOMER_ANONYMIZED`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/CustomerAnonymizedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/clients/update-customer",
          "metadata": {
            "title": "Modifier un client",
            "sidebarTitle": "Modifier un client"
          }
        }
      }
    },
    "/deductibles": {
      "get": {
        "operationId": "listDeductibles",
        "summary": "Lister les franchises",
        "description": "**Accès** : `catalog.read`\n\nListe les franchises de l’organisation. Tri : `name`, puis `id`. `isActive` filtre (`true` ou `false`, omis : tous).",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "isActive",
            "schema": {
              "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les franchises",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Deductible"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/list-deductibles",
          "metadata": {
            "title": "Lister les franchises",
            "sidebarTitle": "Lister les franchises"
          }
        }
      },
      "post": {
        "operationId": "createDeductible",
        "summary": "Créer une franchise",
        "description": "**Accès** : `catalog.write`\n\nCrée une franchise, réservée à une catégorie (`categoryId`) ou valable pour toutes.\n\n**Défaut** : `isDefault: true` en fait la franchise par défaut de sa portée (sa catégorie, ou globale) et retire ce statut à l’ancienne dans la même transaction ; un défaut est toujours actif (`isDefault: true` avec `isActive: false` → 400 `mutually_exclusive`).\n\n**Refus**\n- `categoryId` ou `linkedDepositId` inconnu → 422 `REFERENCE_NOT_FOUND` ;\n- caution liée désactivée ou d’une autre catégorie → 422 `REFERENCE_INACTIVE`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "name": "Franchise réduite",
                "excessAmount": 500,
                "price": {
                  "mode": "FIXED_PER_DAY",
                  "amountHT": 7.5
                },
                "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
                "linkedDepositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "excessAmount": {
                    "description": "Montant laissé à la charge du client en cas de sinistre. Hors total de la location et sans TVA : il n’est pas facturé.",
                    "type": "number"
                  },
                  "price": {
                    "description": "Prix HT de cette franchise (son rachat) pour le client.",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Prix fixe par jour facturé.",
                            "type": "string",
                            "const": "FIXED_PER_DAY"
                          },
                          "amountHT": {
                            "description": "Prix HT par jour facturé ; 0 : offert.",
                            "type": "number"
                          }
                        },
                        "required": [
                          "mode",
                          "amountHT"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Pourcentage du prix de location du véhicule.",
                            "type": "string",
                            "const": "PERCENT_OF_RENTAL"
                          },
                          "percent": {
                            "description": "Pourcentage du prix HT de location du véhicule, hors options. Au plus 2 décimales.",
                            "type": "number",
                            "minimum": 0.01,
                            "maximum": 100
                          }
                        },
                        "required": [
                          "mode",
                          "percent"
                        ],
                        "additionalProperties": false
                      }
                    ],
                    "type": "object"
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire à laquelle l’élément est réservé ; null : toutes les catégories.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "linkedDepositId": {
                    "description": "Caution retenue avec cette franchise quand une offre omet `depositId` ; null : aucune. À l’écriture : caution active, globale ou de la catégorie de la franchise (sinon 422 `REFERENCE_INACTIVE`).",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Franchise retenue quand une offre omet `deductibleId` : défaut de la catégorie du véhicule, sinon défaut global. Un seul défaut par catégorie et un seul global ; en désigner un autre retire ce statut à l’ancien. Un défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : retiré de la vente. Désactiver l’élément par défaut exige aussi `isDefault: false` (sinon 409 `DEFAULT_ITEM_REQUIRED`).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "name",
                  "excessAmount",
                  "price"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer une franchise",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Deductible"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_INACTIVE`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceInactiveProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/create-deductible",
          "metadata": {
            "title": "Créer une franchise",
            "sidebarTitle": "Créer une franchise"
          }
        }
      }
    },
    "/deductibles/{deductibleId}": {
      "delete": {
        "operationId": "deleteDeductible",
        "summary": "Supprimer une franchise",
        "description": "**Accès** : `catalog.write`\n\nSupprime une franchise ; 204 sans corps.\n\n**Refus**\n- franchise par défaut → 409 `DEFAULT_ITEM_REQUIRED` : désignez d’abord un autre défaut, ou retirez-lui ce statut (`isDefault: false`) ;\n- franchise portée par une location ou un devis → 409 `RESOURCE_IN_USE` (`RENTALS`, `SALES_QUOTES`) : désactivez-la plutôt.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deductibleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la franchise."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`DEFAULT_ITEM_REQUIRED`, `IDEMPOTENCY_IN_FLIGHT`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/DefaultItemRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/delete-deductible",
          "metadata": {
            "title": "Supprimer une franchise",
            "sidebarTitle": "Supprimer une franchise"
          }
        }
      },
      "get": {
        "operationId": "getDeductible",
        "summary": "Lire une franchise",
        "description": "**Accès** : `catalog.read`\n\nRenvoie une franchise.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deductibleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la franchise."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire une franchise",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Deductible"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/get-deductible",
          "metadata": {
            "title": "Lire une franchise",
            "sidebarTitle": "Lire une franchise"
          }
        }
      },
      "patch": {
        "operationId": "updateDeductible",
        "summary": "Modifier une franchise",
        "description": "**Accès** : `catalog.write`\n\nModifie une franchise : seuls les champs envoyés changent ; `price` est remplacé en entier.\n\n- `isDefault` : mêmes règles qu’à la [création](https://docs.lexio.rent/api-reference/catalogue/create-deductible). Désactiver la franchise par défaut sans envoyer `isDefault: false` → 409 `DEFAULT_ITEM_REQUIRED`.\n- La caution liée n’est contrôlée que si `linkedDepositId` ou `categoryId` change.\n\n**Refus** : référence inconnue → 422 `REFERENCE_NOT_FOUND` ; caution liée désactivée ou d’une autre catégorie → 422 `REFERENCE_INACTIVE`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deductibleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la franchise."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "price": {
                  "mode": "PERCENT_OF_RENTAL",
                  "percent": 10
                },
                "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
                "linkedDepositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "excessAmount": {
                    "description": "Montant laissé à la charge du client en cas de sinistre. Hors total de la location et sans TVA : il n’est pas facturé.",
                    "type": "number"
                  },
                  "price": {
                    "description": "Prix HT de cette franchise (son rachat) pour le client. Remplacé en entier.",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Prix fixe par jour facturé.",
                            "type": "string",
                            "const": "FIXED_PER_DAY"
                          },
                          "amountHT": {
                            "description": "Prix HT par jour facturé ; 0 : offert.",
                            "type": "number"
                          }
                        },
                        "required": [
                          "mode",
                          "amountHT"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Pourcentage du prix de location du véhicule.",
                            "type": "string",
                            "const": "PERCENT_OF_RENTAL"
                          },
                          "percent": {
                            "description": "Pourcentage du prix HT de location du véhicule, hors options. Au plus 2 décimales.",
                            "type": "number",
                            "minimum": 0.01,
                            "maximum": 100
                          }
                        },
                        "required": [
                          "mode",
                          "percent"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire à laquelle l’élément est réservé ; null : toutes les catégories.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "linkedDepositId": {
                    "description": "Caution retenue avec cette franchise quand une offre omet `depositId` ; null : aucune. À l’écriture : caution active, globale ou de la catégorie de la franchise (sinon 422 `REFERENCE_INACTIVE`).",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Franchise retenue quand une offre omet `deductibleId` : défaut de la catégorie du véhicule, sinon défaut global. Un seul défaut par catégorie et un seul global ; en désigner un autre retire ce statut à l’ancien. Un défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : retiré de la vente. Désactiver l’élément par défaut exige aussi `isDefault: false` (sinon 409 `DEFAULT_ITEM_REQUIRED`).",
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "price": {
                  "mode": "PERCENT_OF_RENTAL",
                  "percent": 10
                },
                "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
                "linkedDepositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "excessAmount": {
                    "description": "Montant laissé à la charge du client en cas de sinistre. Hors total de la location et sans TVA : il n’est pas facturé.",
                    "type": "number"
                  },
                  "price": {
                    "description": "Prix HT de cette franchise (son rachat) pour le client. Remplacé en entier.",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Prix fixe par jour facturé.",
                            "type": "string",
                            "const": "FIXED_PER_DAY"
                          },
                          "amountHT": {
                            "description": "Prix HT par jour facturé ; 0 : offert.",
                            "type": "number"
                          }
                        },
                        "required": [
                          "mode",
                          "amountHT"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Pourcentage du prix de location du véhicule.",
                            "type": "string",
                            "const": "PERCENT_OF_RENTAL"
                          },
                          "percent": {
                            "description": "Pourcentage du prix HT de location du véhicule, hors options. Au plus 2 décimales.",
                            "type": "number",
                            "minimum": 0.01,
                            "maximum": 100
                          }
                        },
                        "required": [
                          "mode",
                          "percent"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire à laquelle l’élément est réservé ; null : toutes les catégories.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "linkedDepositId": {
                    "description": "Caution retenue avec cette franchise quand une offre omet `depositId` ; null : aucune. À l’écriture : caution active, globale ou de la catégorie de la franchise (sinon 422 `REFERENCE_INACTIVE`).",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Franchise retenue quand une offre omet `deductibleId` : défaut de la catégorie du véhicule, sinon défaut global. Un seul défaut par catégorie et un seul global ; en désigner un autre retire ce statut à l’ancien. Un défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : retiré de la vente. Désactiver l’élément par défaut exige aussi `isDefault: false` (sinon 409 `DEFAULT_ITEM_REQUIRED`).",
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier une franchise",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Deductible"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`DEFAULT_ITEM_REQUIRED`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/DefaultItemRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_INACTIVE`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceInactiveProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/update-deductible",
          "metadata": {
            "title": "Modifier une franchise",
            "sidebarTitle": "Modifier une franchise"
          }
        }
      }
    },
    "/deposits": {
      "get": {
        "operationId": "listDeposits",
        "summary": "Lister les cautions",
        "description": "**Accès** : `catalog.read` · Fonctionnalité d’abonnement : `pricing.deposits` ([plans](https://docs.lexio.rent/authentification))\n\nListe les cautions de l’organisation. Tri : `displayOrder`, `name`, puis `id`. `isActive` filtre (`true` ou `false`, omis : tous).",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "x-required-feature": "pricing.deposits",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "isActive",
            "schema": {
              "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les cautions",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Deposit"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/list-deposits",
          "metadata": {
            "title": "Lister les cautions",
            "sidebarTitle": "Lister les cautions"
          }
        }
      },
      "post": {
        "operationId": "createDeposit",
        "summary": "Créer une caution",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `pricing.deposits` ([plans](https://docs.lexio.rent/authentification))\n\nCrée une caution, réservée à une catégorie (`categoryId`) ou valable pour toutes ; `method` est requis.\n\n**Défaut** : `isDefault: true` en fait la caution par défaut de sa portée (sa catégorie, ou globale) et retire ce statut à l’ancienne dans la même transaction ; un défaut est toujours actif (`isDefault: true` avec `isActive: false` → 400 `mutually_exclusive`).\n\n**Refus** : `categoryId` inconnu → 422 `REFERENCE_NOT_FOUND`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "pricing.deposits",
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "name": "Caution citadine",
                "depositAmount": 800,
                "method": "CREDIT_CARD",
                "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "depositAmount": {
                    "description": "Montant demandé en garantie au client, rendu après la location sauf retenue décidée par le loueur. Hors total de la location et sans TVA.",
                    "type": "number"
                  },
                  "method": {
                    "description": "Moyen par lequel la caution est garantie. Requis : aucun moyen par défaut.",
                    "type": "string",
                    "enum": [
                      "CREDIT_CARD",
                      "CASH",
                      "TRANSFER",
                      "CHECK",
                      "SWIKLY",
                      "STRIPE",
                      "TYLLT",
                      "MOBILE_MONEY",
                      "OTHER"
                    ]
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire à laquelle l’élément est réservé ; null : toutes les catégories.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Caution retenue quand une offre omet `depositId` et que la franchise retenue n’a pas de caution liée active : défaut de la catégorie du véhicule, sinon défaut global. Un seul défaut par catégorie et un seul global ; un défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : retiré de la vente. Désactiver l’élément par défaut exige aussi `isDefault: false` (sinon 409 `DEFAULT_ITEM_REQUIRED`).",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  }
                },
                "required": [
                  "name",
                  "depositAmount",
                  "method"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer une caution",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Deposit"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/create-deposit",
          "metadata": {
            "title": "Créer une caution",
            "sidebarTitle": "Créer une caution"
          }
        }
      }
    },
    "/deposits/{depositId}": {
      "delete": {
        "operationId": "deleteDeposit",
        "summary": "Supprimer une caution",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `pricing.deposits` ([plans](https://docs.lexio.rent/authentification))\n\nSupprime une caution ; 204 sans corps.\n\n**Refus**\n- caution par défaut → 409 `DEFAULT_ITEM_REQUIRED` : désignez d’abord un autre défaut, ou retirez-lui ce statut (`isDefault: false`) ;\n- caution portée par une location ou un devis, ou liée à une franchise → 409 `RESOURCE_IN_USE` (`RENTALS`, `SALES_QUOTES`, `DEDUCTIBLES`) : désactivez-la plutôt.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "pricing.deposits",
        "parameters": [
          {
            "in": "path",
            "name": "depositId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la caution."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`DEFAULT_ITEM_REQUIRED`, `IDEMPOTENCY_IN_FLIGHT`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/DefaultItemRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/delete-deposit",
          "metadata": {
            "title": "Supprimer une caution",
            "sidebarTitle": "Supprimer une caution"
          }
        }
      },
      "get": {
        "operationId": "getDeposit",
        "summary": "Lire une caution",
        "description": "**Accès** : `catalog.read` · Fonctionnalité d’abonnement : `pricing.deposits` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie une caution.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "x-required-feature": "pricing.deposits",
        "parameters": [
          {
            "in": "path",
            "name": "depositId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la caution."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire une caution",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Deposit"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/get-deposit",
          "metadata": {
            "title": "Lire une caution",
            "sidebarTitle": "Lire une caution"
          }
        }
      },
      "patch": {
        "operationId": "updateDeposit",
        "summary": "Modifier une caution",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `pricing.deposits` ([plans](https://docs.lexio.rent/authentification))\n\nModifie une caution : seuls les champs envoyés changent ; `null` efface `description` et `categoryId`. `isDefault` suit les règles de la [création](https://docs.lexio.rent/api-reference/catalogue/create-deposit).\n\n**Refus** : désactiver la caution par défaut sans envoyer `isDefault: false` → 409 `DEFAULT_ITEM_REQUIRED` ; `categoryId` inconnu → 422 `REFERENCE_NOT_FOUND`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "pricing.deposits",
        "parameters": [
          {
            "in": "path",
            "name": "depositId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la caution."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "depositAmount": 900,
                "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "depositAmount": {
                    "description": "Montant demandé en garantie au client, rendu après la location sauf retenue décidée par le loueur. Hors total de la location et sans TVA.",
                    "type": "number"
                  },
                  "method": {
                    "description": "Moyen par lequel la caution est garantie.",
                    "type": "string",
                    "enum": [
                      "CREDIT_CARD",
                      "CASH",
                      "TRANSFER",
                      "CHECK",
                      "SWIKLY",
                      "STRIPE",
                      "TYLLT",
                      "MOBILE_MONEY",
                      "OTHER"
                    ]
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire à laquelle l’élément est réservé ; null : toutes les catégories.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Caution retenue quand une offre omet `depositId` et que la franchise retenue n’a pas de caution liée active : défaut de la catégorie du véhicule, sinon défaut global. Un seul défaut par catégorie et un seul global ; un défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : retiré de la vente. Désactiver l’élément par défaut exige aussi `isDefault: false` (sinon 409 `DEFAULT_ITEM_REQUIRED`).",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "depositAmount": 900,
                "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "depositAmount": {
                    "description": "Montant demandé en garantie au client, rendu après la location sauf retenue décidée par le loueur. Hors total de la location et sans TVA.",
                    "type": "number"
                  },
                  "method": {
                    "description": "Moyen par lequel la caution est garantie.",
                    "type": "string",
                    "enum": [
                      "CREDIT_CARD",
                      "CASH",
                      "TRANSFER",
                      "CHECK",
                      "SWIKLY",
                      "STRIPE",
                      "TYLLT",
                      "MOBILE_MONEY",
                      "OTHER"
                    ]
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire à laquelle l’élément est réservé ; null : toutes les catégories.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Caution retenue quand une offre omet `depositId` et que la franchise retenue n’a pas de caution liée active : défaut de la catégorie du véhicule, sinon défaut global. Un seul défaut par catégorie et un seul global ; un défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : retiré de la vente. Désactiver l’élément par défaut exige aussi `isDefault: false` (sinon 409 `DEFAULT_ITEM_REQUIRED`).",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier une caution",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Deposit"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`DEFAULT_ITEM_REQUIRED`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/DefaultItemRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/update-deposit",
          "metadata": {
            "title": "Modifier une caution",
            "sidebarTitle": "Modifier une caution"
          }
        }
      }
    },
    "/duration-discounts": {
      "get": {
        "operationId": "listDurationDiscounts",
        "summary": "Lister les remises de durée",
        "description": "**Accès** : `pricing.read` · Fonctionnalité d’abonnement : `pricing.discounts` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie la grille complète des remises de durée, actives ou non, triée par `minRentalDays` puis `id` ; `nextCursor` vaut toujours `null`.\n\n**Application**\n- Une remise s’applique quand la durée facturée (`period.billedDays`) est dans [`minRentalDays`, `maxRentalDays`], qu’elle est active, et que [`GET /pricing-settings`](https://docs.lexio.rent/api-reference/tarification/get-pricing-settings) donne `durationDiscounts.isEnabled` et `isAvailable` à `true`.\n- Elle porte sur le prix HT de location du véhicule après saison et délai de réservation, hors forfait kilométrique, franchise, options et majorations.\n- Les plages ne se chevauchent jamais : au plus une remise s’applique.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "x-required-feature": "pricing.discounts",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Lister les remises de durée",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/DurationDiscount"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/list-duration-discounts",
          "metadata": {
            "title": "Lister les remises de durée",
            "sidebarTitle": "Lister les remises de durée"
          }
        }
      },
      "post": {
        "operationId": "createDurationDiscount",
        "summary": "Créer une remise de durée",
        "description": "**Accès** : `pricing.write` · Fonctionnalité d’abonnement : `pricing.discounts` ([plans](https://docs.lexio.rent/authentification))\n\nCrée une remise de durée ; `maxRentalDays` est requis, `null` pour une plage sans borne haute.\n\n**Refus** : `maxRentalDays` < `minRentalDays` → 400 `too_small` ; plage qui chevauche une autre remise, même inactive → 409 `RANGE_OVERLAP` (`conflictingId` et ses bornes).",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.write"
        ],
        "x-required-feature": "pricing.discounts",
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "minRentalDays": 2,
                "maxRentalDays": 2,
                "discountPercent": 3,
                "isActive": true
              },
              "schema": {
                "type": "object",
                "properties": {
                  "minRentalDays": {
                    "description": "Durée facturée minimale, en jours, incluse.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 365
                  },
                  "maxRentalDays": {
                    "description": "Durée facturée maximale, en jours, incluse ; null : sans borne haute. Requis : null s’envoie explicitement.",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "discountPercent": {
                    "description": "Remise en % sur le prix HT de location du véhicule, après saison et délai de réservation. Au plus 2 décimales.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "isActive": {
                    "description": "false : remise conservée mais non appliquée.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "minRentalDays",
                  "maxRentalDays",
                  "discountPercent"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer une remise de durée",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/DurationDiscount"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RANGE_OVERLAP`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RangeOverlapProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/create-duration-discount",
          "metadata": {
            "title": "Créer une remise de durée",
            "sidebarTitle": "Créer une remise de durée"
          }
        }
      }
    },
    "/duration-discounts/{durationDiscountId}": {
      "delete": {
        "operationId": "deleteDurationDiscount",
        "summary": "Supprimer une remise de durée",
        "description": "**Accès** : `pricing.write` · Fonctionnalité d’abonnement : `pricing.discounts` ([plans](https://docs.lexio.rent/authentification))\n\nSupprime une remise de durée ; 204 sans corps. Rien ne bloque la suppression : les locations existantes gardent le taux figé à leur création.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.write"
        ],
        "x-required-feature": "pricing.discounts",
        "parameters": [
          {
            "in": "path",
            "name": "durationDiscountId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "description": "Identifiant de la remise de durée.",
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la remise de durée."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/delete-duration-discount",
          "metadata": {
            "title": "Supprimer une remise de durée",
            "sidebarTitle": "Supprimer une remise de durée"
          }
        }
      },
      "get": {
        "operationId": "getDurationDiscount",
        "summary": "Lire une remise de durée",
        "description": "**Accès** : `pricing.read` · Fonctionnalité d’abonnement : `pricing.discounts` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie une remise de durée.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "x-required-feature": "pricing.discounts",
        "parameters": [
          {
            "in": "path",
            "name": "durationDiscountId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "description": "Identifiant de la remise de durée.",
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la remise de durée."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire une remise de durée",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/DurationDiscount"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/get-duration-discount",
          "metadata": {
            "title": "Lire une remise de durée",
            "sidebarTitle": "Lire une remise de durée"
          }
        }
      },
      "patch": {
        "operationId": "updateDurationDiscount",
        "summary": "Modifier une remise de durée",
        "description": "**Accès** : `pricing.write` · Fonctionnalité d’abonnement : `pricing.discounts` ([plans](https://docs.lexio.rent/authentification))\n\nModifie une remise de durée : seuls les champs envoyés changent ; `maxRentalDays: null` ouvre la plage. Les bornes sont contrôlées sur la remise obtenue.\n\n**Refus** : `maxRentalDays` < `minRentalDays` → 400 `too_small` ; chevauchement avec une autre remise, même inactive → 409 `RANGE_OVERLAP`.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.write"
        ],
        "x-required-feature": "pricing.discounts",
        "parameters": [
          {
            "in": "path",
            "name": "durationDiscountId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "description": "Identifiant de la remise de durée.",
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la remise de durée."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "discountPercent": 12.5
              },
              "schema": {
                "type": "object",
                "properties": {
                  "minRentalDays": {
                    "description": "Durée facturée minimale, en jours, incluse.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 365
                  },
                  "maxRentalDays": {
                    "description": "Durée facturée maximale, en jours, incluse ; null : sans borne haute.",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "discountPercent": {
                    "description": "Remise en % sur le prix HT de location du véhicule, après saison et délai de réservation. Au plus 2 décimales.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "isActive": {
                    "description": "false : remise conservée mais non appliquée.",
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "discountPercent": 12.5
              },
              "schema": {
                "type": "object",
                "properties": {
                  "minRentalDays": {
                    "description": "Durée facturée minimale, en jours, incluse.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 365
                  },
                  "maxRentalDays": {
                    "description": "Durée facturée maximale, en jours, incluse ; null : sans borne haute.",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "discountPercent": {
                    "description": "Remise en % sur le prix HT de location du véhicule, après saison et délai de réservation. Au plus 2 décimales.",
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "isActive": {
                    "description": "false : remise conservée mais non appliquée.",
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier une remise de durée",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/DurationDiscount"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RANGE_OVERLAP`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RangeOverlapProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/update-duration-discount",
          "metadata": {
            "title": "Modifier une remise de durée",
            "sidebarTitle": "Modifier une remise de durée"
          }
        }
      }
    },
    "/events": {
      "get": {
        "operationId": "listEvents",
        "summary": "Suivre les changements des locations",
        "description": "**Accès** : `rentals.read`\n\nFlux ordonné des changements de locations : `rental.created`, `rental.updated`, `rental.cancelled` et `rental.deleted`. Les événements sont minces : relisez la location par `GET /rentals/{rentalId}`. Une clé partenaire ne reçoit que ceux de ses locations.\n\n**Lecture** : sans `cursor`, le flux part des 29 derniers jours (`start=EARLIEST`) ou du moment présent (`start=LATEST`). Traitez les événements dans l’ordre de la page, puis reprenez au `nextCursor` tel quel : sur ce flux, il n’est jamais nul, même sur une page vide.\n\n**Refus** : curseur de plus de 30 jours → 410 `CURSOR_EXPIRED`, voir [Synchronisation](https://docs.lexio.rent/synchronisation).",
        "tags": [
          "Événements"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "start",
            "schema": {
              "description": "Point de départ sans `cursor` : `EARLIEST` (défaut) repart des événements des 29 derniers jours ; `LATEST` ne renvoie aucun événement, seulement le curseur du moment. Exclusif avec `cursor`.",
              "type": "string",
              "enum": [
                "EARLIEST",
                "LATEST"
              ]
            },
            "description": "Point de départ sans `cursor` : `EARLIEST` (défaut) repart des événements des 29 derniers jours ; `LATEST` ne renvoie aucun événement, seulement le curseur du moment. Exclusif avec `cursor`."
          },
          {
            "in": "query",
            "name": "types",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : rental.created, rental.updated, rental.cancelled, rental.deleted."
          }
        ],
        "responses": {
          "200": {
            "description": "Suivre les changements des locations",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Event"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "410": {
            "description": "`CURSOR_EXPIRED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CursorExpiredProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/evenements/list-events",
          "metadata": {
            "title": "Suivre les changements des locations",
            "sidebarTitle": "Suivre les changements des locations"
          }
        }
      }
    },
    "/lead-time-tiers": {
      "get": {
        "operationId": "listLeadTimeTiers",
        "summary": "Lister les paliers de délai de réservation",
        "description": "**Accès** : `pricing.read` · Fonctionnalité d’abonnement : `pricing.leadtime` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie les paliers de délai de réservation (10 au plus), actifs ou non, triés par `minLeadDays` puis `id` ; `nextCursor` vaut toujours `null`.\n\n**Application**\n- Le délai se compte en jours civils de l’agence, de la date du devis au jour du départ. S’applique le palier actif dont la plage le contient ; les plages ne se chevauchent pas.\n- Il ne compte que si [`GET /pricing-settings`](https://docs.lexio.rent/api-reference/tarification/get-pricing-settings) donne `leadTimePricing.isEnabled` et `isAvailable` à `true`.\n- Avec la tarification saisonnière, chaque jour de location est multiplié par le `priceFactor` de sa saison ; sans elle, toute la base est multipliée par la moyenne des `priceFactor` du palier. [`POST /quotes`](https://docs.lexio.rent/api-reference/offre/create-quote) fait foi.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "x-required-feature": "pricing.leadtime",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Lister les paliers de délai de réservation",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/LeadTimeTier"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/list-lead-time-tiers",
          "metadata": {
            "title": "Lister les paliers de délai de réservation",
            "sidebarTitle": "Lister les paliers de délai de réservation"
          }
        }
      }
    },
    "/lead-time-tiers/{leadTimeTierId}": {
      "get": {
        "operationId": "getLeadTimeTier",
        "summary": "Lire un palier de délai de réservation",
        "description": "**Accès** : `pricing.read` · Fonctionnalité d’abonnement : `pricing.leadtime` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie un palier de délai de réservation, avec un `priceFactor` par saison.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "x-required-feature": "pricing.leadtime",
        "parameters": [
          {
            "in": "path",
            "name": "leadTimeTierId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "description": "Identifiant du palier de délai.",
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du palier de délai."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire un palier de délai de réservation",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/LeadTimeTier"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/get-lead-time-tier",
          "metadata": {
            "title": "Lire un palier de délai de réservation",
            "sidebarTitle": "Lire un palier de délai de réservation"
          }
        }
      },
      "patch": {
        "operationId": "updateLeadTimeTier",
        "summary": "Modifier un palier de délai de réservation",
        "description": "**Accès** : `pricing.write` · Fonctionnalité d’abonnement : `pricing.leadtime` ([plans](https://docs.lexio.rent/authentification))\n\nModifie un palier de délai : seuls les champs envoyés changent ; `maxLeadDays: null` ouvre la plage. La création et la suppression de paliers se font dans Lexio.\n\n- `priceFactors` est remplacé en entier et couvre exactement les saisons de l’organisation : saison en double ou manquante → 400, saison inconnue → 422 `REFERENCE_NOT_FOUND`. Chaque `priceFactor` va de 0,1 à 5, 2 décimales au plus.\n- Bornes contrôlées sur le palier obtenu : `maxLeadDays` < `minLeadDays` → 400 `too_small` ; chevauchement avec un autre palier, même inactif → 409 `RANGE_OVERLAP`.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.write"
        ],
        "x-required-feature": "pricing.leadtime",
        "parameters": [
          {
            "in": "path",
            "name": "leadTimeTierId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "description": "Identifiant du palier de délai.",
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du palier de délai."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "label": "Dernière minute",
                "isActive": true
              },
              "schema": {
                "type": "object",
                "properties": {
                  "label": {
                    "description": "Libellé du palier.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "minLeadDays": {
                    "description": "Délai minimal, en jours, entre la date du devis et le jour du départ, inclus.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 3650
                  },
                  "maxLeadDays": {
                    "description": "Délai maximal, en jours, inclus ; null : sans borne haute.",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 3650
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "priceFactors": {
                    "description": "Remplacé en entier : une entrée par saison de l’organisation.",
                    "minItems": 1,
                    "maxItems": 10,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "seasonSlug": {
                          "description": "Saison (`GET /seasons`).",
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 50,
                          "pattern": "^[a-z0-9_]+$"
                        },
                        "priceFactor": {
                          "description": "Coefficient du prix journalier dans cette saison : 0,95 = −5 %, 1,1 = +10 %. Au plus 2 décimales.",
                          "type": "number",
                          "minimum": 0.1,
                          "maximum": 5
                        }
                      },
                      "required": [
                        "seasonSlug",
                        "priceFactor"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "isActive": {
                    "description": "false : palier conservé mais non appliqué.",
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "label": "Dernière minute",
                "isActive": true
              },
              "schema": {
                "type": "object",
                "properties": {
                  "label": {
                    "description": "Libellé du palier.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "minLeadDays": {
                    "description": "Délai minimal, en jours, entre la date du devis et le jour du départ, inclus.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 3650
                  },
                  "maxLeadDays": {
                    "description": "Délai maximal, en jours, inclus ; null : sans borne haute.",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 3650
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "priceFactors": {
                    "description": "Remplacé en entier : une entrée par saison de l’organisation.",
                    "minItems": 1,
                    "maxItems": 10,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "seasonSlug": {
                          "description": "Saison (`GET /seasons`).",
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 50,
                          "pattern": "^[a-z0-9_]+$"
                        },
                        "priceFactor": {
                          "description": "Coefficient du prix journalier dans cette saison : 0,95 = −5 %, 1,1 = +10 %. Au plus 2 décimales.",
                          "type": "number",
                          "minimum": 0.1,
                          "maximum": 5
                        }
                      },
                      "required": [
                        "seasonSlug",
                        "priceFactor"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "isActive": {
                    "description": "false : palier conservé mais non appliqué.",
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier un palier de délai de réservation",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/LeadTimeTier"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RANGE_OVERLAP`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RangeOverlapProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/update-lead-time-tier",
          "metadata": {
            "title": "Modifier un palier de délai de réservation",
            "sidebarTitle": "Modifier un palier de délai de réservation"
          }
        }
      }
    },
    "/locations": {
      "get": {
        "operationId": "listLocations",
        "summary": "Lister les lieux",
        "description": "**Accès** : `catalog.read`\n\nListe les lieux de départ et de retour du loueur (agence, aéroport, gare…). Tri : `displayOrder`, `name`, puis `id`. Un lieu se reprend par `{ locationId }` dans `pickupLocation` ou `returnLocation` d’une location ; désactivé, il y est refusé (422 `REFERENCE_INACTIVE`).\n\n**Filtres** : `isActive` (`true` ou `false`, omis = tous) ; `type`, plusieurs valeurs séparées par des virgules.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "isActive",
            "schema": {
              "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous."
          },
          {
            "in": "query",
            "name": "type",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : AGENCY, AIRPORT, STATION, HOTEL, OTHER."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les lieux",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Location"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/list-locations",
          "metadata": {
            "title": "Lister les lieux",
            "sidebarTitle": "Lister les lieux"
          }
        }
      }
    },
    "/maintenance-operations": {
      "get": {
        "operationId": "listMaintenanceOperations",
        "summary": "Lister le catalogue des opérations d’entretien",
        "description": "**Accès** : `maintenance.read`\n\nListe le catalogue des opérations d’entretien de l’organisation, désactivées comprises. Tri : `displayOrder`, `name`, puis `operationCode`. Un entretien ne peut porter que les codes à `isRecordable: true`.",
        "tags": [
          "Entretien"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "maintenance.read"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Lister le catalogue des opérations d’entretien",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MaintenanceOperation"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/entretien/list-maintenance-operations",
          "metadata": {
            "title": "Lister le catalogue des opérations d’entretien",
            "sidebarTitle": "Lister le catalogue des opérations d’entretien"
          }
        }
      }
    },
    "/maintenance-records": {
      "get": {
        "operationId": "listMaintenanceRecords",
        "summary": "Lister les entretiens",
        "description": "**Accès** : `maintenance.read`\n\nListe les entretiens de l’organisation, contrôles techniques exclus. Tri : `interventionDate` décroissant, puis `id`.\n\n- `from` et `to` bornent le jour de l’intervention, inclus ; `to` antérieur à `from` donne une liste vide, un `vehicleId` inconnu aussi.\n- `invoice` est une URL signée valable une heure, `null` sans facture. Une URL impossible à signer fait échouer la requête : 503 `SERVICE_UNAVAILABLE`, à rejouer.",
        "tags": [
          "Entretien"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "maintenance.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "vehicleId",
            "schema": {
              "description": "Entretiens de ce seul véhicule.",
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "description": "Entretiens de ce seul véhicule."
          },
          {
            "in": "query",
            "name": "from",
            "schema": {
              "description": "Premier jour d’intervention retenu, inclus (`YYYY-MM-DD`).",
              "examples": [
                "2026-11-10"
              ],
              "type": "string",
              "format": "date"
            },
            "description": "Premier jour d’intervention retenu, inclus (`YYYY-MM-DD`)."
          },
          {
            "in": "query",
            "name": "to",
            "schema": {
              "description": "Dernier jour d’intervention retenu, inclus (`YYYY-MM-DD`).",
              "examples": [
                "2026-11-10"
              ],
              "type": "string",
              "format": "date"
            },
            "description": "Dernier jour d’intervention retenu, inclus (`YYYY-MM-DD`)."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les entretiens",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MaintenanceRecord"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/entretien/list-maintenance-records",
          "metadata": {
            "title": "Lister les entretiens",
            "sidebarTitle": "Lister les entretiens"
          }
        }
      },
      "post": {
        "operationId": "createMaintenanceRecord",
        "summary": "Enregistrer un entretien",
        "description": "**Accès** : `maintenance.write` · Fonctionnalité d’abonnement : `maintenance.manage` ([plans](https://docs.lexio.rent/authentification))\n\nEnregistre une intervention sur un véhicule.\n\n- Le compteur du véhicule est relevé à `odometerKm` s’il est plus élevé, dans la même transaction ; il ne baisse jamais (pour le corriger : [`PATCH /vehicles/{vehicleId}`](https://docs.lexio.rent/api-reference/flotte/update-vehicle)).\n- Une opération désactivée (`isEnabled: false`) est acceptée, un véhicule archivé aussi.\n- L’échéance de chaque opération repart de sa dernière intervention : un entretien à jour lève `MAINTENANCE_OVERDUE` du véhicule.\n\n**Refus** : `vehicleId` inconnu, code absent du catalogue ou code de contrôle technique → 422 `REFERENCE_NOT_FOUND` ; opération non applicable à la famille ou à l’énergie du véhicule → 400 `not_applicable`.",
        "tags": [
          "Entretien"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "maintenance.write"
        ],
        "x-required-feature": "maintenance.manage",
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "vehicleId": "8d2f4c1e-6a3b-4f7d-9e2c-1b5a7c9d3e4f",
                "operationCodes": [
                  "OIL_CHANGE",
                  "OIL_FILTER"
                ],
                "interventionDate": "2026-11-05",
                "odometerKm": 18450,
                "costHT": 129.9,
                "supplier": "Garage du Port, Nice",
                "notes": null
              },
              "schema": {
                "type": "object",
                "properties": {
                  "vehicleId": {
                    "examples": [
                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                    ],
                    "description": "Véhicule entretenu (`GET /vehicles/{vehicleId}`).",
                    "type": "string",
                    "format": "uuid"
                  },
                  "operationCodes": {
                    "description": "Codes de `GET /maintenance-operations` ; le premier est l’opération principale.",
                    "minItems": 1,
                    "maxItems": 30,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    }
                  },
                  "interventionDate": {
                    "examples": [
                      "2026-11-10"
                    ],
                    "description": "Jour de l’intervention, `YYYY-MM-DD`, fuseau de l’agence ; jamais dans le futur.",
                    "type": "string",
                    "format": "date"
                  },
                  "odometerKm": {
                    "description": "Kilométrage au compteur lors de l’intervention ; relève le compteur du véhicule s’il est plus élevé, ne le baisse jamais.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10000000
                  },
                  "costHT": {
                    "description": "Coût HT de l’intervention ; 0 si non renseigné.",
                    "default": 0,
                    "type": "number"
                  },
                  "supplier": {
                    "description": "Garage ou prestataire ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "notes": {
                    "description": "Notes libres ; null si absentes.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 1000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "vehicleId",
                  "operationCodes",
                  "interventionDate",
                  "odometerKm"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Enregistrer un entretien",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MaintenanceRecord"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/entretien/create-maintenance-record",
          "metadata": {
            "title": "Enregistrer un entretien",
            "sidebarTitle": "Enregistrer un entretien"
          }
        }
      }
    },
    "/maintenance-records/{maintenanceRecordId}": {
      "delete": {
        "operationId": "deleteMaintenanceRecord",
        "summary": "Supprimer un entretien",
        "description": "**Accès** : `maintenance.write` · Fonctionnalité d’abonnement : `maintenance.manage` ([plans](https://docs.lexio.rent/authentification))\n\nSupprime un entretien ; 204 sans corps. Le blocage de planning qui lui est lié est supprimé avec lui : le véhicule redevient disponible sur ces dates. Les tâches de contrôle liées sont détachées, la facture est effacée ; le compteur du véhicule ne change pas.\n\nUn contrôle technique répond 404 : il se supprime dans Lexio.",
        "tags": [
          "Entretien"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "maintenance.write"
        ],
        "x-required-feature": "maintenance.manage",
        "parameters": [
          {
            "in": "path",
            "name": "maintenanceRecordId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "description": "Identifiant de l’entretien.",
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de l’entretien."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/entretien/delete-maintenance-record",
          "metadata": {
            "title": "Supprimer un entretien",
            "sidebarTitle": "Supprimer un entretien"
          }
        }
      },
      "get": {
        "operationId": "getMaintenanceRecord",
        "summary": "Lire un entretien",
        "description": "**Accès** : `maintenance.read`\n\nRenvoie un entretien, dans la même représentation que la liste. `invoice` est une URL signée valable une heure, `null` sans facture ; une signature impossible répond 503 `SERVICE_UNAVAILABLE`. Un contrôle technique répond 404.",
        "tags": [
          "Entretien"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "maintenance.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "maintenanceRecordId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "description": "Identifiant de l’entretien.",
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de l’entretien."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire un entretien",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MaintenanceRecord"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/entretien/get-maintenance-record",
          "metadata": {
            "title": "Lire un entretien",
            "sidebarTitle": "Lire un entretien"
          }
        }
      },
      "patch": {
        "operationId": "updateMaintenanceRecord",
        "summary": "Corriger un entretien",
        "description": "**Accès** : `maintenance.write` · Fonctionnalité d’abonnement : `maintenance.manage` ([plans](https://docs.lexio.rent/authentification))\n\nCorrige un entretien : seuls les champs envoyés changent et l’identifiant reste le même. Mêmes règles qu’à la [création](https://docs.lexio.rent/api-reference/entretien/create-maintenance-record) ; le véhicule ne change pas (`vehicleId` → 400 `unknown_field`), `{}` → 400 `empty_patch`.\n\nUn nouvel `odometerKm` relève le compteur du véhicule s’il est plus élevé, jamais à la baisse. Un contrôle technique répond 404.",
        "tags": [
          "Entretien"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "maintenance.write"
        ],
        "x-required-feature": "maintenance.manage",
        "parameters": [
          {
            "in": "path",
            "name": "maintenanceRecordId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "description": "Identifiant de l’entretien.",
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de l’entretien."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "costHT": 142.5,
                "notes": "Facture corrigée"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "operationCodes": {
                    "description": "Codes de `GET /maintenance-operations` ; le premier est l’opération principale.",
                    "minItems": 1,
                    "maxItems": 30,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    }
                  },
                  "interventionDate": {
                    "description": "Jour de l’intervention, `YYYY-MM-DD`, fuseau de l’agence ; jamais dans le futur.",
                    "examples": [
                      "2026-11-10"
                    ],
                    "type": "string",
                    "format": "date"
                  },
                  "odometerKm": {
                    "description": "Kilométrage au compteur lors de l’intervention ; relève le compteur du véhicule s’il est plus élevé, ne le baisse jamais.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10000000
                  },
                  "costHT": {
                    "description": "Coût HT de l’intervention ; 0 si non renseigné.",
                    "type": "number"
                  },
                  "supplier": {
                    "description": "Garage ou prestataire ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "notes": {
                    "description": "Notes libres ; null si absentes.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 1000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "costHT": 142.5,
                "notes": "Facture corrigée"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "operationCodes": {
                    "description": "Codes de `GET /maintenance-operations` ; le premier est l’opération principale.",
                    "minItems": 1,
                    "maxItems": 30,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    }
                  },
                  "interventionDate": {
                    "description": "Jour de l’intervention, `YYYY-MM-DD`, fuseau de l’agence ; jamais dans le futur.",
                    "examples": [
                      "2026-11-10"
                    ],
                    "type": "string",
                    "format": "date"
                  },
                  "odometerKm": {
                    "description": "Kilométrage au compteur lors de l’intervention ; relève le compteur du véhicule s’il est plus élevé, ne le baisse jamais.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10000000
                  },
                  "costHT": {
                    "description": "Coût HT de l’intervention ; 0 si non renseigné.",
                    "type": "number"
                  },
                  "supplier": {
                    "description": "Garage ou prestataire ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "notes": {
                    "description": "Notes libres ; null si absentes.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 1000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Corriger un entretien",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MaintenanceRecord"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/entretien/update-maintenance-record",
          "metadata": {
            "title": "Corriger un entretien",
            "sidebarTitle": "Corriger un entretien"
          }
        }
      }
    },
    "/mileage-packages": {
      "get": {
        "operationId": "listMileagePackages",
        "summary": "Lister les forfaits kilométriques",
        "description": "**Accès** : `catalog.read` · Fonctionnalité d’abonnement : `mileage.basic` ([plans](https://docs.lexio.rent/authentification))\n\nListe les forfaits kilométriques de l’organisation. Tri : `displayOrder`, `name`, puis `id`. `isActive` filtre (`true` ou `false`, omis : tous).",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "x-required-feature": "mileage.basic",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "isActive",
            "schema": {
              "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les forfaits kilométriques",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MileagePackage"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/list-mileage-packages",
          "metadata": {
            "title": "Lister les forfaits kilométriques",
            "sidebarTitle": "Lister les forfaits kilométriques"
          }
        }
      },
      "post": {
        "operationId": "createMileagePackage",
        "summary": "Créer un forfait kilométrique",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `mileage.basic` ([plans](https://docs.lexio.rent/authentification))\n\nCrée un forfait kilométrique.\n\n- `tiers` : kilomètres inclus par jour selon la durée facturée ; le palier du jour 1 est obligatoire, un seul palier par jour ; `dailyKm: null` : kilométrage illimité.\n- **Défaut** : `isDefault: true` en fait le forfait par défaut de l’organisation et retire ce statut à l’ancien dans la même transaction ; un défaut est toujours actif (`isDefault: true` avec `isActive: false` → 400 `mutually_exclusive`).",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "mileage.basic",
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "name": "200 km/jour",
                "price": {
                  "mode": "FIXED_PER_DAY",
                  "amountHT": 0
                },
                "tiers": [
                  {
                    "fromDay": 1,
                    "dailyKm": 200
                  },
                  {
                    "fromDay": 30,
                    "dailyKm": null
                  }
                ],
                "isDefault": true
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "price": {
                    "description": "Prix HT du forfait pour le client.",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Prix fixe par jour facturé.",
                            "type": "string",
                            "const": "FIXED_PER_DAY"
                          },
                          "amountHT": {
                            "description": "Prix HT par jour facturé ; 0 : offert.",
                            "type": "number"
                          }
                        },
                        "required": [
                          "mode",
                          "amountHT"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Pourcentage du prix de location du véhicule.",
                            "type": "string",
                            "const": "PERCENT_OF_RENTAL"
                          },
                          "percent": {
                            "description": "Pourcentage du prix HT de location du véhicule, hors options. Au plus 2 décimales.",
                            "type": "number",
                            "minimum": 0.01,
                            "maximum": 100
                          }
                        },
                        "required": [
                          "mode",
                          "percent"
                        ],
                        "additionalProperties": false
                      }
                    ],
                    "type": "object"
                  },
                  "tiers": {
                    "description": "Kilomètres inclus par jour selon la durée : s’applique le palier de plus grand `fromDay` atteint par les jours facturés. Le palier du jour 1 est obligatoire, un palier par jour. Remplacés en entier.",
                    "minItems": 1,
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "fromDay": {
                          "description": "Le palier vaut pour une location d’au moins ce nombre de jours facturés.",
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 365
                        },
                        "dailyKm": {
                          "description": "Kilomètres inclus par jour facturé ; null : kilométrage illimité.",
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 99999
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "fromDay",
                        "dailyKm"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Forfait retenu quand une offre omet `mileagePackageId`. Au plus un par organisation : en désigner un autre retire ce statut à l’ancien ; un forfait par défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : forfait retiré de la vente. Désactiver le forfait par défaut exige `isDefault: false`.",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  }
                },
                "required": [
                  "name",
                  "price",
                  "tiers"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer un forfait kilométrique",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MileagePackage"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/create-mileage-package",
          "metadata": {
            "title": "Créer un forfait kilométrique",
            "sidebarTitle": "Créer un forfait kilométrique"
          }
        }
      }
    },
    "/mileage-packages/{mileagePackageId}": {
      "delete": {
        "operationId": "deleteMileagePackage",
        "summary": "Supprimer un forfait kilométrique",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `mileage.basic` ([plans](https://docs.lexio.rent/authentification))\n\nSupprime un forfait kilométrique ; 204 sans corps.\n\n**Refus**\n- forfait par défaut → 409 `DEFAULT_ITEM_REQUIRED` : désignez d’abord un autre défaut, ou retirez-lui ce statut (`isDefault: false`) ;\n- forfait porté par une location ou un devis → 409 `RESOURCE_IN_USE` (`RENTALS`, `SALES_QUOTES`) : désactivez-le plutôt.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "mileage.basic",
        "parameters": [
          {
            "in": "path",
            "name": "mileagePackageId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du forfait kilométrique."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`DEFAULT_ITEM_REQUIRED`, `IDEMPOTENCY_IN_FLIGHT`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/DefaultItemRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/delete-mileage-package",
          "metadata": {
            "title": "Supprimer un forfait kilométrique",
            "sidebarTitle": "Supprimer un forfait kilométrique"
          }
        }
      },
      "get": {
        "operationId": "getMileagePackage",
        "summary": "Lire un forfait kilométrique",
        "description": "**Accès** : `catalog.read` · Fonctionnalité d’abonnement : `mileage.basic` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie un forfait kilométrique.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "x-required-feature": "mileage.basic",
        "parameters": [
          {
            "in": "path",
            "name": "mileagePackageId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du forfait kilométrique."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire un forfait kilométrique",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MileagePackage"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/get-mileage-package",
          "metadata": {
            "title": "Lire un forfait kilométrique",
            "sidebarTitle": "Lire un forfait kilométrique"
          }
        }
      },
      "patch": {
        "operationId": "updateMileagePackage",
        "summary": "Modifier un forfait kilométrique",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `mileage.basic` ([plans](https://docs.lexio.rent/authentification))\n\nModifie un forfait kilométrique : seuls les champs envoyés changent ; `price` et `tiers` sont remplacés en entier. `isDefault` suit les règles de la [création](https://docs.lexio.rent/api-reference/catalogue/create-mileage-package).\n\n**Refus** : désactiver le forfait par défaut sans envoyer `isDefault: false` → 409 `DEFAULT_ITEM_REQUIRED`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "mileage.basic",
        "parameters": [
          {
            "in": "path",
            "name": "mileagePackageId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du forfait kilométrique."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "price": {
                  "mode": "PERCENT_OF_RENTAL",
                  "percent": 10
                },
                "tiers": [
                  {
                    "fromDay": 1,
                    "dailyKm": 250
                  }
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "price": {
                    "description": "Prix HT du forfait pour le client, remplacé en entier.",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Prix fixe par jour facturé.",
                            "type": "string",
                            "const": "FIXED_PER_DAY"
                          },
                          "amountHT": {
                            "description": "Prix HT par jour facturé ; 0 : offert.",
                            "type": "number"
                          }
                        },
                        "required": [
                          "mode",
                          "amountHT"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Pourcentage du prix de location du véhicule.",
                            "type": "string",
                            "const": "PERCENT_OF_RENTAL"
                          },
                          "percent": {
                            "description": "Pourcentage du prix HT de location du véhicule, hors options. Au plus 2 décimales.",
                            "type": "number",
                            "minimum": 0.01,
                            "maximum": 100
                          }
                        },
                        "required": [
                          "mode",
                          "percent"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "tiers": {
                    "description": "Kilomètres inclus par jour selon la durée : s’applique le palier de plus grand `fromDay` atteint par les jours facturés. Le palier du jour 1 est obligatoire, un palier par jour. Remplacés en entier.",
                    "minItems": 1,
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "fromDay": {
                          "description": "Le palier vaut pour une location d’au moins ce nombre de jours facturés.",
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 365
                        },
                        "dailyKm": {
                          "description": "Kilomètres inclus par jour facturé ; null : kilométrage illimité.",
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 99999
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "fromDay",
                        "dailyKm"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Forfait retenu quand une offre omet `mileagePackageId`. Au plus un par organisation : en désigner un autre retire ce statut à l’ancien ; un forfait par défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : forfait retiré de la vente. Désactiver le forfait par défaut exige `isDefault: false`.",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "price": {
                  "mode": "PERCENT_OF_RENTAL",
                  "percent": 10
                },
                "tiers": [
                  {
                    "fromDay": 1,
                    "dailyKm": 250
                  }
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "price": {
                    "description": "Prix HT du forfait pour le client, remplacé en entier.",
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Prix fixe par jour facturé.",
                            "type": "string",
                            "const": "FIXED_PER_DAY"
                          },
                          "amountHT": {
                            "description": "Prix HT par jour facturé ; 0 : offert.",
                            "type": "number"
                          }
                        },
                        "required": [
                          "mode",
                          "amountHT"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "mode": {
                            "description": "Pourcentage du prix de location du véhicule.",
                            "type": "string",
                            "const": "PERCENT_OF_RENTAL"
                          },
                          "percent": {
                            "description": "Pourcentage du prix HT de location du véhicule, hors options. Au plus 2 décimales.",
                            "type": "number",
                            "minimum": 0.01,
                            "maximum": 100
                          }
                        },
                        "required": [
                          "mode",
                          "percent"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "tiers": {
                    "description": "Kilomètres inclus par jour selon la durée : s’applique le palier de plus grand `fromDay` atteint par les jours facturés. Le palier du jour 1 est obligatoire, un palier par jour. Remplacés en entier.",
                    "minItems": 1,
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "fromDay": {
                          "description": "Le palier vaut pour une location d’au moins ce nombre de jours facturés.",
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 365
                        },
                        "dailyKm": {
                          "description": "Kilomètres inclus par jour facturé ; null : kilométrage illimité.",
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 99999
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "fromDay",
                        "dailyKm"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isDefault": {
                    "description": "Forfait retenu quand une offre omet `mileagePackageId`. Au plus un par organisation : en désigner un autre retire ce statut à l’ancien ; un forfait par défaut est toujours actif.",
                    "type": "boolean"
                  },
                  "isActive": {
                    "description": "false : forfait retiré de la vente. Désactiver le forfait par défaut exige `isDefault: false`.",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier un forfait kilométrique",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MileagePackage"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`DEFAULT_ITEM_REQUIRED`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/DefaultItemRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/update-mileage-package",
          "metadata": {
            "title": "Modifier un forfait kilométrique",
            "sidebarTitle": "Modifier un forfait kilométrique"
          }
        }
      }
    },
    "/options": {
      "get": {
        "operationId": "listOptions",
        "summary": "Lister les options",
        "description": "**Accès** : `catalog.read` · Fonctionnalité d’abonnement : `pricing.options` ([plans](https://docs.lexio.rent/authentification))\n\nListe les options de l’organisation (siège bébé, conducteur additionnel…). Tri : `displayOrder`, `name`, puis `id`. `isActive` filtre (`true` ou `false`, omis : tous).",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "x-required-feature": "pricing.options",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "isActive",
            "schema": {
              "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les options",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Option"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/list-options",
          "metadata": {
            "title": "Lister les options",
            "sidebarTitle": "Lister les options"
          }
        }
      },
      "post": {
        "operationId": "createOption",
        "summary": "Créer une option",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `pricing.options` ([plans](https://docs.lexio.rent/authentification))\n\nCrée une option.\n\n**Règles**\n- `price.maxAmountHT` plafonne le prix par exemplaire sur la location : interdit avec `unit: RENTAL`, jamais inférieur à `amountHT`, `null` (pas 0) pour ne pas plafonner.\n- `maxQuantity` ne se fixe que sur une option `STANDARD` (sinon 400 `not_applicable`).\n- `youngDriverAgeThreshold` est requis pour une option `YOUNG_DRIVER`, refusé pour les autres.\n- Omis : `maxQuantity` et `stockCount` valent 1, `availableMonths` [] (toute l’année).\n\n**Refus** : une seconde option `ADDITIONAL_DRIVER` ou `YOUNG_DRIVER` → 409 `ALREADY_EXISTS` (`field: kind`, `conflictingId`).",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "pricing.options",
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "name": "Siège enfant",
                "kind": "STANDARD",
                "group": "ACCESSORIES",
                "price": {
                  "unit": "DAY",
                  "amountHT": 4,
                  "maxAmountHT": 40
                },
                "maxQuantity": 2,
                "stockCount": 4
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "kind": {
                    "description": "`STANDARD` : option vendue à la quantité. `ADDITIONAL_DRIVER` : conducteur additionnel, réservable par une clé interne seulement. `YOUNG_DRIVER` : supplément jeune conducteur, appliqué par Lexio d’après l’âge des conducteurs, jamais demandé directement. Une seule option de chacun de ces deux derniers types par organisation.",
                    "type": "string",
                    "enum": [
                      "STANDARD",
                      "ADDITIONAL_DRIVER",
                      "YOUNG_DRIVER"
                    ]
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "group": {
                    "description": "Rubrique d’affichage de l’option.",
                    "type": "string",
                    "enum": [
                      "COMFORT",
                      "PROTECTION",
                      "ACCESSORIES",
                      "DELIVERY",
                      "SERVICES",
                      "OTHER"
                    ]
                  },
                  "maxQuantity": {
                    "description": "Exemplaires au plus par location, pour une option `STANDARD`. Une option conducteur vaut toujours 1 ici et ne le fixe pas (400 `not_applicable`) : le conducteur additionnel se réserve jusqu’à 4 fois, borne lue dans `choices.options[].maxBookableQuantity` du devis.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100
                  },
                  "stockCount": {
                    "description": "Exemplaires louables en même temps, toutes locations confondues ; ignoré pour une option conducteur. Le reste disponible sur une période se lit dans `maxBookableQuantity` du devis.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1000
                  },
                  "availableMonths": {
                    "description": "Mois où l’option se vend (1 = janvier), chacun une fois : elle est proposée si la location touche l’un d’eux ; [] : toute l’année.",
                    "maxItems": 12,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 12
                    }
                  },
                  "youngDriverAgeThreshold": {
                    "description": "Âge au départ en dessous duquel le supplément s’applique à un conducteur. Requis pour une option `YOUNG_DRIVER` (sinon 400 `required`) ; null pour les autres types, qui le refusent (400 `not_applicable`).",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 16,
                        "maximum": 99
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isActive": {
                    "description": "false : option retirée de la vente.",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  },
                  "price": {
                    "description": "Prix HT de l’option et son plafond.",
                    "type": "object",
                    "properties": {
                      "unit": {
                        "description": "`DAY` : par jour facturé ; `HOUR` : par heure de location ; `WEEK` : par semaine entamée ; `RENTAL` : une fois par location.",
                        "type": "string",
                        "enum": [
                          "DAY",
                          "HOUR",
                          "WEEK",
                          "RENTAL"
                        ]
                      },
                      "amountHT": {
                        "description": "Prix HT d’une unité de `unit`, pour un exemplaire.",
                        "type": "number"
                      },
                      "maxAmountHT": {
                        "description": "Plafond HT par exemplaire sur toute la location ; null : sans plafond. Interdit avec `RENTAL` (400 `not_applicable`), au moins égal à `amountHT` (400 `too_small`) ; pas de plafond s’envoie null, jamais 0.",
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "unit",
                      "amountHT"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name",
                  "kind",
                  "group",
                  "price"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer une option",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Option"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/create-option",
          "metadata": {
            "title": "Créer une option",
            "sidebarTitle": "Créer une option"
          }
        }
      }
    },
    "/options/{optionId}": {
      "delete": {
        "operationId": "deleteOption",
        "summary": "Supprimer une option",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `pricing.options` ([plans](https://docs.lexio.rent/authentification))\n\nSupprime une option jamais vendue ; 204 sans corps.\n\n**Refus** : option vendue au moins une fois → 409 `RESOURCE_IN_USE` (`RENTALS`) : désactivez-la plutôt (`isActive: false`).",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "pricing.options",
        "parameters": [
          {
            "in": "path",
            "name": "optionId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de l’option."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/delete-option",
          "metadata": {
            "title": "Supprimer une option",
            "sidebarTitle": "Supprimer une option"
          }
        }
      },
      "get": {
        "operationId": "getOption",
        "summary": "Lire une option",
        "description": "**Accès** : `catalog.read` · Fonctionnalité d’abonnement : `pricing.options` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie une option. `imageUrls` porte une URL signée valable une heure.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.read"
        ],
        "x-required-feature": "pricing.options",
        "parameters": [
          {
            "in": "path",
            "name": "optionId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de l’option."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire une option",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Option"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/get-option",
          "metadata": {
            "title": "Lire une option",
            "sidebarTitle": "Lire une option"
          }
        }
      },
      "patch": {
        "operationId": "updateOption",
        "summary": "Modifier une option",
        "description": "**Accès** : `catalog.write` · Fonctionnalité d’abonnement : `pricing.options` ([plans](https://docs.lexio.rent/authentification))\n\nModifie une option : seuls les champs envoyés changent ; `price` est fusionné champ par champ et ses règles portent sur le prix obtenu (voir la [création](https://docs.lexio.rent/api-reference/catalogue/create-option)). Changer `kind` sans envoyer `maxQuantity` le remet à 1.\n\n**Refus** : passer à `ADDITIONAL_DRIVER` ou `YOUNG_DRIVER` alors qu’une telle option existe → 409 `ALREADY_EXISTS`.",
        "tags": [
          "Catalogue"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "catalog.write"
        ],
        "x-required-feature": "pricing.options",
        "parameters": [
          {
            "in": "path",
            "name": "optionId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de l’option."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "price": {
                  "amountHT": 5
                },
                "availableMonths": [
                  11,
                  12,
                  1,
                  2,
                  3
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "kind": {
                    "description": "`STANDARD` : option vendue à la quantité. `ADDITIONAL_DRIVER` : conducteur additionnel, réservable par une clé interne seulement. `YOUNG_DRIVER` : supplément jeune conducteur, appliqué par Lexio d’après l’âge des conducteurs, jamais demandé directement. Une seule option de chacun de ces deux derniers types par organisation. Changer `kind` sans envoyer `maxQuantity` le remet à 1.",
                    "type": "string",
                    "enum": [
                      "STANDARD",
                      "ADDITIONAL_DRIVER",
                      "YOUNG_DRIVER"
                    ]
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "group": {
                    "description": "Rubrique d’affichage de l’option.",
                    "type": "string",
                    "enum": [
                      "COMFORT",
                      "PROTECTION",
                      "ACCESSORIES",
                      "DELIVERY",
                      "SERVICES",
                      "OTHER"
                    ]
                  },
                  "maxQuantity": {
                    "description": "Exemplaires au plus par location, pour une option `STANDARD`. Une option conducteur vaut toujours 1 ici et ne le fixe pas (400 `not_applicable`) : le conducteur additionnel se réserve jusqu’à 4 fois, borne lue dans `choices.options[].maxBookableQuantity` du devis.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100
                  },
                  "stockCount": {
                    "description": "Exemplaires louables en même temps, toutes locations confondues ; ignoré pour une option conducteur. Le reste disponible sur une période se lit dans `maxBookableQuantity` du devis.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1000
                  },
                  "availableMonths": {
                    "description": "Mois où l’option se vend (1 = janvier), chacun une fois : elle est proposée si la location touche l’un d’eux ; [] : toute l’année.",
                    "maxItems": 12,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 12
                    }
                  },
                  "youngDriverAgeThreshold": {
                    "description": "Âge au départ en dessous duquel le supplément s’applique à un conducteur. Requis pour une option `YOUNG_DRIVER` (sinon 400 `required`) ; null pour les autres types, qui le refusent (400 `not_applicable`).",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 16,
                        "maximum": 99
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isActive": {
                    "description": "false : option retirée de la vente.",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  },
                  "price": {
                    "description": "Fusionné champ par champ avec le prix enregistré.",
                    "type": "object",
                    "properties": {
                      "unit": {
                        "description": "`DAY` : par jour facturé ; `HOUR` : par heure de location ; `WEEK` : par semaine entamée ; `RENTAL` : une fois par location.",
                        "type": "string",
                        "enum": [
                          "DAY",
                          "HOUR",
                          "WEEK",
                          "RENTAL"
                        ]
                      },
                      "amountHT": {
                        "description": "Prix HT d’une unité de `unit`, pour un exemplaire.",
                        "type": "number"
                      },
                      "maxAmountHT": {
                        "description": "Plafond HT par exemplaire sur toute la location ; null : sans plafond. Interdit avec `RENTAL` (400 `not_applicable`), au moins égal à `amountHT` (400 `too_small`) ; pas de plafond s’envoie null, jamais 0.",
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "price": {
                  "amountHT": 5
                },
                "availableMonths": [
                  11,
                  12,
                  1,
                  2,
                  3
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom affiché au client.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "kind": {
                    "description": "`STANDARD` : option vendue à la quantité. `ADDITIONAL_DRIVER` : conducteur additionnel, réservable par une clé interne seulement. `YOUNG_DRIVER` : supplément jeune conducteur, appliqué par Lexio d’après l’âge des conducteurs, jamais demandé directement. Une seule option de chacun de ces deux derniers types par organisation. Changer `kind` sans envoyer `maxQuantity` le remet à 1.",
                    "type": "string",
                    "enum": [
                      "STANDARD",
                      "ADDITIONAL_DRIVER",
                      "YOUNG_DRIVER"
                    ]
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "group": {
                    "description": "Rubrique d’affichage de l’option.",
                    "type": "string",
                    "enum": [
                      "COMFORT",
                      "PROTECTION",
                      "ACCESSORIES",
                      "DELIVERY",
                      "SERVICES",
                      "OTHER"
                    ]
                  },
                  "maxQuantity": {
                    "description": "Exemplaires au plus par location, pour une option `STANDARD`. Une option conducteur vaut toujours 1 ici et ne le fixe pas (400 `not_applicable`) : le conducteur additionnel se réserve jusqu’à 4 fois, borne lue dans `choices.options[].maxBookableQuantity` du devis.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100
                  },
                  "stockCount": {
                    "description": "Exemplaires louables en même temps, toutes locations confondues ; ignoré pour une option conducteur. Le reste disponible sur une période se lit dans `maxBookableQuantity` du devis.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1000
                  },
                  "availableMonths": {
                    "description": "Mois où l’option se vend (1 = janvier), chacun une fois : elle est proposée si la location touche l’un d’eux ; [] : toute l’année.",
                    "maxItems": 12,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 12
                    }
                  },
                  "youngDriverAgeThreshold": {
                    "description": "Âge au départ en dessous duquel le supplément s’applique à un conducteur. Requis pour une option `YOUNG_DRIVER` (sinon 400 `required`) ; null pour les autres types, qui le refusent (400 `not_applicable`).",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 16,
                        "maximum": 99
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isActive": {
                    "description": "false : option retirée de la vente.",
                    "type": "boolean"
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  },
                  "price": {
                    "description": "Fusionné champ par champ avec le prix enregistré.",
                    "type": "object",
                    "properties": {
                      "unit": {
                        "description": "`DAY` : par jour facturé ; `HOUR` : par heure de location ; `WEEK` : par semaine entamée ; `RENTAL` : une fois par location.",
                        "type": "string",
                        "enum": [
                          "DAY",
                          "HOUR",
                          "WEEK",
                          "RENTAL"
                        ]
                      },
                      "amountHT": {
                        "description": "Prix HT d’une unité de `unit`, pour un exemplaire.",
                        "type": "number"
                      },
                      "maxAmountHT": {
                        "description": "Plafond HT par exemplaire sur toute la location ; null : sans plafond. Interdit avec `RENTAL` (400 `not_applicable`), au moins égal à `amountHT` (400 `too_small`) ; pas de plafond s’envoie null, jamais 0.",
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier une option",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Option"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/catalogue/update-option",
          "metadata": {
            "title": "Modifier une option",
            "sidebarTitle": "Modifier une option"
          }
        }
      }
    },
    "/organization": {
      "get": {
        "operationId": "getOrganization",
        "summary": "Lire l’organisation et la clé",
        "description": "**Accès** : toute clé valide\n\nRenvoie les réglages de l’agence qui gouvernent les dates et les prix, et la clé qui appelle.\n\nÀ lire une fois au démarrage : devise et nombre de décimales des montants ([Montants et TVA](https://docs.lexio.rent/montants-et-tva)), fuseau des heures de location, TVA, horaires et règles de réservation imposés aux clés partenaires.",
        "tags": [
          "Organisation"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Lire l’organisation et la clé",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Organization"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/organisation/get-organization",
          "metadata": {
            "title": "Lire l’organisation et la clé",
            "sidebarTitle": "Lire l’organisation et la clé"
          }
        }
      }
    },
    "/pricing-settings": {
      "get": {
        "operationId": "getPricingSettings",
        "summary": "Lire les réglages tarifaires",
        "description": "**Accès** : `pricing.read`\n\nRenvoie l’activation de chaque règle de prix et ses valeurs, défauts compris. Lecture seule : ces réglages se modifient dans Lexio.\n\n**Application**\n- Une règle ne s’applique que si `isEnabled` et `isAvailable` valent `true`. `isAvailable` suit le plan : `pricing.seasons` pour `seasonalPricing` et `weekendSurcharge`, `pricing.discounts` pour `durationDiscounts` et `shortDurationSurcharge`, `pricing.leadtime` pour `leadTimePricing`.\n- Week-end : la période touche un samedi ou un dimanche (fuseau de l’agence) et la durée facturée est inférieure à `exemptFromRentalDays`.\n- Courte durée : s’applique le palier actif de plus petit `maxRentalDays` supérieur ou égal à la durée facturée ; sans palier actif, Lexio applique un ancien réglage non publié ici.\n- Seuls les devis futurs suivent un changement de réglage.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Lire les réglages tarifaires",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/PricingSettings"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/get-pricing-settings",
          "metadata": {
            "title": "Lire les réglages tarifaires",
            "sidebarTitle": "Lire les réglages tarifaires"
          }
        }
      }
    },
    "/quotes": {
      "post": {
        "operationId": "createQuote",
        "summary": "Créer un devis",
        "description": "**Accès** : `quotes.write`\n\nFige 24 h (`expiresAt`) le prix d’un véhicule sur une période, sans le réserver : la disponibilité est revérifiée à la création de la location. Avec `vehicleId`, `startAt` et `endAt` seuls, `totalTTC` est celui de `GET /availability`. Options : quantité de 1 à `choices.options[].maxBookableQuantity`.\n\n**Refus**\n- `VEHICLE_UNAVAILABLE` : véhicule non réservable.\n- `OPTION_UNAVAILABLE` : stock d’option insuffisant.\n- `BOOKING_RULE_VIOLATION` : règles de réservation (clé partenaire).\n- `DISCOUNT_CAP_EXCEEDED` : remise au-delà du plafond de la clé ou sous un total nul.\n- `FEATURE_NOT_AVAILABLE` : `options` sans `pricing.options`.\n- 400 `not_applicable` : jeune conducteur dans `options` (`driverBirthDate` en décide) ; conducteur additionnel, `charges` ou `isVatReverseCharge` avec une clé partenaire.\n\n`choices` chiffre chaque alternative ; pour en retenir une, créez un autre devis. Le devis sert une fois, en `quoteId` de `POST /rentals`, par une clé du même code partenaire.",
        "tags": [
          "Offre"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "quotes.write"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "vehicleId": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
                "startAt": "2026-11-10T10:00",
                "endAt": "2026-11-15T10:00",
                "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
                "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
                "options": [
                  {
                    "optionId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                    "quantity": 1
                  }
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "vehicleId": {
                    "examples": [
                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                    ],
                    "description": "Véhicule à chiffrer (`GET /availability`).",
                    "type": "string",
                    "format": "uuid"
                  },
                  "startAt": {
                    "description": "Départ, heure murale de l’agence sans décalage (YYYY-MM-DDTHH:mm).",
                    "examples": [
                      "2026-11-10T10:00"
                    ],
                    "type": "string"
                  },
                  "endAt": {
                    "description": "Retour, heure murale de l’agence sans décalage (YYYY-MM-DDTHH:mm).",
                    "examples": [
                      "2026-11-10T10:00"
                    ],
                    "type": "string"
                  },
                  "mileagePackageId": {
                    "description": "Forfait kilométrique. Omis : forfait par défaut de l’organisation ; null : kilométrage illimité.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "deductibleId": {
                    "description": "Franchise. Omis : franchise par défaut de la catégorie du véhicule, sinon de l’organisation ; null : sans franchise.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "depositId": {
                    "description": "Caution. Omis : caution liée à la franchise retenue si elle est active, sinon caution par défaut de la catégorie, sinon de l’organisation, y compris avec `deductibleId: null` ; null : sans caution.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "options": {
                    "description": "Options et quantités, une fois chacune. Jeune conducteur jamais ici (400 `not_applicable`) ; conducteur additionnel réservé aux clés internes.",
                    "default": [],
                    "maxItems": 50,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "optionId": {
                          "examples": [
                            "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                          ],
                          "description": "Option du catalogue (`GET /options`).",
                          "type": "string",
                          "format": "uuid"
                        },
                        "quantity": {
                          "description": "Quantité, 1 par défaut ; au plus `maxBookableQuantity` de `choices.options` (sinon 422 `OPTION_QUANTITY_EXCEEDED` ou 409 `OPTION_UNAVAILABLE`).",
                          "default": 1,
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        }
                      },
                      "required": [
                        "optionId"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "charges": {
                    "description": "Frais ou remises libres, appliqués dans l’ordre (clé interne seulement, sinon 400 `not_applicable`).",
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "description": "Frais ou remise libre (clé interne seulement). Une remise qui ferait passer le total sous zéro ou dépasserait le plafond de remise de la clé → 422 `DISCOUNT_CAP_EXCEEDED`.",
                      "type": "object",
                      "properties": {
                        "type": {
                          "description": "`SURCHARGE` : frais ajouté ; `DISCOUNT` : remise, déduite du total.",
                          "type": "string",
                          "enum": [
                            "SURCHARGE",
                            "DISCOUNT"
                          ]
                        },
                        "amountHT": {
                          "description": "Montant HT, positif même pour une remise. Exactement un de `amountHT` et `amountTTC` (les deux → 400 `mutually_exclusive`, aucun → 400 `required`).",
                          "type": "number"
                        },
                        "amountTTC": {
                          "description": "Montant TTC, positif même pour une remise ; fait foi, le HT en est déduit au taux de TVA du devis.",
                          "type": "number"
                        },
                        "description": {
                          "description": "Libellé de la ligne `CHARGE`.",
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 500
                        }
                      },
                      "required": [
                        "type",
                        "description"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "promoCode": {
                    "description": "Code promo, sans distinction de casse ; refusé → 422 `PROMO_CODE_REJECTED` (`reason`).",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 50
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isVatReverseCharge": {
                    "description": "Clé interne seulement (sinon 400 `not_applicable`) : autoliquidation de la TVA (taux 0), possible si `isVatReverseChargeAvailable` de `GET /organization` est vrai, sinon 422 `VAT_REVERSE_CHARGE_NOT_ALLOWED`.",
                    "default": false,
                    "type": "boolean"
                  },
                  "driverBirthDate": {
                    "description": "Date de naissance du conducteur : fige la majoration jeune conducteur ; null ou omis : aucune majoration.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "vehicleId",
                  "startAt",
                  "endAt"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer un devis",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "example": {
                  "data": {
                    "id": "0b8e2a6c-4d1f-4e3a-9b7c-1c2d3e4f5a6b",
                    "createdAt": "2026-11-02T09:12:44+01:00",
                    "expiresAt": "2026-11-03T09:12:44+01:00",
                    "consumedAt": null,
                    "rentalId": null,
                    "currency": "EUR",
                    "vehicle": {
                      "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
                      "name": "208 Allure",
                      "brand": "Peugeot",
                      "model": "208",
                      "vehicleType": "CITY",
                      "plate": "AB-123-CD",
                      "serialNumber": null
                    },
                    "period": {
                      "startAt": "2026-11-10T10:00:00+01:00",
                      "endAt": "2026-11-15T10:00:00+01:00",
                      "timezone": "Europe/Paris",
                      "billedDays": 5,
                      "durationMinutes": 7200
                    },
                    "mileage": {
                      "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
                      "name": "200 km/jour",
                      "isUnlimited": false,
                      "includedKm": 1000,
                      "overageRatePerKmHT": 0.25
                    },
                    "deductible": {
                      "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
                      "name": "Franchise réduite",
                      "description": "Reste à charge réduit en cas de sinistre.",
                      "excessAmount": 500
                    },
                    "deposit": {
                      "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
                      "name": "Caution citadine",
                      "depositAmount": 800
                    },
                    "promoCode": null,
                    "isVatReverseCharge": false,
                    "vatPercent": 20,
                    "totalHT": 257,
                    "vatAmount": 51.4,
                    "totalTTC": 308.4,
                    "lines": [
                      {
                        "key": "BASE",
                        "label": "Tarif de base",
                        "refId": null,
                        "quantity": 1,
                        "unitPriceHT": 210,
                        "unitPriceTTC": 252,
                        "amountHT": 210,
                        "amountTTC": 252,
                        "ratePercent": null
                      },
                      {
                        "key": "DURATION_DISCOUNT",
                        "label": "Réduction durée 5 jours",
                        "refId": null,
                        "quantity": 1,
                        "unitPriceHT": -10.5,
                        "unitPriceTTC": -12.6,
                        "amountHT": -10.5,
                        "amountTTC": -12.6,
                        "ratePercent": 5
                      },
                      {
                        "key": "MILEAGE",
                        "label": "Forfait 200 km/jour",
                        "refId": null,
                        "quantity": 1,
                        "unitPriceHT": 0,
                        "unitPriceTTC": 0,
                        "amountHT": 0,
                        "amountTTC": 0,
                        "ratePercent": null
                      },
                      {
                        "key": "DEDUCTIBLE",
                        "label": "Franchise réduite",
                        "refId": null,
                        "quantity": 1,
                        "unitPriceHT": 37.5,
                        "unitPriceTTC": 45,
                        "amountHT": 37.5,
                        "amountTTC": 45,
                        "ratePercent": null
                      },
                      {
                        "key": "OPTION",
                        "label": "Siège enfant",
                        "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                        "quantity": 1,
                        "unitPriceHT": 20,
                        "unitPriceTTC": 24,
                        "amountHT": 20,
                        "amountTTC": 24,
                        "ratePercent": null
                      }
                    ],
                    "pricingBasis": {
                      "dailyPrices": [
                        {
                          "date": "2026-11-10",
                          "seasonSlug": "basse",
                          "dailyPriceHT": 42
                        },
                        {
                          "date": "2026-11-11",
                          "seasonSlug": "basse",
                          "dailyPriceHT": 42
                        },
                        {
                          "date": "2026-11-12",
                          "seasonSlug": "basse",
                          "dailyPriceHT": 42
                        },
                        {
                          "date": "2026-11-13",
                          "seasonSlug": "basse",
                          "dailyPriceHT": 42
                        },
                        {
                          "date": "2026-11-14",
                          "seasonSlug": "basse",
                          "dailyPriceHT": 42
                        }
                      ],
                      "leadTime": null
                    },
                    "choices": {
                      "mileagePackages": [
                        {
                          "mileage": {
                            "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
                            "name": "200 km/jour",
                            "isUnlimited": false,
                            "includedKm": 1000,
                            "overageRatePerKmHT": 0.25
                          },
                          "line": {
                            "key": "MILEAGE",
                            "label": "Forfait 200 km/jour",
                            "refId": null,
                            "quantity": 1,
                            "unitPriceHT": 0,
                            "unitPriceTTC": 0,
                            "amountHT": 0,
                            "amountTTC": 0,
                            "ratePercent": null
                          }
                        },
                        {
                          "mileage": {
                            "mileagePackageId": "9d0e1f2a-3b4c-4d5e-8f60-819203142536",
                            "name": "Kilométrage illimité",
                            "isUnlimited": true,
                            "includedKm": null,
                            "overageRatePerKmHT": null
                          },
                          "line": {
                            "key": "MILEAGE",
                            "label": "Forfait Kilométrage illimité",
                            "refId": null,
                            "quantity": 1,
                            "unitPriceHT": 75,
                            "unitPriceTTC": 90,
                            "amountHT": 75,
                            "amountTTC": 90,
                            "ratePercent": null
                          }
                        }
                      ],
                      "deductibles": [
                        {
                          "deductible": {
                            "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
                            "name": "Franchise réduite",
                            "description": "Reste à charge réduit en cas de sinistre.",
                            "excessAmount": 500
                          },
                          "deposit": {
                            "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
                            "name": "Caution citadine",
                            "depositAmount": 800
                          },
                          "line": {
                            "key": "DEDUCTIBLE",
                            "label": "Franchise réduite",
                            "refId": null,
                            "quantity": 1,
                            "unitPriceHT": 37.5,
                            "unitPriceTTC": 45,
                            "amountHT": 37.5,
                            "amountTTC": 45,
                            "ratePercent": null
                          }
                        }
                      ],
                      "options": [
                        {
                          "optionId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                          "name": "Siège enfant",
                          "maxBookableQuantity": 2,
                          "line": {
                            "key": "OPTION",
                            "label": "Siège enfant",
                            "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                            "quantity": 1,
                            "unitPriceHT": 20,
                            "unitPriceTTC": 24,
                            "amountHT": 20,
                            "amountTTC": 24,
                            "ratePercent": null
                          }
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Quote"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `OPTION_UNAVAILABLE`, `VEHICLE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionUnavailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VehicleUnavailableProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`BOOKING_RULE_VIOLATION`, `DISCOUNT_CAP_EXCEEDED`, `IDEMPOTENCY_KEY_REUSED`, `OPTION_OUT_OF_SEASON`, `OPTION_QUANTITY_EXCEEDED`, `PROMO_CODE_REJECTED`, `REFERENCE_INACTIVE`, `REFERENCE_NOT_FOUND`, `VAT_REVERSE_CHARGE_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRuleViolationProblem"
                    },
                    {
                      "$ref": "#/components/schemas/DiscountCapExceededProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionOutOfSeasonProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionQuantityExceededProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PromoCodeRejectedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceInactiveProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VatReverseChargeNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/offre/create-quote",
          "metadata": {
            "title": "Créer un devis",
            "sidebarTitle": "Créer un devis"
          }
        }
      }
    },
    "/quotes/{quoteId}": {
      "get": {
        "operationId": "getQuote",
        "summary": "Lire un devis",
        "description": "**Accès** : `offers.read`\n\nLe devis tel que créé, expiré compris : lisez `expiresAt`, `consumedAt` et `rentalId` (location créée avec lui). `choices` reste celui du calcul. Devis inconnu, d’une autre organisation ou d’un autre identifiant partenaire, ou effacé (24 h après `expiresAt`) : `404`. La lecture ne renvoie jamais `QUOTE_EXPIRED`.",
        "tags": [
          "Offre"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "offers.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "quoteId",
            "schema": {
              "examples": [
                "0b8e2a6c-4d1f-4e3a-9b7c-1c2d3e4f5a6b"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du devis."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire un devis",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Quote"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/offre/get-quote",
          "metadata": {
            "title": "Lire un devis",
            "sidebarTitle": "Lire un devis"
          }
        }
      }
    },
    "/rentals": {
      "get": {
        "operationId": "listRentals",
        "summary": "Lister les locations",
        "description": "**Accès** : `rentals.read`\n\nLes locations, chacune dans la représentation de `GET /rentals/{rentalId}`, triées par `period.startAt` décroissant puis `id`.\n\n**Filtres**, combinables, en égalité exacte : `status` (valeurs séparées par des virgules), `vehicleId`, `customerId`, `categoryId`, `partnerReference`, `number`. Un identifiant inconnu donne une liste vide. `from` et `to` (`YYYY-MM-DD`, inclus) sont des jours de l’agence : une location est retenue si sa période contractuelle ou réelle les chevauche ; une location `IN_PROGRESS` non rendue court jusqu’à son retour. `from` postérieur à `to` → 400 sur `/to`.\n\nSans `status`, les locations `CANCELLED` sont listées : pour un planning, filtrez `status=PENDING_APPROVAL,RESERVED,IN_PROGRESS,COMPLETED`.\n\n**Pagination** : une location déplacée pendant le parcours des pages peut manquer ou revenir ; dédoublonnez par `id` et suivez les changements par `GET /events`.\n\nUne clé partenaire ne voit que ses locations ; le filtre `partnerCode` est réservé aux clés sans code partenaire (sinon 400 `not_applicable`).",
        "tags": [
          "Locations"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : RESERVED, PENDING_APPROVAL, IN_PROGRESS, COMPLETED, CANCELLED."
          },
          {
            "in": "query",
            "name": "vehicleId",
            "schema": {
              "description": "Véhicule loué.",
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "description": "Véhicule loué."
          },
          {
            "in": "query",
            "name": "customerId",
            "schema": {
              "description": "Titulaire.",
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "description": "Titulaire."
          },
          {
            "in": "query",
            "name": "categoryId",
            "schema": {
              "description": "Catégorie tarifaire du véhicule loué.",
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "description": "Catégorie tarifaire du véhicule loué."
          },
          {
            "in": "query",
            "name": "partnerReference",
            "schema": {
              "description": "Votre numéro de commande.",
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            },
            "description": "Votre numéro de commande."
          },
          {
            "in": "query",
            "name": "partnerCode",
            "schema": {
              "description": "Code partenaire (clé sans code partenaire seulement).",
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9_-]{1,49}$"
            },
            "description": "Code partenaire (clé sans code partenaire seulement)."
          },
          {
            "in": "query",
            "name": "number",
            "schema": {
              "description": "Numéro de la location.",
              "type": "string",
              "minLength": 1,
              "maxLength": 50
            },
            "description": "Numéro de la location."
          },
          {
            "in": "query",
            "name": "from",
            "schema": {
              "description": "Premier jour de l’agence (inclus) que la location doit chevaucher.",
              "examples": [
                "2026-11-10"
              ],
              "type": "string",
              "format": "date"
            },
            "description": "Premier jour de l’agence (inclus) que la location doit chevaucher."
          },
          {
            "in": "query",
            "name": "to",
            "schema": {
              "description": "Dernier jour de l’agence (inclus) que la location doit chevaucher.",
              "examples": [
                "2026-11-10"
              ],
              "type": "string",
              "format": "date"
            },
            "description": "Dernier jour de l’agence (inclus) que la location doit chevaucher."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les locations",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Rental"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/locations/list-rentals",
          "metadata": {
            "title": "Lister les locations",
            "sidebarTitle": "Lister les locations"
          }
        }
      },
      "post": {
        "operationId": "createRental",
        "summary": "Créer une location",
        "description": "**Accès** : `rentals.write`\n\nCrée une location `RESERVED` (tout ou rien), au prix d’un devis (`quoteId`) ou au prix du moment.\n\n**Obligatoire** : `customerId` (clé interne) ou `customer`, jamais les deux ; puis `quoteId` seul, ou `vehicleId`, `startAt`, `endAt` avec les règles et défauts de `POST /quotes`. Un `customer` déjà connu n’est complété que sur ses champs vides.\n\n**Refus** (sans devis, s’ajoutent ceux de `POST /quotes`)\n- `REFERENCE_NOT_FOUND` : devis inconnu.\n- `QUOTE_ALREADY_USED`, `QUOTE_EXPIRED` : devis déjà utilisé ; expiré ou départ passé.\n- `PRICE_CHANGED` : prix plus garanti.\n- `CUSTOMER_BLOCKED` (clé interne), `BOOKING_REFUSED` (clé partenaire) : titulaire bloqué.\n- `DRIVER_AGE_MISMATCH` (clé partenaire) : âge contraire à la majoration jeune conducteur du devis.\n- `ALREADY_EXISTS` : `partnerReference` déjà utilisée.\n- `VEHICLE_UNAVAILABLE`, `OPTION_UNAVAILABLE` : véhicule ou stock d’option indisponible, même avec un devis.\n- 400 `not_applicable` : entrée de prix avec `quoteId` ; clé partenaire avec `customerId`, `charges`, `isVatReverseCharge`, `internalNotes` ou une `source` autre que `PARTNER`.\n\n**Effets** : PDF de confirmation, alerte au loueur ; email au client si l’organisation l’a activé (clé interne seulement).",
        "tags": [
          "Locations"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "vehicleId": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
                "startAt": "2026-11-10T10:00",
                "endAt": "2026-11-15T10:00",
                "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
                "options": [
                  {
                    "optionId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                    "quantity": 1
                  }
                ],
                "customer": {
                  "firstName": "Marie",
                  "lastName": "Martin",
                  "email": "marie.martin@example.com",
                  "phone": "+33612345678"
                },
                "partnerReference": "AV-884213",
                "pickupLocation": {
                  "locationId": "c41a9e3b-2d55-4b0f-8c11-0f3a7d6e9b42"
                },
                "returnLocation": {
                  "name": "Hôtel Negresco",
                  "address": "37 promenade des Anglais, 06000 Nice"
                },
                "notes": "Siège enfant à installer avant la remise."
              },
              "schema": {
                "type": "object",
                "properties": {
                  "quoteId": {
                    "description": "Devis de `POST /quotes`, consommé une fois : seule source du véhicule, de la période et des entrées de prix, alors absents du corps.",
                    "examples": [
                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                    ],
                    "type": "string",
                    "format": "uuid"
                  },
                  "vehicleId": {
                    "description": "Sans `quoteId`, obligatoire : véhicule à louer.",
                    "examples": [
                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                    ],
                    "type": "string",
                    "format": "uuid"
                  },
                  "startAt": {
                    "description": "Sans `quoteId`, obligatoire : départ, heure murale de l’agence sans décalage.",
                    "examples": [
                      "2026-11-10T10:00"
                    ],
                    "type": "string"
                  },
                  "endAt": {
                    "description": "Sans `quoteId`, obligatoire : retour, heure murale de l’agence sans décalage.",
                    "examples": [
                      "2026-11-10T10:00"
                    ],
                    "type": "string"
                  },
                  "mileagePackageId": {
                    "description": "Forfait kilométrique. Omis : forfait par défaut de l’organisation ; null : kilométrage illimité.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "deductibleId": {
                    "description": "Franchise. Omis : franchise par défaut de la catégorie du véhicule, sinon de l’organisation ; null : sans franchise.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "depositId": {
                    "description": "Caution. Omis : caution liée à la franchise retenue si elle est active, sinon caution par défaut de la catégorie, sinon de l’organisation, y compris avec `deductibleId: null` ; null : sans caution.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "options": {
                    "description": "Sans `quoteId` : options et quantités, règles de `POST /quotes`.",
                    "maxItems": 50,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "optionId": {
                          "examples": [
                            "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                          ],
                          "description": "Option du catalogue (`GET /options`).",
                          "type": "string",
                          "format": "uuid"
                        },
                        "quantity": {
                          "description": "Quantité, 1 par défaut ; au plus `maxBookableQuantity` de `choices.options` (sinon 422 `OPTION_QUANTITY_EXCEEDED` ou 409 `OPTION_UNAVAILABLE`).",
                          "default": 1,
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        }
                      },
                      "required": [
                        "optionId"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "charges": {
                    "description": "Sans `quoteId`, clé interne seulement : frais ou remises libres.",
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "description": "Frais ou remise libre (clé interne seulement). Une remise qui ferait passer le total sous zéro ou dépasserait le plafond de remise de la clé → 422 `DISCOUNT_CAP_EXCEEDED`.",
                      "type": "object",
                      "properties": {
                        "type": {
                          "description": "`SURCHARGE` : frais ajouté ; `DISCOUNT` : remise, déduite du total.",
                          "type": "string",
                          "enum": [
                            "SURCHARGE",
                            "DISCOUNT"
                          ]
                        },
                        "amountHT": {
                          "description": "Montant HT, positif même pour une remise. Exactement un de `amountHT` et `amountTTC` (les deux → 400 `mutually_exclusive`, aucun → 400 `required`).",
                          "type": "number"
                        },
                        "amountTTC": {
                          "description": "Montant TTC, positif même pour une remise ; fait foi, le HT en est déduit au taux de TVA du devis.",
                          "type": "number"
                        },
                        "description": {
                          "description": "Libellé de la ligne `CHARGE`.",
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 500
                        }
                      },
                      "required": [
                        "type",
                        "description"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "promoCode": {
                    "description": "Code promo, sans distinction de casse ; refusé → 422 `PROMO_CODE_REJECTED` (`reason`).",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 50
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isVatReverseCharge": {
                    "description": "Sans `quoteId`, clé interne seulement : autoliquidation de la TVA, possible si `isVatReverseChargeAvailable` de `GET /organization` est vrai.",
                    "type": "boolean"
                  },
                  "customerId": {
                    "description": "Client existant (`GET /customers`), clé interne seulement.",
                    "examples": [
                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                    ],
                    "type": "string",
                    "format": "uuid"
                  },
                  "customer": {
                    "description": "Titulaire particulier : repris par email parmi les fiches de votre code partenaire, sinon créé (`effects.customerResolution`).",
                    "type": "object",
                    "properties": {
                      "firstName": {
                        "description": "Prénom du titulaire.",
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "lastName": {
                        "description": "Nom du titulaire.",
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "email": {
                        "description": "Email, en minuscules ; celui d’un particulier est unique pour un même `partnerCode`.",
                        "type": "string",
                        "maxLength": 255,
                        "format": "email"
                      },
                      "phone": {
                        "description": "Téléphone du titulaire, de préférence au format international (+33…) ; espaces, tirets, points et parenthèses sont retirés.",
                        "type": "string",
                        "minLength": 7,
                        "maxLength": 25,
                        "pattern": "^\\+?[\\d\\s\\-()./]+$"
                      },
                      "birthDate": {
                        "description": "Date de naissance (particulier), `YYYY-MM-DD`.",
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "birthCity": {
                        "description": "Lieu de naissance (particulier).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 100
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "nationality": {
                        "description": "Nationalité, en texte libre (particulier).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 100
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "licenseNumber": {
                        "description": "Numéro du permis de conduire (particulier).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 50
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "licenseIssueDate": {
                        "description": "Date de délivrance du permis de conduire (particulier), `YYYY-MM-DD`.",
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "address": {
                        "description": "Adresse postale ; en modification, fusionnée champ par champ, null la retire.",
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "street": {
                                "description": "Numéro et voie.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 300
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "complement": {
                                "description": "Complément d’adresse (bâtiment, étage…).",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 300
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "postalCode": {
                                "description": "Code postal.",
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "city": {
                                "description": "Ville.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 100
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "country": {
                                "description": "Pays, code ISO 3166-1 alpha-2 (casse ignorée) ; omis à la création : celui de l’agence, sinon FR.",
                                "type": "string"
                              }
                            },
                            "additionalProperties": false
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "firstName",
                      "lastName",
                      "email",
                      "phone"
                    ],
                    "additionalProperties": false
                  },
                  "partnerReference": {
                    "description": "Votre numéro de commande, unique par code partenaire (doublon → 409 `ALREADY_EXISTS`).",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "source": {
                    "description": "Canal de vente, `ONLINE` par défaut. Une clé partenaire ne peut envoyer que `PARTNER`, que porte toujours sa location.",
                    "type": "string",
                    "enum": [
                      "ONLINE",
                      "PHONE",
                      "WALKIN",
                      "PARTNER",
                      "OTHER"
                    ]
                  },
                  "pickupLocation": {
                    "description": "Lieu de départ ; omis ou null : aucun.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "locationId": {
                            "description": "Lieu actif du catalogue (`GET /locations`), copié à l’enregistrement.",
                            "examples": [
                              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                            ],
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "description": "Nom du lieu, avec une adresse libre seulement.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "address": {
                            "description": "Adresse libre, requise sans `locationId`.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "returnLocation": {
                    "description": "Lieu de retour ; omis ou null : aucun.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "locationId": {
                            "description": "Lieu actif du catalogue (`GET /locations`), copié à l’enregistrement.",
                            "examples": [
                              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                            ],
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "description": "Nom du lieu, avec une adresse libre seulement.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "address": {
                            "description": "Adresse libre, requise sans `locationId`.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "notes": {
                    "description": "Note libre.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 2000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "internalNotes": {
                    "description": "Note interne (clé interne seulement) : visible de l’équipe dans Lexio, jamais sur un document client ; clé partenaire → 400 `not_applicable`.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 2000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "customerResolution": {
                          "description": "`null` avec `customerId` (`POST …/change-customer` renvoie `PROVIDED` dans ce cas). `CREATED` : fiche créée depuis `customer`. `MATCHED` : fiche particulier existante de votre code partenaire, reprise par email et gardée telle quelle : seuls ses champs vides sont complétés, nom, téléphone et date de naissance déjà renseignés ne sont jamais réécrits. Relisez `data.customer`.",
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "CREATED",
                                "MATCHED"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "customerResolution"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `BOOKING_REFUSED`, `CUSTOMER_BLOCKED`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `OPTION_UNAVAILABLE`, `PRICE_CHANGED`, `QUOTE_ALREADY_USED`, `QUOTE_EXPIRED`, `VEHICLE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/BookingRefusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/CustomerBlockedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionUnavailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PriceChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/QuoteAlreadyUsedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/QuoteExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VehicleUnavailableProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`BOOKING_RULE_VIOLATION`, `DISCOUNT_CAP_EXCEEDED`, `DRIVER_AGE_MISMATCH`, `IDEMPOTENCY_KEY_REUSED`, `OPTION_OUT_OF_SEASON`, `OPTION_QUANTITY_EXCEEDED`, `PROMO_CODE_REJECTED`, `REFERENCE_INACTIVE`, `REFERENCE_NOT_FOUND`, `VAT_REVERSE_CHARGE_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRuleViolationProblem"
                    },
                    {
                      "$ref": "#/components/schemas/DiscountCapExceededProblem"
                    },
                    {
                      "$ref": "#/components/schemas/DriverAgeMismatchProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionOutOfSeasonProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionQuantityExceededProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PromoCodeRejectedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceInactiveProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VatReverseChargeNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/locations/create-rental",
          "metadata": {
            "title": "Créer une location",
            "sidebarTitle": "Créer une location"
          }
        }
      }
    },
    "/rentals/{rentalId}": {
      "delete": {
        "operationId": "deleteRental",
        "summary": "Supprimer une location",
        "description": "**Accès** : `rentals.delete`\n\nSupprime définitivement une location `RESERVED` ou `CANCELLED` (204). Clé interne seulement (sinon `INSUFFICIENT_SCOPE`). Préférez [cancel](https://docs.lexio.rent/api-reference/locations/cancel-rental), qui garde l’historique.\n\n**Refus**\n- `RENTAL_STATUS_NOT_ALLOWED` (`action: DELETE`) : autre statut, revérifié à l’écriture. Une demande `PENDING_APPROVAL` se refuse par annulation.\n- `RESOURCE_IN_USE` : rien n’est supprimé ; `blockers` liste toutes les causes : `INVOICES` (facture émise, même remboursée), `PAYMENTS_HELD` (net encaissé hors caution ; `count` = paiements et remboursements validés), `DEPOSITS_HELD` (caution encaissée, hors empreinte), `INCIDENTS`, `FINALIZED_ACCOUNTING_INVOICES` (facture finalisée en comptabilité).\n- `SERVICE_UNAVAILABLE` (`dependency: ACCOUNTING`) : vérification comptable indisponible, à rejouer.\n\nRejeu, même `Idempotency-Key` : 204 ; autre clé : 404.\n\n**Effets** : numéro jamais réattribué, code promo rendu, événement `rental.deleted` ; fichiers et brouillons comptables purgés ensuite.",
        "tags": [
          "Locations"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.delete"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RENTAL_STATUS_NOT_ALLOWED`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/locations/delete-rental",
          "metadata": {
            "title": "Supprimer une location",
            "sidebarTitle": "Supprimer une location"
          }
        }
      },
      "get": {
        "operationId": "getRental",
        "summary": "Lire une location",
        "description": "**Accès** : `rentals.read`\n\nLa location dans sa représentation unique, la même que celle des écritures.\n\n**Montants** dans `currency`, la devise figée à la création. `totalHT`, `vatAmount` et `totalTTC` font foi, avec `totalTTC − totalHT = vatAmount` ; la somme des `lines` leur est égale, sauf écart possible sur une location ancienne. `totalTTC` est le montant de la pièce, inchangé par une annulation ; `balance.totalTTC` est l’exigible, 0 sur une location `CANCELLED`. Caution et franchise ne sont jamais dans ces totaux.\n\n**Solde** : `balance.paidAmount` = paiements validés − remboursements validés, caution exclue ; `balance.dueAmount` = reste à payer. Voir [Montants et TVA](https://docs.lexio.rent/montants-et-tva).\n\nUne clé partenaire ne lit que les locations de son code partenaire : toute autre répond 404.",
        "tags": [
          "Locations"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/locations/get-rental",
          "metadata": {
            "title": "Lire une location",
            "sidebarTitle": "Lire une location"
          }
        }
      },
      "patch": {
        "operationId": "updateRental",
        "summary": "Modifier les notes et les lieux",
        "description": "**Accès** : `rentals.write`\n\nModifie `notes`, `pickupLocation` et `returnLocation` en Merge Patch (`application/json` ou `application/merge-patch+json`) : omis = inchangé, `null` efface, un lieu se remplace entier. Réponse : la location relue ; ni le prix, ni le statut, ni le titulaire ne changent.\n\n**Statuts** : `notes` toujours modifiable ; lieux en `PENDING_APPROVAL` et `RESERVED`, lieu de retour seul en `IN_PROGRESS` ; ailleurs → 409 `RENTAL_STATUS_NOT_ALLOWED` (`action: EDIT_LOCATIONS`, champ pointé).\n\n**Refus** : `{}` → 400 `empty_patch` ; `\"\"` → 400 `empty_string` ; lieu inconnu → 422 `REFERENCE_NOT_FOUND`, désactivé → 422 `REFERENCE_INACTIVE` ; tout autre champ → 400 `unknown_field`. Dates, véhicule, couverture, options, titulaire et statut changent par les actions de la location (`…/reschedule`, `…/change-vehicle`, `…/change-coverage`, `…/options/{optionId}`, `…/change-customer`, `…/cancel`, `…/pickup`, `…/return`) : voir [Cycle de vie](https://docs.lexio.rent/cycle-de-vie).\n\n**Effets** : un lieu modifié sur une location en cours peut produire un avenant ; événement `rental.updated`.",
        "tags": [
          "Locations"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "returnLocation": {
                  "locationId": "c41a9e3b-2d55-4b0f-8c11-0f3a7d6e9b42"
                },
                "notes": null
              },
              "schema": {
                "type": "object",
                "properties": {
                  "notes": {
                    "description": "Note libre ; null l’efface. Modifiable dans tout statut.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 2000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "pickupLocation": {
                    "description": "Lieu de départ, remplacé entier ; null l’efface. Modifiable en `PENDING_APPROVAL` et `RESERVED`.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "locationId": {
                            "description": "Lieu actif du catalogue (`GET /locations`), copié à l’enregistrement.",
                            "examples": [
                              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                            ],
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "description": "Nom du lieu, avec une adresse libre seulement.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "address": {
                            "description": "Adresse libre, requise sans `locationId`.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "returnLocation": {
                    "description": "Lieu de retour, remplacé entier ; null l’efface. Modifiable en `PENDING_APPROVAL`, `RESERVED` et `IN_PROGRESS`.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "locationId": {
                            "description": "Lieu actif du catalogue (`GET /locations`), copié à l’enregistrement.",
                            "examples": [
                              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                            ],
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "description": "Nom du lieu, avec une adresse libre seulement.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "address": {
                            "description": "Adresse libre, requise sans `locationId`.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "returnLocation": {
                  "locationId": "c41a9e3b-2d55-4b0f-8c11-0f3a7d6e9b42"
                },
                "notes": null
              },
              "schema": {
                "type": "object",
                "properties": {
                  "notes": {
                    "description": "Note libre ; null l’efface. Modifiable dans tout statut.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 2000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "pickupLocation": {
                    "description": "Lieu de départ, remplacé entier ; null l’efface. Modifiable en `PENDING_APPROVAL` et `RESERVED`.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "locationId": {
                            "description": "Lieu actif du catalogue (`GET /locations`), copié à l’enregistrement.",
                            "examples": [
                              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                            ],
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "description": "Nom du lieu, avec une adresse libre seulement.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "address": {
                            "description": "Adresse libre, requise sans `locationId`.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "returnLocation": {
                    "description": "Lieu de retour, remplacé entier ; null l’efface. Modifiable en `PENDING_APPROVAL`, `RESERVED` et `IN_PROGRESS`.",
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "locationId": {
                            "description": "Lieu actif du catalogue (`GET /locations`), copié à l’enregistrement.",
                            "examples": [
                              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                            ],
                            "type": "string",
                            "format": "uuid"
                          },
                          "name": {
                            "description": "Nom du lieu, avec une adresse libre seulement.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "address": {
                            "description": "Adresse libre, requise sans `locationId`.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier les notes et les lieux",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "example": {
                  "data": {
                    "id": "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f",
                    "number": "LOC-2026.11-0042",
                    "status": "RESERVED",
                    "source": "PARTNER",
                    "partnerCode": "azur-voyages",
                    "partnerReference": "AV-884213",
                    "period": {
                      "startAt": "2026-11-10T10:00:00+01:00",
                      "endAt": "2026-11-15T10:00:00+01:00",
                      "timezone": "Europe/Paris",
                      "billedDays": 5,
                      "durationMinutes": 7200
                    },
                    "actualStartAt": null,
                    "actualEndAt": null,
                    "vehicle": {
                      "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
                      "name": "208 Allure",
                      "brand": "Peugeot",
                      "model": "208",
                      "vehicleType": "CITY",
                      "plate": "AB-123-CD",
                      "serialNumber": null
                    },
                    "customer": {
                      "id": "7c4e2b9a-1f3d-4a6e-8b5c-9d0e1f2a3b4c",
                      "isCompany": false,
                      "firstName": "Marie",
                      "lastName": "Martin",
                      "companyName": null,
                      "email": "marie.martin@example.com",
                      "phone": "+33612345678"
                    },
                    "pickupLocation": {
                      "locationId": "c41a9e3b-2d55-4b0f-8c11-0f3a7d6e9b42",
                      "name": "Agence Nice Gare",
                      "address": "12 avenue Thiers, 06000 Nice"
                    },
                    "returnLocation": {
                      "locationId": "c41a9e3b-2d55-4b0f-8c11-0f3a7d6e9b42",
                      "name": "Agence Nice Gare",
                      "address": "12 avenue Thiers, 06000 Nice"
                    },
                    "mileage": {
                      "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
                      "name": "200 km/jour",
                      "isUnlimited": false,
                      "includedKm": 1000,
                      "overageRatePerKmHT": 0.25
                    },
                    "deductible": {
                      "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
                      "name": "Franchise réduite",
                      "description": "Reste à charge réduit en cas de sinistre.",
                      "excessAmount": 500
                    },
                    "deposit": {
                      "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
                      "name": "Caution citadine",
                      "depositAmount": 800
                    },
                    "options": [
                      {
                        "optionId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                        "name": "Siège enfant",
                        "kind": "STANDARD",
                        "quantity": 1
                      }
                    ],
                    "lines": [
                      {
                        "key": "BASE",
                        "label": "Tarif de base",
                        "refId": null,
                        "quantity": 1,
                        "unitPriceHT": 210,
                        "unitPriceTTC": 252,
                        "amountHT": 210,
                        "amountTTC": 252,
                        "ratePercent": null
                      },
                      {
                        "key": "DURATION_DISCOUNT",
                        "label": "Réduction durée 5 jours",
                        "refId": null,
                        "quantity": 1,
                        "unitPriceHT": -10.5,
                        "unitPriceTTC": -12.6,
                        "amountHT": -10.5,
                        "amountTTC": -12.6,
                        "ratePercent": 5
                      },
                      {
                        "key": "MILEAGE",
                        "label": "Forfait 200 km/jour",
                        "refId": null,
                        "quantity": 1,
                        "unitPriceHT": 0,
                        "unitPriceTTC": 0,
                        "amountHT": 0,
                        "amountTTC": 0,
                        "ratePercent": null
                      },
                      {
                        "key": "DEDUCTIBLE",
                        "label": "Franchise réduite",
                        "refId": null,
                        "quantity": 1,
                        "unitPriceHT": 37.5,
                        "unitPriceTTC": 45,
                        "amountHT": 37.5,
                        "amountTTC": 45,
                        "ratePercent": null
                      },
                      {
                        "key": "OPTION",
                        "label": "Siège enfant",
                        "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                        "quantity": 1,
                        "unitPriceHT": 20,
                        "unitPriceTTC": 24,
                        "amountHT": 20,
                        "amountTTC": 24,
                        "ratePercent": null
                      }
                    ],
                    "promoCode": null,
                    "currency": "EUR",
                    "vatPercent": 20,
                    "isVatReverseCharge": false,
                    "totalHT": 257,
                    "vatAmount": 51.4,
                    "totalTTC": 308.4,
                    "balance": {
                      "totalTTC": 308.4,
                      "paidAmount": 0,
                      "dueAmount": 308.4,
                      "overpaidAmount": 0
                    },
                    "notes": null,
                    "createdAt": "2026-11-02T09:15:02+01:00",
                    "updatedAt": "2026-11-03T08:40:12+01:00"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RENTAL_STATUS_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_INACTIVE`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceInactiveProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/locations/update-rental",
          "metadata": {
            "title": "Modifier les notes et les lieux",
            "sidebarTitle": "Modifier les notes et les lieux"
          }
        }
      }
    },
    "/rentals/{rentalId}/amendments": {
      "get": {
        "operationId": "listRentalAmendments",
        "summary": "Lister les avenants d’une location",
        "description": "**Accès** : `rentals.read`\n\nListe les avenants d’une location, quel que soit leur statut, du plus récent au plus ancien (`createdAt` décroissant, puis `id`).\n\n- Les montants sont les totaux de la location avant et après l’avenant. Tant que la signature est en attente (`PENDING`, `SENT`, `VIEWED`), `newTotalHT` et `newTotalTTC` suivent le total à jour de la location ; ensuite ils sont figés (pour `SIGNED`, ceux signés par le client).\n- `document` est une URL signée valable une heure. Les données de signature ne sont jamais exposées.\n\nUne clé partenaire ne lit que les locations de son `partnerCode` : toute autre répond 404.",
        "tags": [
          "Modifications"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les avenants d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Amendment"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/modifications/list-rental-amendments",
          "metadata": {
            "title": "Lister les avenants d’une location",
            "sidebarTitle": "Lister les avenants d’une location"
          }
        }
      }
    },
    "/rentals/{rentalId}/cancel": {
      "post": {
        "operationId": "cancelRental",
        "summary": "Annuler une location ou refuser une demande",
        "description": "**Accès** : `rentals.write`\n\nAnnule une location `RESERVED` ou refuse une demande `PENDING_APPROVAL` (tout ou rien).\n\n**Effets**\n- `CANCELLED`, code promo rendu, factures brouillon supprimées, avoir `RENTAL_CANCELLATION` du restant de chaque facture émise (synchronisation comptable planifiée).\n- `PENDING_APPROVAL` : email de refus au client, avec le motif, notification au loueur, puis libération de l’autorisation Stripe une fois l’annulation enregistrée (`effects.paymentAuthorizationRelease`).\n- Aucun frais : `effects.cancellation.refundDueAmount` est le remboursement à enregistrer par [POST …/payments](https://docs.lexio.rent/api-reference/paiements/create-rental-payment) (`REFUND`). La caution n’est pas rendue par cet appel (`depositsHeld`).\n\n**Refus**\n- `RENTAL_STATUS_NOT_ALLOWED` : `IN_PROGRESS` ou `COMPLETED`.\n- `CREDIT_NOTE_NOT_ISSUABLE` : avoir refusé à l’émission (fiche entreprise du loueur incomplète, identifiant du client professionnel manquant), à corriger dans Lexio.\n\nDéjà annulée : 200 sans écriture (`cancellation.alreadyCancelled: true`). `?dryRun=true` : ni écriture, ni email, ni Stripe.",
        "tags": [
          "Locations"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu, la même action annulée en fin de transaction.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu, la même action annulée en fin de transaction."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "reason": "Vol annulé par la cliente"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "description": "Motif en texte libre, après trim (vide → 400). Écrit en note d’avertissement dans la même transaction.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 1000
                  }
                },
                "required": [
                  "reason"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Annuler une location ou refuser une demande",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "cancellation": {
                          "type": "object",
                          "properties": {
                            "alreadyCancelled": {
                              "description": "true : la location était déjà annulée, cet appel n’a rien écrit (200 idempotent).",
                              "type": "boolean"
                            },
                            "reason": {
                              "description": "Motif enregistré par l’API à l’annulation ; null si la location a été annulée hors de l’API (Lexio, site de réservation, expiration automatique).",
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "paidAmount": {
                              "description": "Net encaissé hors caution, relu à chaque appel.",
                              "type": "number",
                              "minimum": 0
                            },
                            "refundDueAmount": {
                              "description": "max(0, paidAmount − remboursements PENDING déjà engagés). L’API ne retient aucun frais ; le remboursement s’enregistre par POST /rentals/{rentalId}/payments (REFUND). null si la location a été annulée hors de l’API : des frais ont pu être retenus, vérifiez dans Lexio avant de rembourser.",
                              "anyOf": [
                                {
                                  "type": "number",
                                  "minimum": 0
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "depositsHeld": {
                              "description": "Cautions encore détenues. L’annulation ne les rend pas : la restitution se fait dans Lexio, pas par l’API.",
                              "type": "object",
                              "properties": {
                                "collectedAmount": {
                                  "description": "Cautions VALIDATED encaissées, moins leurs restitutions : à rendre au client.",
                                  "type": "number",
                                  "minimum": 0
                                },
                                "preAuthorizedAmount": {
                                  "description": "Empreintes de caution VALIDATED à relâcher.",
                                  "type": "number",
                                  "minimum": 0
                                }
                              },
                              "required": [
                                "collectedAmount",
                                "preAuthorizedAmount"
                              ]
                            },
                            "creditNotes": {
                              "description": "Avoirs émis par l’annulation (type CREDIT_NOTE, montants négatifs).",
                              "examples": [
                                [
                                  {
                                    "id": "d3e4f5a6-b7c8-4d9e-8f0a-1b2c3d4e5f60",
                                    "number": "AVO-2026.11-0007",
                                    "type": "CREDIT_NOTE",
                                    "creditedInvoiceId": "f2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d",
                                    "totalHT": -257,
                                    "totalTTC": -308.4
                                  }
                                ]
                              ],
                              "maxItems": 50,
                              "type": "array",
                              "items": {
                                "$ref": "#/components/schemas/InvoiceRef"
                              }
                            },
                            "uncreditedInvoices": {
                              "description": "Factures émises restant à créditer, relues après annulation. Vide tant que l’annulation est atomique ; non vide (annulation par un autre canal) : avoir à émettre par le loueur dans Lexio.",
                              "maxItems": 50,
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "examples": [
                                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                                    ],
                                    "type": "string",
                                    "format": "uuid"
                                  },
                                  "number": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "remainingTTC": {
                                    "type": "number",
                                    "exclusiveMinimum": 0
                                  }
                                },
                                "required": [
                                  "id",
                                  "number",
                                  "remainingTTC"
                                ]
                              }
                            }
                          },
                          "required": [
                            "alreadyCancelled",
                            "reason",
                            "paidAmount",
                            "refundDueAmount",
                            "depositsHeld",
                            "creditNotes",
                            "uncreditedInvoices"
                          ]
                        },
                        "paymentAuthorizationRelease": {
                          "description": "Libération de l’autorisation Stripe d’une demande PENDING_APPROVAL refusée, tentée une fois l’annulation enregistrée. NONE : aucune autorisation à libérer (RESERVED, demande sans paiement, location déjà annulée). FAILED : Stripe n’a pas confirmé ; l’autorisation expire seule, ou, déjà capturée, le loueur est alerté pour rembourser dans Lexio. null : aperçu dryRun d’un refus avec autorisation Stripe (la libération n’est pas tentée) ; un aperçu sans autorisation à libérer renvoie NONE.",
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "NONE",
                                "RELEASED",
                                "FAILED"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "cancellation",
                        "paymentAuthorizationRelease"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`CREDIT_NOTE_NOT_ISSUABLE`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/CreditNoteNotIssuableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/locations/cancel-rental",
          "metadata": {
            "title": "Annuler une location ou refuser une demande",
            "sidebarTitle": "Annuler une location ou refuser une demande"
          }
        }
      }
    },
    "/rentals/{rentalId}/change-coverage": {
      "post": {
        "operationId": "changeRentalCoverage",
        "summary": "Changer la couverture d’une location",
        "description": "**Accès** : `rentals.write`\n\nChange le forfait kilométrique, la franchise ou la caution d’une location `RESERVED` ou `IN_PROGRESS` : au moins un des trois champs.\n\n**Règles**\n- Franchise changée sans `depositId` : caution recalculée (`effects.depositResolution`).\n- Élément changé : tarif du jour ; inchangé : prix gardé. Un élément offert dans Lexio et remplacé perd la gratuité.\n- Mêmes identifiants : 200 sans effet. Sur `IN_PROGRESS`, avenant si le changement est significatif (`effects.amendment`).\n\n**Refus**\n- `REFERENCE_NOT_FOUND` : identifiant inconnu.\n- `REFERENCE_INACTIVE` : nouvel élément désactivé ou hors catégorie du véhicule (garder l’actuel reste permis).\n- `BOOKING_REFUSED` : élément payant sur un contrat au loyer mensuel.\n- `VEHICLE_UNAVAILABLE` : véhicule sans tarif.\n\n**Aperçu et prix** : `?dryRun=true`, `expectedTotalTTC` (`PRICE_CHANGED`), `overpaymentResolution` (`OVERPAYMENT_RESOLUTION_REQUIRED`, `SEPA_DEBIT_PENDING`) : voir [Idempotence](https://docs.lexio.rent/idempotence).",
        "tags": [
          "Modifications"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu, la même action annulée en fin de transaction.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu, la même action annulée en fin de transaction."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "mileagePackageId": "9d0e1f2a-3b4c-4d5e-8f60-819203142536",
                "expectedTotalTTC": 398.4
              },
              "schema": {
                "type": "object",
                "properties": {
                  "mileagePackageId": {
                    "description": "Omis : inchangé. null : kilométrage illimité. Inconnu → 422 REFERENCE_NOT_FOUND ; nouveau forfait désactivé → 422 REFERENCE_INACTIVE.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "deductibleId": {
                    "description": "Omis : inchangée. null : sans franchise. Une nouvelle franchise doit être active et applicable à la catégorie du véhicule (sinon 422 REFERENCE_INACTIVE) ; garder la franchise actuelle reste permis même désactivée.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "depositId": {
                    "description": "Omis : inchangée, sauf si deductibleId change (caution liée de la franchise retenue, sinon défaut de la catégorie, sinon de l’organisation, sinon aucune). null : sans caution. Fourni : l’emporte toujours.",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "expectedTotalTTC": {
                    "description": "Total TTC affiché par l’aperçu (dryRun). Écart d’au moins une unité mineure avec le total recalculé → 409 PRICE_CHANGED.",
                    "type": "number"
                  },
                  "overpaymentResolution": {
                    "description": "REFUND_PENDING : remboursement PENDING par virement du trop-perçu ; NO_REFUND : le loueur le conserve. Exige le scope payments.refund.",
                    "type": "string",
                    "enum": [
                      "REFUND_PENDING",
                      "NO_REFUND"
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Changer la couverture d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "priceChange": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/PriceChange"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "previousCoverage": {
                          "description": "Couverture avant le changement.",
                          "type": "object",
                          "properties": {
                            "mileage": {
                              "$ref": "#/components/schemas/Mileage"
                            },
                            "deductible": {
                              "anyOf": [
                                {
                                  "$ref": "#/components/schemas/DeductibleSnapshot"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "deposit": {
                              "anyOf": [
                                {
                                  "$ref": "#/components/schemas/DepositSnapshot"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "mileage",
                            "deductible",
                            "deposit"
                          ]
                        },
                        "depositResolution": {
                          "description": "UNCHANGED : caution inchangée (ni franchise ni caution modifiées, un depositId identique à l’actuel compris) ; PROVIDED : depositId fourni (null compris) qui change la caution, ou fourni avec une nouvelle franchise ; sinon la règle de re-résolution qui a produit la caution.",
                          "type": "string",
                          "enum": [
                            "UNCHANGED",
                            "PROVIDED",
                            "LINKED_TO_DEDUCTIBLE",
                            "CATEGORY_DEFAULT",
                            "ORGANIZATION_DEFAULT",
                            "NONE"
                          ]
                        },
                        "amendment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/AmendmentRef"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "overpayment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/Overpayment"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "priceChange",
                        "previousCoverage",
                        "depositResolution",
                        "amendment",
                        "overpayment"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`BOOKING_REFUSED`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `OVERPAYMENT_RESOLUTION_REQUIRED`, `PRICE_CHANGED`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`, `SEPA_DEBIT_PENDING`, `VEHICLE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRefusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OverpaymentResolutionRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PriceChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/SepaDebitPendingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VehicleUnavailableProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_INACTIVE`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceInactiveProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/modifications/change-rental-coverage",
          "metadata": {
            "title": "Changer la couverture d’une location",
            "sidebarTitle": "Changer la couverture d’une location"
          }
        }
      }
    },
    "/rentals/{rentalId}/change-customer": {
      "post": {
        "operationId": "changeRentalCustomer",
        "summary": "Changer le titulaire d’une location",
        "description": "**Accès** : `rentals.write`\n\nChange le titulaire d’une location `RESERVED` (en cours : dans Lexio), par `customerId` (clé interne) ou `customer` (`effects.customerResolution`), jamais les deux. Aucun email envoyé.\n\n**Conducteurs** : un titulaire particulier devient conducteur principal ; s’il remplace une société, le conducteur principal de celle-ci devient conducteur additionnel facturé. Une société qui remplace un particulier le garde en conducteur principal. Options conducteur recalculées (`priceChange` possible).\n\n**Refus**\n- `REFERENCE_NOT_FOUND`, `REFERENCE_INACTIVE` : `customerId` inconnu, anonymisé.\n- 400 `invalid_value` : titulaire actuel ; 400 `not_applicable` : `customerId` avec une clé partenaire.\n- `CUSTOMER_BLOCKED` (clé interne), `BOOKING_REFUSED` (clé partenaire) : client bloqué.\n- `VAT_REVERSE_CHARGE_NOT_ALLOWED` : autoliquidation, nouveau titulaire sans n° de TVA.\n- `INVOICE_FINALIZED` : facture déjà émise.\n- `BOOKING_REFUSED` : option conducteur sur un contrat au loyer mensuel.\n\n**Aperçu et prix** : `?dryRun=true`, `expectedTotalTTC` (`PRICE_CHANGED`), `overpaymentResolution` (`OVERPAYMENT_RESOLUTION_REQUIRED`, `SEPA_DEBIT_PENDING`) : voir [Idempotence](https://docs.lexio.rent/idempotence).",
        "tags": [
          "Modifications"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu, la même action annulée en fin de transaction.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu, la même action annulée en fin de transaction."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "customer": {
                  "firstName": "Paul",
                  "lastName": "Martin",
                  "email": "paul.martin@example.com",
                  "phone": "+33698765432"
                },
                "expectedTotalTTC": 308.4
              },
              "schema": {
                "type": "object",
                "properties": {
                  "customerId": {
                    "description": "Clé interne seulement (clé partenaire → 400 not_applicable). Inconnu → 422 REFERENCE_NOT_FOUND ; anonymisé → 422 REFERENCE_INACTIVE ; égal au titulaire actuel → 400 invalid_value.",
                    "examples": [
                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                    ],
                    "type": "string",
                    "format": "uuid"
                  },
                  "customer": {
                    "description": "Même objet qu’à la création : repris par email parmi les fiches particulier de l’espace de la clé (fiches internes pour une clé interne), sinon créé. Une fiche reprise est gardée telle quelle : seuls ses champs vides sont complétés. Repris sur le titulaire actuel → 400 invalid_value.",
                    "type": "object",
                    "properties": {
                      "firstName": {
                        "description": "Prénom du titulaire.",
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "lastName": {
                        "description": "Nom du titulaire.",
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "email": {
                        "description": "Email, en minuscules ; celui d’un particulier est unique pour un même `partnerCode`.",
                        "type": "string",
                        "maxLength": 255,
                        "format": "email"
                      },
                      "phone": {
                        "description": "Téléphone du titulaire, de préférence au format international (+33…) ; espaces, tirets, points et parenthèses sont retirés.",
                        "type": "string",
                        "minLength": 7,
                        "maxLength": 25,
                        "pattern": "^\\+?[\\d\\s\\-()./]+$"
                      },
                      "birthDate": {
                        "description": "Date de naissance (particulier), `YYYY-MM-DD`.",
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "birthCity": {
                        "description": "Lieu de naissance (particulier).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 100
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "nationality": {
                        "description": "Nationalité, en texte libre (particulier).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 100
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "licenseNumber": {
                        "description": "Numéro du permis de conduire (particulier).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 50
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "licenseIssueDate": {
                        "description": "Date de délivrance du permis de conduire (particulier), `YYYY-MM-DD`.",
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "address": {
                        "description": "Adresse postale ; en modification, fusionnée champ par champ, null la retire.",
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "street": {
                                "description": "Numéro et voie.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 300
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "complement": {
                                "description": "Complément d’adresse (bâtiment, étage…).",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 300
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "postalCode": {
                                "description": "Code postal.",
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "city": {
                                "description": "Ville.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 100
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "country": {
                                "description": "Pays, code ISO 3166-1 alpha-2 (casse ignorée) ; omis à la création : celui de l’agence, sinon FR.",
                                "type": "string"
                              }
                            },
                            "additionalProperties": false
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "firstName",
                      "lastName",
                      "email",
                      "phone"
                    ],
                    "additionalProperties": false
                  },
                  "expectedTotalTTC": {
                    "description": "Total TTC affiché par l’aperçu (dryRun). Écart d’au moins une unité mineure avec le total recalculé → 409 PRICE_CHANGED.",
                    "type": "number"
                  },
                  "overpaymentResolution": {
                    "description": "REFUND_PENDING : remboursement PENDING par virement du trop-perçu ; NO_REFUND : le loueur le conserve. Exige le scope payments.refund.",
                    "type": "string",
                    "enum": [
                      "REFUND_PENDING",
                      "NO_REFUND"
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Changer le titulaire d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "priceChange": {
                          "description": "Non nul si les options conducteur (conducteur additionnel, jeune conducteur) sont recalculées à un autre montant, par exemple quand un particulier remplace une société : son conducteur principal devient conducteur additionnel facturé.",
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/PriceChange"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "previousCustomer": {
                          "description": "Titulaire avant le changement.",
                          "type": "object",
                          "properties": {
                            "id": {
                              "examples": [
                                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                              ],
                              "description": "Identifiant du client.",
                              "type": "string",
                              "format": "uuid"
                            },
                            "isCompany": {
                              "description": "true : société ; false : particulier. Les champs de l’autre type valent null.",
                              "type": "boolean"
                            },
                            "firstName": {
                              "description": "Prénom (particulier) ; null pour une société ou une fiche anonymisée.",
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "lastName": {
                              "description": "Nom de famille (particulier), publié en majuscules ; null pour une société ou une fiche anonymisée.",
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "companyName": {
                              "description": "Raison sociale (société) ; null pour un particulier.",
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "email": {
                              "description": "Email, en minuscules ; celui d’un particulier est unique pour un même `partnerCode`. null si absent.",
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "phone": {
                              "description": "Téléphone, au format international quand le pays est connu ; null si absent.",
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "id",
                            "isCompany",
                            "firstName",
                            "lastName",
                            "companyName",
                            "email",
                            "phone"
                          ]
                        },
                        "customerResolution": {
                          "description": "PROVIDED : `customerId` envoyé (POST /rentals renvoie `null` dans ce cas). CREATED : fiche créée depuis `customer`. MATCHED : fiche particulier existante de l’espace de la clé, reprise par email et gardée telle quelle : seuls ses champs vides sont complétés, nom, téléphone et date de naissance déjà renseignés ne sont jamais réécrits.",
                          "type": "string",
                          "enum": [
                            "PROVIDED",
                            "CREATED",
                            "MATCHED"
                          ]
                        },
                        "overpayment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/Overpayment"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "priceChange",
                        "previousCustomer",
                        "customerResolution",
                        "overpayment"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`BOOKING_REFUSED`, `CUSTOMER_BLOCKED`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `INVOICE_FINALIZED`, `OVERPAYMENT_RESOLUTION_REQUIRED`, `PRICE_CHANGED`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`, `SEPA_DEBIT_PENDING`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRefusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/CustomerBlockedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InvoiceFinalizedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OverpaymentResolutionRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PriceChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/SepaDebitPendingProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_INACTIVE`, `REFERENCE_NOT_FOUND`, `VAT_REVERSE_CHARGE_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceInactiveProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VatReverseChargeNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/modifications/change-rental-customer",
          "metadata": {
            "title": "Changer le titulaire d’une location",
            "sidebarTitle": "Changer le titulaire d’une location"
          }
        }
      }
    },
    "/rentals/{rentalId}/change-vehicle": {
      "post": {
        "operationId": "changeRentalVehicle",
        "summary": "Changer le véhicule d’une location",
        "description": "**Accès** : `rentals.write`\n\nRemplace le véhicule d’une location `RESERVED` ou `IN_PROGRESS`. Sur `IN_PROGRESS`, `odometers` est requis (compteur du véhicule rendu, puis du remis).\n\n**Choix tarifaires** : `KEEP_ORIGINAL_PRICE` toujours ; `BREAKDOWN` et `UNAVAILABLE` ajoutent `APPLY_LOWER_PRICE` si le véhicule est moins cher ; `CUSTOMER_REQUEST` ajoute `APPLY_NEW_PRICE` si les prix diffèrent, et `APPLY_PRORATA` en cours de location. `effects.availablePricingChoices` fait foi, total compris ; sans `pricingChoice`, le choix recommandé s’applique.\n\n**Refus**\n- `RENTAL_STATUS_NOT_ALLOWED` : `odometers` sur `RESERVED`.\n- `PRICING_CHOICE_NOT_AVAILABLE` : choix non ouvert.\n- `REFERENCE_NOT_FOUND` : véhicule inconnu.\n- `VEHICLE_UNAVAILABLE` : occupé, bloqué, inactif, archivé, en panne, sans tarif, entretien dépassé (selon le réglage de l’agence).\n\n**Effets** : forfait kilométrique inchangé ; avenant sur `IN_PROGRESS`. Sur `RESERVED`, remplacez avant le départ les photos de départ déjà enregistrées.\n\n**Aperçu et prix** : `?dryRun=true`, `expectedTotalTTC` (`PRICE_CHANGED`), `overpaymentResolution` (`OVERPAYMENT_RESOLUTION_REQUIRED`, `SEPA_DEBIT_PENDING`) : voir [Idempotence](https://docs.lexio.rent/idempotence).",
        "tags": [
          "Modifications"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu, la même action annulée en fin de transaction.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu, la même action annulée en fin de transaction."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "vehicleId": "c9e2d4f1-6a3b-4c8d-a5e7-1b2f3a4c5d6e",
                "changeReason": "BREAKDOWN",
                "pricingChoice": "KEEP_ORIGINAL_PRICE",
                "effectiveAt": "2026-11-09T16:30:00+01:00",
                "notes": "Voyant moteur allumé : véhicule immobilisé au garage",
                "expectedTotalTTC": 308.4
              },
              "schema": {
                "type": "object",
                "properties": {
                  "vehicleId": {
                    "examples": [
                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                    ],
                    "description": "Véhicule cible. Inconnu ou d’une autre organisation → 422 REFERENCE_NOT_FOUND ; égal au véhicule actuel → 400 invalid_value ; non réservable → 409 VEHICLE_UNAVAILABLE.",
                    "type": "string",
                    "format": "uuid"
                  },
                  "changeReason": {
                    "description": "BREAKDOWN, UNAVAILABLE : faute du loueur, le client ne paie jamais plus ; CUSTOMER_REQUEST : demande du client.",
                    "type": "string",
                    "enum": [
                      "BREAKDOWN",
                      "UNAVAILABLE",
                      "CUSTOMER_REQUEST"
                    ]
                  },
                  "pricingChoice": {
                    "description": "Défaut : le choix recommandé (effects.availablePricingChoices[].isRecommended). Choix non ouvert pour ce motif et cet écart de prix → 422 PRICING_CHOICE_NOT_AVAILABLE.",
                    "type": "string",
                    "enum": [
                      "KEEP_ORIGINAL_PRICE",
                      "APPLY_LOWER_PRICE",
                      "APPLY_NEW_PRICE",
                      "APPLY_PRORATA"
                    ]
                  },
                  "effectiveAt": {
                    "description": "Instant du changement, avec décalage. Défaut : maintenant. Borné au départ réel (ou à la création) et à maintenant + 5 min, jamais avant le dernier changement (400 out_of_range). Pilote le prorata.",
                    "examples": [
                      "2026-11-10T10:00:00+01:00"
                    ],
                    "type": "string"
                  },
                  "odometers": {
                    "description": "Requis sur une location IN_PROGRESS (absent → 400 required). Sur RESERVED, le véhicule n’est pas encore remis : présent → 409 RENTAL_STATUS_NOT_ALLOWED, pointer /odometers.",
                    "type": "object",
                    "properties": {
                      "returnedVehicleKm": {
                        "description": "Compteur du véhicule rendu ; inférieur au dernier relevé du segment → 400 out_of_range.",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10000000
                      },
                      "newVehicleKm": {
                        "description": "Compteur du véhicule remis.",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10000000
                      }
                    },
                    "required": [
                      "returnedVehicleKm",
                      "newVehicleKm"
                    ],
                    "additionalProperties": false
                  },
                  "notes": {
                    "description": "Note interne, tracée dans l’audit.",
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "expectedTotalTTC": {
                    "description": "Total TTC affiché par l’aperçu (dryRun). Écart d’au moins une unité mineure avec le total recalculé → 409 PRICE_CHANGED.",
                    "type": "number"
                  },
                  "overpaymentResolution": {
                    "description": "REFUND_PENDING : remboursement PENDING par virement du trop-perçu ; NO_REFUND : le loueur le conserve. Exige le scope payments.refund.",
                    "type": "string",
                    "enum": [
                      "REFUND_PENDING",
                      "NO_REFUND"
                    ]
                  }
                },
                "required": [
                  "vehicleId",
                  "changeReason"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Changer le véhicule d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "priceChange": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/PriceChange"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "previousVehicle": {
                          "description": "Véhicule avant le changement.",
                          "examples": [
                            {
                              "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
                              "name": "208 Allure",
                              "brand": "Peugeot",
                              "model": "208",
                              "vehicleType": "CITY",
                              "plate": "AB-123-CD",
                              "serialNumber": null
                            }
                          ],
                          "$ref": "#/components/schemas/VehicleRef"
                        },
                        "pricingChoice": {
                          "description": "Choix appliqué (fourni, ou le choix recommandé).",
                          "type": "string",
                          "enum": [
                            "KEEP_ORIGINAL_PRICE",
                            "APPLY_LOWER_PRICE",
                            "APPLY_NEW_PRICE",
                            "APPLY_PRORATA"
                          ]
                        },
                        "availablePricingChoices": {
                          "description": "Choix ouverts à cette clé pour ce motif, avec le total de la location pour chacun ; un seul porte isRecommended.",
                          "minItems": 1,
                          "maxItems": 4,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "pricingChoice": {
                                "type": "string",
                                "enum": [
                                  "KEEP_ORIGINAL_PRICE",
                                  "APPLY_LOWER_PRICE",
                                  "APPLY_NEW_PRICE",
                                  "APPLY_PRORATA"
                                ]
                              },
                              "newTotalHT": {
                                "type": "number"
                              },
                              "newTotalTTC": {
                                "type": "number"
                              },
                              "isRecommended": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "pricingChoice",
                              "newTotalHT",
                              "newTotalTTC",
                              "isRecommended"
                            ]
                          }
                        },
                        "amendment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/AmendmentRef"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "overpayment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/Overpayment"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "priceChange",
                        "previousVehicle",
                        "pricingChoice",
                        "availablePricingChoices",
                        "amendment",
                        "overpayment"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`BOOKING_REFUSED`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `OVERPAYMENT_RESOLUTION_REQUIRED`, `PRICE_CHANGED`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`, `SEPA_DEBIT_PENDING`, `VEHICLE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRefusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OverpaymentResolutionRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PriceChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/SepaDebitPendingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VehicleUnavailableProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `PRICING_CHOICE_NOT_AVAILABLE`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PricingChoiceNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/modifications/change-rental-vehicle",
          "metadata": {
            "title": "Changer le véhicule d’une location",
            "sidebarTitle": "Changer le véhicule d’une location"
          }
        }
      }
    },
    "/rentals/{rentalId}/contract": {
      "get": {
        "operationId": "getRentalContract",
        "summary": "Lire le contrat d’une location",
        "description": "**Accès** : `rentals.read`\n\nRenvoie le contrat de location en vigueur : l’exemplaire signé au départ, sinon celui du retour. Lecture seule : l’appel ne génère ni ne remplace aucun document.\n\n- `NOT_ISSUED` tant qu’aucun contrat n’est disponible (location pas encore partie, ou contrat de départ en cours de génération) : `document` et `issuedAt` valent `null`.\n- `AVAILABLE` : `document` est une URL signée valable une heure, à ne pas stocker.\n\nUne clé partenaire ne lit que les locations de son `partnerCode` : toute autre répond 404.",
        "tags": [
          "Locations"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire le contrat d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Contract"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/locations/get-rental-contract",
          "metadata": {
            "title": "Lire le contrat d’une location",
            "sidebarTitle": "Lire le contrat d’une location"
          }
        }
      }
    },
    "/rentals/{rentalId}/inspections": {
      "get": {
        "operationId": "listRentalInspections",
        "summary": "Lire les états des lieux d’une location",
        "description": "**Accès** : `rentals.read`\n\nRenvoie les états des lieux d’une location : au plus deux éléments, `DEPARTURE` puis `RETURN` ; `nextCursor` vaut toujours `null`. Un état des lieux pas encore fait est absent : liste vide sur une location `RESERVED`, départ seul sur `IN_PROGRESS`.\n\nMême forme que l’`inspection` envoyée au [départ](https://docs.lexio.rent/api-reference/depart-et-retour/pick-up-rental) et au [retour](https://docs.lexio.rent/api-reference/depart-et-retour/return-rental). Les dommages du départ portent un `id` à citer dans `confirmedDepartureDamageIds` au retour ; un dommage historique saisi en texte libre a un `id` `null` et ne peut pas être confirmé.\n\nUne clé partenaire ne lit que les locations de son `partnerCode` : toute autre répond 404.",
        "tags": [
          "Départ et retour"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire les états des lieux d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Inspection"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/depart-et-retour/list-rental-inspections",
          "metadata": {
            "title": "Lire les états des lieux d’une location",
            "sidebarTitle": "Lire les états des lieux d’une location"
          }
        }
      }
    },
    "/rentals/{rentalId}/invoices": {
      "get": {
        "operationId": "listRentalInvoices",
        "summary": "Lister les factures et avoirs d’une location",
        "description": "**Accès** : `rentals.read`\n\nListe les factures et avoirs émis pour une location, du plus récent au plus ancien (`createdAt` décroissant, puis `id`) ; `type` filtre.\n\n- Un brouillon n’est jamais listé : une liste vide veut dire qu’aucune pièce n’est émise.\n- Montants dans `currency`, la devise de la pièce ; ceux d’un avoir sont négatifs et `creditedInvoiceId` désigne la facture créditée. Voir [Montants et TVA](https://docs.lexio.rent/montants-et-tva).\n- `document` est une URL signée valable une heure : rappelez la liste pour en obtenir une neuve.\n\nUne clé partenaire ne lit que les locations de son `partnerCode` : toute autre répond 404.",
        "tags": [
          "Paiements"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "type",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : INVOICE, CREDIT_NOTE."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les factures et avoirs d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Invoice"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/paiements/list-rental-invoices",
          "metadata": {
            "title": "Lister les factures et avoirs d’une location",
            "sidebarTitle": "Lister les factures et avoirs d’une location"
          }
        }
      }
    },
    "/rentals/{rentalId}/options/{optionId}": {
      "delete": {
        "operationId": "removeRentalOption",
        "summary": "Retirer une option d’une location",
        "description": "**Accès** : `rentals.write` · Fonctionnalité d’abonnement : `pricing.options` ([plans](https://docs.lexio.rent/authentification))\n\nRetire toute la ligne d’une option standard d’une location `RESERVED` ou `IN_PROGRESS` (204). Sans corps : les paramètres passent en query (inconnu → 400 `unknown_field`).\n\n**Prix** : le montant retiré est le prix vendu. Sur `IN_PROGRESS`, avenant si le changement est significatif (`effects.amendment`).\n\n**Refus**\n- 404 `resource: OPTION` : option inconnue ; `resource: RENTAL_OPTION` : absente de la location.\n- 400 `not_applicable` : option conducteur.\n- `INVOICE_FINALIZED` : facture finalisée en comptabilité (régularisation dans Lexio).\n- `SERVICE_UNAVAILABLE` : vérification comptable indisponible, à rejouer.\n\n`?dryRun=true` répond 200 `{ data, effects }` (`newQuantity: 0`). Après un 204, avenant et remboursement se lisent par `GET /rentals/{rentalId}`, `…/amendments`, `…/payments`.\n\n**Aperçu et prix** : `?dryRun=true`, `expectedTotalTTC` (`PRICE_CHANGED`), `overpaymentResolution` (`OVERPAYMENT_RESOLUTION_REQUIRED`, `SEPA_DEBIT_PENDING`) : voir [Idempotence](https://docs.lexio.rent/idempotence).",
        "tags": [
          "Modifications"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "x-required-feature": "pricing.options",
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "path",
            "name": "optionId",
            "schema": {
              "examples": [
                "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de l’option."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu, la même action annulée en fin de transaction.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu, la même action annulée en fin de transaction."
          },
          {
            "in": "query",
            "name": "expectedTotalTTC",
            "schema": {
              "description": "Total TTC affiché par l’aperçu (dryRun). Écart d’au moins une unité mineure avec le total recalculé → 409 PRICE_CHANGED.",
              "pattern": "^-?\\d+(\\.\\d+)?$",
              "type": "string"
            },
            "description": "Total TTC affiché par l’aperçu (dryRun). Écart d’au moins une unité mineure avec le total recalculé → 409 PRICE_CHANGED."
          },
          {
            "in": "query",
            "name": "overpaymentResolution",
            "schema": {
              "type": "string",
              "enum": [
                "REFUND_PENDING",
                "NO_REFUND"
              ]
            },
            "description": "REFUND_PENDING : remboursement PENDING par virement du trop-perçu ; NO_REFUND : le loueur le conserve. Exige le scope payments.refund."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "responses": {
          "200": {
            "description": "Aperçu (`?dryRun=true`) : la même action annulée, rien n’est écrit.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "priceChange": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/PriceChange"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "optionLine": {
                          "description": "Ligne modifiée : les unités conservées gardent leur prix figé, les unités ajoutées prennent le tarif du jour.",
                          "type": "object",
                          "properties": {
                            "optionId": {
                              "examples": [
                                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                              ],
                              "type": "string",
                              "format": "uuid"
                            },
                            "previousQuantity": {
                              "type": "integer",
                              "minimum": 0
                            },
                            "newQuantity": {
                              "description": "0 après un retrait.",
                              "type": "integer",
                              "minimum": 0
                            },
                            "amountHT": {
                              "description": "Total HT de la ligne après la modification ; 0 après un retrait.",
                              "type": "number"
                            },
                            "amountTTC": {
                              "description": "Total TTC de la ligne après la modification ; 0 après un retrait.",
                              "type": "number"
                            }
                          },
                          "required": [
                            "optionId",
                            "previousQuantity",
                            "newQuantity",
                            "amountHT",
                            "amountTTC"
                          ]
                        },
                        "amendment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/AmendmentRef"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "overpayment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/Overpayment"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "priceChange",
                        "optionLine",
                        "amendment",
                        "overpayment"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`BOOKING_REFUSED`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `INVOICE_FINALIZED`, `OVERPAYMENT_RESOLUTION_REQUIRED`, `PRICE_CHANGED`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`, `SEPA_DEBIT_PENDING`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRefusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InvoiceFinalizedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OverpaymentResolutionRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PriceChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/SepaDebitPendingProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/modifications/remove-rental-option",
          "metadata": {
            "title": "Retirer une option d’une location",
            "sidebarTitle": "Retirer une option d’une location"
          }
        }
      },
      "put": {
        "operationId": "setRentalOptionQuantity",
        "summary": "Fixer la quantité d’une option",
        "description": "**Accès** : `rentals.write` · Fonctionnalité d’abonnement : `pricing.options` ([plans](https://docs.lexio.rent/authentification))\n\nFixe la quantité finale (1 à 100) d’une option standard sur une location `RESERVED` ou `IN_PROGRESS` : ligne créée si besoin, même quantité sans effet. Pour retirer la ligne : `DELETE`.\n\n**Prix** : unités gardées à leur prix, ajoutées au tarif du jour, retirées au dernier prix vendu. Sur `IN_PROGRESS`, avenant si le changement est significatif (`effects.amendment`).\n\n**Refus**\n- 404 `resource: OPTION` : option inconnue ; 400 `not_applicable` : option conducteur (gérée dans Lexio).\n- En hausse : `REFERENCE_INACTIVE` (désactivée), `OPTION_OUT_OF_SEASON`, `OPTION_QUANTITY_EXCEEDED` (au-delà du maximum), `OPTION_UNAVAILABLE` (stock insuffisant), `BOOKING_REFUSED` (contrat au mois).\n- En baisse : `INVOICE_FINALIZED` (facture finalisée en comptabilité).\n- `SERVICE_UNAVAILABLE` : vérification comptable indisponible, à rejouer.\n\n**Aperçu et prix** : `?dryRun=true`, `expectedTotalTTC` (`PRICE_CHANGED`), `overpaymentResolution` (`OVERPAYMENT_RESOLUTION_REQUIRED`, `SEPA_DEBIT_PENDING`) : voir [Idempotence](https://docs.lexio.rent/idempotence).",
        "tags": [
          "Modifications"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "x-required-feature": "pricing.options",
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "path",
            "name": "optionId",
            "schema": {
              "examples": [
                "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de l’option."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu, la même action annulée en fin de transaction.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu, la même action annulée en fin de transaction."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "quantity": 2,
                "expectedTotalTTC": 332.4
              },
              "schema": {
                "type": "object",
                "properties": {
                  "quantity": {
                    "description": "Quantité finale de la ligne (0 → 400 too_small : pour retirer, utiliser DELETE).",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100
                  },
                  "expectedTotalTTC": {
                    "description": "Total TTC affiché par l’aperçu (dryRun). Écart d’au moins une unité mineure avec le total recalculé → 409 PRICE_CHANGED.",
                    "type": "number"
                  },
                  "overpaymentResolution": {
                    "description": "REFUND_PENDING : remboursement PENDING par virement du trop-perçu ; NO_REFUND : le loueur le conserve. Exige le scope payments.refund.",
                    "type": "string",
                    "enum": [
                      "REFUND_PENDING",
                      "NO_REFUND"
                    ]
                  }
                },
                "required": [
                  "quantity"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Fixer la quantité d’une option",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "priceChange": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/PriceChange"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "optionLine": {
                          "description": "Ligne modifiée : les unités conservées gardent leur prix figé, les unités ajoutées prennent le tarif du jour.",
                          "type": "object",
                          "properties": {
                            "optionId": {
                              "examples": [
                                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                              ],
                              "type": "string",
                              "format": "uuid"
                            },
                            "previousQuantity": {
                              "type": "integer",
                              "minimum": 0
                            },
                            "newQuantity": {
                              "description": "0 après un retrait.",
                              "type": "integer",
                              "minimum": 0
                            },
                            "amountHT": {
                              "description": "Total HT de la ligne après la modification ; 0 après un retrait.",
                              "type": "number"
                            },
                            "amountTTC": {
                              "description": "Total TTC de la ligne après la modification ; 0 après un retrait.",
                              "type": "number"
                            }
                          },
                          "required": [
                            "optionId",
                            "previousQuantity",
                            "newQuantity",
                            "amountHT",
                            "amountTTC"
                          ]
                        },
                        "amendment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/AmendmentRef"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "overpayment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/Overpayment"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "priceChange",
                        "optionLine",
                        "amendment",
                        "overpayment"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`BOOKING_REFUSED`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `INVOICE_FINALIZED`, `OPTION_UNAVAILABLE`, `OVERPAYMENT_RESOLUTION_REQUIRED`, `PRICE_CHANGED`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`, `SEPA_DEBIT_PENDING`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRefusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InvoiceFinalizedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionUnavailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OverpaymentResolutionRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PriceChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/SepaDebitPendingProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `OPTION_OUT_OF_SEASON`, `OPTION_QUANTITY_EXCEEDED`, `REFERENCE_INACTIVE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionOutOfSeasonProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionQuantityExceededProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceInactiveProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/modifications/set-rental-option-quantity",
          "metadata": {
            "title": "Fixer la quantité d’une option",
            "sidebarTitle": "Fixer la quantité d’une option"
          }
        }
      }
    },
    "/rentals/{rentalId}/payments": {
      "get": {
        "operationId": "listRentalPayments",
        "summary": "Lister les paiements d’une location",
        "description": "**Accès** : `rentals.read`\n\nEncaissements, cautions et remboursements de la location, du plus récent au plus ancien (`paidAt` décroissant, puis `id`). Montants dans `currency`, la devise de la location ; `amount` est positif, le sens est porté par `type`, sauf un mouvement de caution au retour (`DEPOSIT` négatif : restitution ou retenue décidée dans Lexio). Une ligne historique de supplément ou de pénalité se lit `PAYMENT`. Seules les lignes `VALIDATED` hors `DEPOSIT` comptent dans le solde (`balance` de `GET /rentals/{rentalId}`) : `PAYMENT` en plus, `REFUND` en moins. Une clé partenaire ne lit que les locations de son `partnerCode` : toute autre répond 404.",
        "tags": [
          "Paiements"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les paiements d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Payment"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/paiements/list-rental-payments",
          "metadata": {
            "title": "Lister les paiements d’une location",
            "sidebarTitle": "Lister les paiements d’une location"
          }
        }
      },
      "post": {
        "operationId": "createRentalPayment",
        "summary": "Enregistrer un paiement",
        "description": "**Accès** : `payments.write` ou `payments.refund`\n\nEnregistre, validé, un encaissement (`PAYMENT`) ou une caution (`DEPOSIT`), scope `payments.write`, ou un remboursement (`REFUND`), scope `payments.refund`. Clé partenaire : `PAYMENT` `STRIPE` seulement (sinon 400 `not_applicable`).\n\n**Stripe** : PaymentIntent `succeeded` du compte Stripe de l’agence, dans la devise de la location, pour exactement `amount` ; sa metadata ne vise ni une autre location ni une autre agence et, pour une clé partenaire, porte ce `rentalId` ou votre `partnerCode`.\n\n**Refus**\n- `RENTAL_STATUS_NOT_ALLOWED` : statut hors `RESERVED`, `IN_PROGRESS`, `COMPLETED` (et `CANCELLED` pour un `REFUND`), `PENDING_APPROVAL` compris.\n- `PAYMENT_NOT_VERIFIED` (`reason`) : PaymentIntent non conforme ; `ALREADY_EXISTS` : déjà enregistré ; `SERVICE_UNAVAILABLE` : Stripe injoignable.\n- `PAYMENT_EXCEEDS_DUE` : `PAYMENT` au-delà du dû (SEPA en cours déduit).\n- `REFUND_EXCEEDS_PAID` : `REFUND` au-delà du net encaissé ou du créditable des factures.\n- `CREDIT_NOTE_NOT_ISSUABLE` : avoir refusé à l’émission.\n\n**Effets** : `effects.balance` relu après l’écriture ; un `REFUND` émet un avoir par facture émise créditable, la plus récente d’abord (`effects.creditNotes`, vide sinon).",
        "tags": [
          "Paiements"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "payments.write",
          "payments.refund"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "type": "PAYMENT",
                "amount": 308.4,
                "method": "TRANSFER"
              },
              "schema": {
                "oneOf": [
                  {
                    "description": "Encaissement.",
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "PAYMENT"
                      },
                      "amount": {
                        "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                        "type": "number"
                      },
                      "providerReference": {
                        "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 64
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "method": {
                        "description": "Moyen de paiement ; `STRIPE` exige `stripePaymentIntentId`.",
                        "type": "string",
                        "enum": [
                          "CREDIT_CARD",
                          "CASH",
                          "TRANSFER",
                          "CHECK",
                          "MOBILE_MONEY",
                          "OTHER",
                          "STRIPE"
                        ]
                      },
                      "paidAt": {
                        "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`). Refusée avec `STRIPE` : la date est lue sur le PaymentIntent.",
                        "examples": [
                          "2026-11-10T10:00:00+01:00"
                        ],
                        "type": "string"
                      },
                      "stripePaymentIntentId": {
                        "description": "PaymentIntent `pi_…` encaissé sur le compte Stripe de l’agence, dans la devise de la location et pour `amount` exactement ; requis avec `STRIPE`, refusé sinon.",
                        "type": "string",
                        "maxLength": 255,
                        "pattern": "^pi_[A-Za-z0-9]+$"
                      },
                      "isPreAuthorization": {}
                    },
                    "required": [
                      "type",
                      "amount",
                      "method"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "description": "Caution, encaissée ou en empreinte ; hors solde de la location.",
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "DEPOSIT"
                      },
                      "amount": {
                        "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                        "type": "number"
                      },
                      "providerReference": {
                        "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 64
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "method": {
                        "description": "Moyen de la caution.",
                        "type": "string",
                        "enum": [
                          "CREDIT_CARD",
                          "CASH",
                          "TRANSFER",
                          "CHECK",
                          "SWIKLY",
                          "TYLLT",
                          "MOBILE_MONEY",
                          "OTHER"
                        ]
                      },
                      "isPreAuthorization": {
                        "description": "true : empreinte (montant bloqué, non débité), admise seulement avec un moyen qui la permet (sinon 400 `not_applicable`) et jamais sur une location au mois.",
                        "default": false,
                        "type": "boolean"
                      },
                      "paidAt": {
                        "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`).",
                        "examples": [
                          "2026-11-10T10:00:00+01:00"
                        ],
                        "type": "string"
                      },
                      "stripePaymentIntentId": {}
                    },
                    "required": [
                      "type",
                      "amount",
                      "method"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "description": "Remboursement, déduit du net encaissé ; émet les avoirs nécessaires.",
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "REFUND"
                      },
                      "amount": {
                        "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                        "type": "number"
                      },
                      "providerReference": {
                        "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 64
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "notes": {
                        "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 500
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "method": {
                        "description": "Moyen du remboursement. `STRIPE` est refusé (400 `not_applicable`) : remboursez chez Stripe ; Lexio l’enregistre à réception de l’événement Stripe, sauf si l’équipe du loueur l’a déjà saisi à la main.",
                        "type": "string",
                        "enum": [
                          "CREDIT_CARD",
                          "CASH",
                          "TRANSFER",
                          "CHECK",
                          "MOBILE_MONEY",
                          "OTHER",
                          "STRIPE"
                        ]
                      },
                      "paidAt": {
                        "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`).",
                        "examples": [
                          "2026-11-10T10:00:00+01:00"
                        ],
                        "type": "string"
                      },
                      "stripePaymentIntentId": {},
                      "isPreAuthorization": {}
                    },
                    "required": [
                      "type",
                      "amount",
                      "method"
                    ],
                    "additionalProperties": false
                  }
                ],
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Enregistrer un paiement",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Payment"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "balance": {
                          "description": "Solde de la location, relu après l’écriture.",
                          "examples": [
                            {
                              "totalTTC": 308.4,
                              "paidAmount": 308.4,
                              "dueAmount": 0,
                              "overpaidAmount": 0
                            }
                          ],
                          "$ref": "#/components/schemas/Balance"
                        },
                        "creditNotes": {
                          "description": "Avoirs émis par un remboursement sur les factures émises, de la plus récente à la plus ancienne ; vide hors `REFUND` ou sans facture créditable.",
                          "examples": [
                            []
                          ],
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/InvoiceRef"
                          }
                        }
                      },
                      "required": [
                        "balance",
                        "creditNotes"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `CREDIT_NOTE_NOT_ISSUABLE`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `RENTAL_BUSY`, `RENTAL_STATUS_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/CreditNoteNotIssuableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `PAYMENT_EXCEEDS_DUE`, `PAYMENT_NOT_VERIFIED`, `REFUND_EXCEEDS_PAID`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PaymentExceedsDueProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PaymentNotVerifiedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RefundExceedsPaidProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/paiements/create-rental-payment",
          "metadata": {
            "title": "Enregistrer un paiement",
            "sidebarTitle": "Enregistrer un paiement"
          }
        }
      }
    },
    "/rentals/{rentalId}/payments/{paymentId}": {
      "delete": {
        "operationId": "deleteRentalPayment",
        "summary": "Supprimer un paiement saisi par erreur",
        "description": "**Accès** : `payments.refund`\n\nCorrige une saisie erronée : la transaction est supprimée, rien n’est émis. Admis sur une location `RESERVED`, `IN_PROGRESS` ou `COMPLETED`, sinon 409 `RENTAL_STATUS_NOT_ALLOWED`.\n\n**Refus**\n- Paiement inconnu ou d’une autre location → 404 (`resource: PAYMENT`).\n- Paiement validé encaissé par Stripe (`stripePaymentIntentId`) → 409 `PAYMENT_PROVIDER_MANAGED` : il se rembourse chez Stripe ; Lexio l’enregistre à réception de l’événement Stripe, sauf si l’équipe du loueur l’a déjà saisi à la main.\n- 409 `INVOICE_FINALIZED` : facture finalisée en comptabilité, paiement rattaché à une facture émise ou couvrant une facture émise historique (enregistrez alors un `REFUND`, qui émet un avoir), ou remboursement validé alors qu’un avoir de remboursement existe sur la location.\n- Prélèvement SEPA en cours de règlement → 409 `SEPA_DEBIT_PENDING`.\n- État comptable illisible → 503 `SERVICE_UNAVAILABLE` (`dependency: ACCOUNTING`), à rejouer.\n\n**Effets** : statut de paiement recalculé, reçus régénérés (supprimés s’il ne reste rien), factures brouillon mises à jour.",
        "tags": [
          "Paiements"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "payments.refund"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "path",
            "name": "paymentId",
            "schema": {
              "examples": [
                "e8a1b2c3-d4e5-4f60-9a7b-8c9d0e1f2a3b"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du paiement."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `INVOICE_FINALIZED`, `PAYMENT_PROVIDER_MANAGED`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`, `SEPA_DEBIT_PENDING`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InvoiceFinalizedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PaymentProviderManagedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/SepaDebitPendingProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/paiements/delete-rental-payment",
          "metadata": {
            "title": "Supprimer un paiement saisi par erreur",
            "sidebarTitle": "Supprimer un paiement saisi par erreur"
          }
        }
      },
      "get": {
        "operationId": "getRentalPayment",
        "summary": "Lire un paiement",
        "description": "**Accès** : `rentals.read`\n\nMême représentation que la liste. Un paiement d’une autre location, même de la vôtre, répond 404 (`resource: PAYMENT`) ; une location hors du périmètre de la clé répond 404 (`resource: RENTAL`).",
        "tags": [
          "Paiements"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "path",
            "name": "paymentId",
            "schema": {
              "examples": [
                "e8a1b2c3-d4e5-4f60-9a7b-8c9d0e1f2a3b"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du paiement."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire un paiement",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Payment"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/paiements/get-rental-payment",
          "metadata": {
            "title": "Lire un paiement",
            "sidebarTitle": "Lire un paiement"
          }
        }
      }
    },
    "/rentals/{rentalId}/photo-uploads": {
      "post": {
        "operationId": "createRentalPhotoUploads",
        "summary": "Préparer le téléversement de photos d’état des lieux",
        "description": "**Accès** : `rentals.operate`\n\nÉtape 1 sur 3 du dépôt de photos d’état des lieux, photo du compteur comprise (vue `DASHBOARD`). Pour chaque élément (phase, vue, format, taille exacte), la réponse donne, dans l’ordre de `items`, un `uploadId` et une URL signée.\n\n**Suite**\n1. Envoyez chaque fichier par `PUT` sur `url`, avec exactement les `headers` fournis, avant `expiresAt` (15 minutes).\n2. Enregistrez-les par [`POST /rentals/{rentalId}/photos`](https://docs.lexio.rent/api-reference/depart-et-retour/register-rental-photos) avant `registrationExpiresAt` (24 h).\n\n**Statuts admis** : `IN_PROGRESS` et `COMPLETED` ; `RESERVED` pour la seule phase `DEPARTURE`, avant le départ. Sinon 409 `RENTAL_STATUS_NOT_ALLOWED`.\n\n**Refus** : vue hors du tour du véhicule ou compteur en `INCIDENT` → 400 `not_applicable` ; deux photos du compteur de même phase → 400 `duplicate` ; signature impossible → 503 `SERVICE_UNAVAILABLE`.",
        "tags": [
          "Départ et retour"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.operate"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "items": [
                  {
                    "phase": "DEPARTURE",
                    "view": "DASHBOARD",
                    "format": "JPEG",
                    "sizeBytes": 2483117
                  },
                  {
                    "phase": "DEPARTURE",
                    "view": "FRONT_LEFT",
                    "format": "HEIC",
                    "sizeBytes": 3120044
                  }
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "items": {
                    "description": "Photos à préparer, 50 au plus ; la réponse suit cet ordre.",
                    "minItems": 1,
                    "maxItems": 50,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "phase": {
                          "description": "Moment de la prise : départ, retour, ou sinistre (`INCIDENT`).",
                          "type": "string",
                          "enum": [
                            "DEPARTURE",
                            "RETURN",
                            "INCIDENT"
                          ]
                        },
                        "view": {
                          "description": "Vue du tour ; null = photo libre. Hors des vues du profil de la location → 400 not_applicable ; DASHBOARD (compteur) refusé en INCIDENT.",
                          "default": null,
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "FRONT",
                                "FRONT_LEFT",
                                "REAR_LEFT",
                                "REAR",
                                "REAR_RIGHT",
                                "FRONT_RIGHT",
                                "WINDSHIELD",
                                "INTERIOR",
                                "TRUNK",
                                "DASHBOARD",
                                "TW_FRONT",
                                "TW_COCKPIT",
                                "TW_LEFT",
                                "TW_RIGHT",
                                "TW_REAR",
                                "TW_SADDLE",
                                "WHEEL_FRONT_LEFT",
                                "DOOR_FRONT_LEFT",
                                "DOOR_REAR_LEFT",
                                "WHEEL_REAR_LEFT",
                                "WHEEL_REAR_RIGHT",
                                "DOOR_REAR_RIGHT",
                                "DOOR_FRONT_RIGHT",
                                "WHEEL_FRONT_RIGHT",
                                "REAR_SEATS"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "format": {
                          "description": "Format réel du fichier, vérifié à ses octets à l’enregistrement.",
                          "type": "string",
                          "enum": [
                            "JPEG",
                            "PNG",
                            "WEBP",
                            "HEIC",
                            "HEIF"
                          ]
                        },
                        "sizeBytes": {
                          "description": "Taille exacte du fichier en octets, signée dans Content-Length.",
                          "type": "integer",
                          "minimum": 1024,
                          "maximum": 15728640
                        }
                      },
                      "required": [
                        "phase",
                        "format",
                        "sizeBytes"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "items"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Préparer le téléversement de photos d’état des lieux",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uploadId": {
                            "examples": [
                              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                            ],
                            "description": "À renvoyer à `POST /rentals/{rentalId}/photos`.",
                            "type": "string",
                            "format": "uuid"
                          },
                          "method": {
                            "description": "Méthode HTTP de l’envoi du fichier.",
                            "type": "string",
                            "enum": [
                              "PUT"
                            ]
                          },
                          "url": {
                            "description": "URL signée, à appeler telle quelle avec method et headers. Opaque, à ne pas stocker.",
                            "type": "string",
                            "format": "uri"
                          },
                          "headers": {
                            "description": "En-têtes signés, à envoyer à l’identique : un autre type ou une autre taille est refusé.",
                            "minItems": 2,
                            "maxItems": 2,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "name": {
                                  "description": "Nom de l’en-tête.",
                                  "type": "string",
                                  "enum": [
                                    "Content-Type",
                                    "Content-Length"
                                  ]
                                },
                                "value": {
                                  "description": "Valeur à envoyer telle quelle.",
                                  "type": "string",
                                  "minLength": 1
                                }
                              },
                              "required": [
                                "name",
                                "value"
                              ]
                            }
                          },
                          "expiresAt": {
                            "examples": [
                              "2026-11-10T10:00:00+01:00"
                            ],
                            "description": "Fin de validité de `url` (15 minutes).",
                            "type": "string",
                            "format": "date-time"
                          },
                          "registrationExpiresAt": {
                            "examples": [
                              "2026-11-10T10:00:00+01:00"
                            ],
                            "description": "Date limite de `POST /rentals/{rentalId}/photos` (24 h) ; le fichier est ensuite purgé.",
                            "type": "string",
                            "format": "date-time"
                          }
                        },
                        "required": [
                          "uploadId",
                          "method",
                          "url",
                          "headers",
                          "expiresAt",
                          "registrationExpiresAt"
                        ]
                      }
                    },
                    "effects": {
                      "type": "object",
                      "properties": {}
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/depart-et-retour/create-rental-photo-uploads",
          "metadata": {
            "title": "Préparer le téléversement de photos d’état des lieux",
            "sidebarTitle": "Préparer le téléversement de photos d’état des lieux"
          }
        }
      }
    },
    "/rentals/{rentalId}/photos": {
      "get": {
        "operationId": "listRentalPhotos",
        "summary": "Lister les photos d’état des lieux d’une location",
        "description": "**Accès** : `rentals.read`\n\nListe les photos de départ, de retour et de sinistre d’une location, de la plus récente à la plus ancienne (`takenAt` décroissant, puis `id`) ; `phase` filtre. Les pièces jointes ajoutées dans Lexio ne sont jamais listées.\n\n- `original` et `annotated` sont des URL signées valables une heure : rappelez la liste ou [`GET …/photos/{photoId}`](https://docs.lexio.rent/api-reference/depart-et-retour/get-rental-photo) pour en obtenir de neuves.\n- Tant que `processingStatus` vaut `PENDING`, `original` peut encore changer et `annotated` vaut `null`.\n- Une URL impossible à signer fait échouer la requête : 503 `SERVICE_UNAVAILABLE`, à rejouer.\n\nUne clé partenaire ne lit que les locations de son `partnerCode` : toute autre répond 404.",
        "tags": [
          "Départ et retour"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "phase",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : DEPARTURE, RETURN, INCIDENT."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les photos d’état des lieux d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Photo"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/depart-et-retour/list-rental-photos",
          "metadata": {
            "title": "Lister les photos d’état des lieux d’une location",
            "sidebarTitle": "Lister les photos d’état des lieux d’une location"
          }
        }
      },
      "post": {
        "operationId": "registerRentalPhotos",
        "summary": "Enregistrer des photos d’état des lieux téléversées",
        "description": "**Accès** : `rentals.operate`\n\nÉtape 3 sur 3 : enregistre, tout ou rien, les fichiers envoyés par `PUT`, désignés par `uploadId` ; `data` suit l’ordre de `items`.\n\n**Contrôles** : chaque fichier est vérifié avant toute écriture (reçu, taille, format réel). Un élément refusé fait refuser le lot en 422 `UPLOAD_INVALID`, un `errors[]` par élément : `upload_incomplete` (refaites le `PUT`), `upload_expired` (préparez un nouveau téléversement), `too_small`, `too_big`, `invalid_format`, `upload_conflict` (déjà enregistré autrement), `duplicate`. `uploadId` inconnu ou retiré depuis → 422 `REFERENCE_NOT_FOUND`.\n\n**Rejeu** : l’identité est `uploadId`, sans `Idempotency-Key` ; le même lot renvoie les mêmes photos.\n\n**Compteur** : la photo `DASHBOARD` remplace celle de sa phase (`effects.replacedPhotoIds`). Les photos `DEPARTURE` envoyées avant le départ figurent dans le contrat de départ.",
        "tags": [
          "Départ et retour"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.operate"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "items": [
                  {
                    "uploadId": "3f6b1c2a-7d8e-4f90-a1b2-c3d4e5f60718",
                    "takenAt": "2026-06-10T09:58:12+02:00"
                  },
                  {
                    "uploadId": "8a9b0c1d-2e3f-4a5b-9c6d-7e8f9a0b1c2d",
                    "takenAt": "2026-06-10T09:59:40+02:00",
                    "annotations": [
                      {
                        "x": 0.42,
                        "y": 0.61,
                        "width": 0.12,
                        "height": 0.08,
                        "label": "Rayure",
                        "comment": "Jante avant gauche"
                      }
                    ]
                  }
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "items": {
                    "description": "Fichiers à enregistrer, 50 au plus, chacun une fois ; tout ou rien.",
                    "minItems": 1,
                    "maxItems": 50,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "uploadId": {
                          "examples": [
                            "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                          ],
                          "description": "Identifiant renvoyé par photo-uploads.",
                          "type": "string",
                          "format": "uuid"
                        },
                        "takenAt": {
                          "description": "Instant de prise de vue, RFC 3339 avec décalage (sans → 400 offset_required). Défaut : instant de l’enregistrement. Borné à [création de la location ; maintenant + 5 min].",
                          "examples": [
                            "2026-11-10T10:00:00+01:00"
                          ],
                          "type": "string"
                        },
                        "annotations": {
                          "description": "Zones signalées sur la photo ; rien n’est borné ni tronqué en silence.",
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "x": {
                                "description": "Bord gauche, fraction de la largeur.",
                                "type": "number",
                                "minimum": 0,
                                "maximum": 1
                              },
                              "y": {
                                "description": "Bord haut, fraction de la hauteur.",
                                "type": "number",
                                "minimum": 0,
                                "maximum": 1
                              },
                              "width": {
                                "description": "Largeur, fraction de la largeur.",
                                "type": "number",
                                "exclusiveMinimum": 0,
                                "maximum": 1
                              },
                              "height": {
                                "description": "Hauteur, fraction de la hauteur.",
                                "type": "number",
                                "exclusiveMinimum": 0,
                                "maximum": 1
                              },
                              "label": {
                                "description": "Classification saisie (ex. « Rayure »), non contractuelle.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 50
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "comment": {
                                "description": "Commentaire libre ; null si absent.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "x",
                              "y",
                              "width",
                              "height"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "uploadId"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "items"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Enregistrer des photos d’état des lieux téléversées",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Photo"
                      }
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "replacedPhotoIds": {
                          "description": "Photos du compteur remplacées, supprimées avec leurs fichiers : au plus une par phase, davantage si l’agence en avait déposé plusieurs pour une même phase depuis Lexio.",
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "examples": [
                              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                            ],
                            "type": "string",
                            "format": "uuid"
                          }
                        }
                      },
                      "required": [
                        "replacedPhotoIds"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`, `UPLOAD_INVALID`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    },
                    {
                      "$ref": "#/components/schemas/UploadInvalidProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/depart-et-retour/register-rental-photos",
          "metadata": {
            "title": "Enregistrer des photos d’état des lieux téléversées",
            "sidebarTitle": "Enregistrer des photos d’état des lieux téléversées"
          }
        }
      }
    },
    "/rentals/{rentalId}/photos/{photoId}": {
      "delete": {
        "operationId": "deleteRentalPhoto",
        "summary": "Supprimer une photo d’état des lieux",
        "description": "**Accès** : `rentals.operate`\n\nSupprime une photo d’état des lieux ; 204 sans corps. La suppression est tracée au journal d’audit ; les fichiers sont purgés ensuite s’ils ne servent à aucune autre photo.\n\n**Statuts admis** : `IN_PROGRESS` et `COMPLETED` ; `RESERVED` pour une photo `DEPARTURE`. Sinon 409 `RENTAL_STATUS_NOT_ALLOWED`.\n\n**404** (`resource: PHOTO`) : photo inconnue, d’une autre location, pièce jointe ajoutée dans Lexio, ou suppression rejouée sans `Idempotency-Key` : traitez ce 404 comme un succès s’il s’agit d’un rejeu.\n\nLe contrat de départ est figé au départ : supprimer ensuite une photo de départ ne le modifie pas.",
        "tags": [
          "Départ et retour"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.operate"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "path",
            "name": "photoId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la photo."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/depart-et-retour/delete-rental-photo",
          "metadata": {
            "title": "Supprimer une photo d’état des lieux",
            "sidebarTitle": "Supprimer une photo d’état des lieux"
          }
        }
      },
      "get": {
        "operationId": "getRentalPhoto",
        "summary": "Lire une photo d’état des lieux",
        "description": "**Accès** : `rentals.read`\n\nRenvoie une photo, dans la même représentation que la liste : pour attendre `processingStatus` `READY` ou obtenir de nouvelles URL signées. Interrogez avec un délai croissant (1 s, 2 s, 4 s…) et un plafond de quelques minutes : une photo dont l’image annotée n’a pas pu être produite peut rester `PENDING`, `original` restant lisible.\n\n**Refus** : photo inconnue, d’une autre location ou pièce jointe ajoutée dans Lexio → 404 (`resource: PHOTO`) ; location hors du périmètre de la clé → 404 (`resource: RENTAL`) ; signature impossible → 503 `SERVICE_UNAVAILABLE`.",
        "tags": [
          "Départ et retour"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "path",
            "name": "photoId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la photo."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire une photo d’état des lieux",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Photo"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          },
          "503": {
            "description": "`SERVICE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/depart-et-retour/get-rental-photo",
          "metadata": {
            "title": "Lire une photo d’état des lieux",
            "sidebarTitle": "Lire une photo d’état des lieux"
          }
        }
      }
    },
    "/rentals/{rentalId}/pickup": {
      "post": {
        "operationId": "pickUpRental",
        "summary": "Départ du véhicule",
        "description": "**Accès** : `rentals.operate`\n\nRemet le véhicule au client : la location `RESERVED` passe `IN_PROGRESS` avec état des lieux de départ, compteur, signature, consentement aux CGL et paiements du comptoir (tout ou rien). Des `payments` exigent aussi le scope `payments.write`.\n\n**Refus**\n- `PAYMENT_EXCEEDS_DUE` : encaissements au-delà du reste dû (caution non comprise).\n- 400 `not_applicable` : empreinte (`isPreAuthorization`) sans moyen qui le permet, ou sur une location au mois.\n- `CUSTOMER_BLOCKED` : client ou conducteur bloqué.\n- `VEHICLE_UNAVAILABLE` : véhicule inactif, archivé, en panne ou, si l’agence bloque le départ, entretien dépassé.\n- `RENTAL_STATUS_NOT_ALLOWED` : location pas `RESERVED`, départ déjà fait compris.\n\n`?dryRun=true` : mêmes contrôles sans écriture, le pré-contrôle du départ.\n\n**Contrat** : généré après la réponse, envoyé une fois au client par email, lisible par `GET /rentals/{rentalId}/contract`. Il fige les photos de départ déjà enregistrées : envoyez-les avant (`…/photo-uploads`, puis `…/photos`).",
        "tags": [
          "Départ et retour"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.operate"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu. Mêmes contrôles et même réponse que le départ réel, puis rien n’est écrit : c’est le pré-contrôle du départ.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu. Mêmes contrôles et même réponse que le départ réel, puis rien n’est écrit : c’est le pré-contrôle du départ."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "inspection": {
                  "odometerKm": 48210,
                  "fuelLevelPercent": 100,
                  "checklist": {
                    "interiorClean": "OK",
                    "exteriorClean": "OK",
                    "vehiclePapers": "OK",
                    "safetyKit": "OK",
                    "levels": "OK",
                    "skippedViews": []
                  },
                  "damages": [
                    {
                      "id": "dmg-1",
                      "view": "FRONT_LEFT",
                      "type": "SCRATCH",
                      "description": "Rayure de 5 cm sur la portière avant gauche"
                    }
                  ],
                  "notes": null
                },
                "signature": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",
                "termsAccepted": true,
                "payments": [
                  {
                    "type": "DEPOSIT",
                    "amount": 800,
                    "method": "CREDIT_CARD",
                    "isPreAuthorization": true
                  }
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "inspection": {
                    "type": "object",
                    "properties": {
                      "odometerKm": {
                        "description": "Relevé du compteur, entier (une chaîne → 400 invalid_type).",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10000000
                      },
                      "fuelLevelPercent": {
                        "description": "Carburant ou batterie selon l’énergie du véhicule ; null = non relevé.",
                        "default": null,
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 100
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "checklist": {
                        "description": "Omis : aucun contrôle ni tour photo enregistré pour cet état des lieux.",
                        "type": "object",
                        "properties": {
                          "interiorClean": {
                            "description": "Propreté intérieure (voiture seulement). Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "exteriorClean": {
                            "description": "Propreté extérieure. Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "vehiclePapers": {
                            "description": "Papiers du véhicule. Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "safetyKit": {
                            "description": "Kit de sécurité. Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "levels": {
                            "description": "Niveaux. Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "skippedViews": {
                            "description": "Vues du tour non photographiées. Vue hors des vues figées de la location → 400 not_applicable.",
                            "default": [],
                            "maxItems": 32,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "FRONT",
                                "FRONT_LEFT",
                                "REAR_LEFT",
                                "REAR",
                                "REAR_RIGHT",
                                "FRONT_RIGHT",
                                "WINDSHIELD",
                                "INTERIOR",
                                "TRUNK",
                                "DASHBOARD",
                                "TW_FRONT",
                                "TW_COCKPIT",
                                "TW_LEFT",
                                "TW_RIGHT",
                                "TW_REAR",
                                "TW_SADDLE",
                                "WHEEL_FRONT_LEFT",
                                "DOOR_FRONT_LEFT",
                                "DOOR_REAR_LEFT",
                                "WHEEL_REAR_LEFT",
                                "WHEEL_REAR_RIGHT",
                                "DOOR_REAR_RIGHT",
                                "DOOR_FRONT_RIGHT",
                                "WHEEL_FRONT_RIGHT",
                                "REAR_SEATS"
                              ]
                            }
                          }
                        },
                        "additionalProperties": false
                      },
                      "damages": {
                        "maxItems": 50,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "description": "Facultatif : restitué tel quel et citable au retour. Omis : généré par le serveur.",
                              "type": "string",
                              "pattern": "^[A-Za-z0-9_-]{1,64}$"
                            },
                            "view": {
                              "description": "Position du dommage ; le serveur en dérive la zone. Vue hors du profil figé ou sans zone extérieure (INTERIOR, REAR_SEATS, TRUNK, DASHBOARD) → 400 not_applicable : décrivez ce constat dans notes.",
                              "type": "string",
                              "enum": [
                                "FRONT",
                                "FRONT_LEFT",
                                "REAR_LEFT",
                                "REAR",
                                "REAR_RIGHT",
                                "FRONT_RIGHT",
                                "WINDSHIELD",
                                "INTERIOR",
                                "TRUNK",
                                "DASHBOARD",
                                "TW_FRONT",
                                "TW_COCKPIT",
                                "TW_LEFT",
                                "TW_RIGHT",
                                "TW_REAR",
                                "TW_SADDLE",
                                "WHEEL_FRONT_LEFT",
                                "DOOR_FRONT_LEFT",
                                "DOOR_REAR_LEFT",
                                "WHEEL_REAR_LEFT",
                                "WHEEL_REAR_RIGHT",
                                "DOOR_REAR_RIGHT",
                                "DOOR_FRONT_RIGHT",
                                "WHEEL_FRONT_RIGHT",
                                "REAR_SEATS"
                              ]
                            },
                            "type": {
                              "type": "string",
                              "enum": [
                                "SCRATCH",
                                "DENT",
                                "CRACK",
                                "BROKEN",
                                "STAIN",
                                "OTHER"
                              ]
                            },
                            "description": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 500
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "view",
                            "type"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 2000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "odometerKm"
                    ],
                    "additionalProperties": false
                  },
                  "signature": {
                    "description": "PNG en data URL (375 000 octets décodés au plus). Le serveur vérifie la signature binaire PNG après décodage, sinon 400 invalid_format.",
                    "type": "string",
                    "maxLength": 500000,
                    "pattern": "^data:image\\/png;base64,[A-Za-z0-9+/]+={0,2}$"
                  },
                  "termsAccepted": {
                    "description": "Consentement explicite aux CGL, horodaté à actualStartAt ; gèle les CGL de la location. false → 400 invalid_value.",
                    "type": "boolean",
                    "const": true
                  },
                  "actualStartAt": {
                    "description": "Instant RFC 3339 AVEC décalage (sans → 400 offset_required). Défaut : maintenant. Borné à [création de la location ; maintenant + 5 min], sinon 400 out_of_range.",
                    "examples": [
                      "2026-11-10T10:00:00+01:00"
                    ],
                    "type": "string"
                  },
                  "payments": {
                    "description": "Encaissements (PAYMENT) et caution (DEPOSIT, empreinte avec isPreAuthorization) remis au départ, rattachés à son état des lieux. paidAt omis = actualStartAt. Σ PAYMENT au-delà du reste dû (prélèvements SEPA en cours déduits) → 422 PAYMENT_EXCEEDS_DUE ; REFUND ou STRIPE → 400 not_applicable.",
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "description": "Encaissement.",
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "PAYMENT"
                            },
                            "amount": {
                              "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                              "type": "number"
                            },
                            "providerReference": {
                              "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "notes": {
                              "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 500
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "method": {
                              "description": "Moyen de paiement ; `STRIPE` exige `stripePaymentIntentId`.",
                              "type": "string",
                              "enum": [
                                "CREDIT_CARD",
                                "CASH",
                                "TRANSFER",
                                "CHECK",
                                "MOBILE_MONEY",
                                "OTHER",
                                "STRIPE"
                              ]
                            },
                            "paidAt": {
                              "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`). Refusée avec `STRIPE` : la date est lue sur le PaymentIntent.",
                              "examples": [
                                "2026-11-10T10:00:00+01:00"
                              ],
                              "type": "string"
                            },
                            "stripePaymentIntentId": {
                              "description": "PaymentIntent `pi_…` encaissé sur le compte Stripe de l’agence, dans la devise de la location et pour `amount` exactement ; requis avec `STRIPE`, refusé sinon.",
                              "type": "string",
                              "maxLength": 255,
                              "pattern": "^pi_[A-Za-z0-9]+$"
                            },
                            "isPreAuthorization": {}
                          },
                          "required": [
                            "type",
                            "amount",
                            "method"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "description": "Caution, encaissée ou en empreinte ; hors solde de la location.",
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "DEPOSIT"
                            },
                            "amount": {
                              "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                              "type": "number"
                            },
                            "providerReference": {
                              "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "notes": {
                              "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 500
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "method": {
                              "description": "Moyen de la caution.",
                              "type": "string",
                              "enum": [
                                "CREDIT_CARD",
                                "CASH",
                                "TRANSFER",
                                "CHECK",
                                "SWIKLY",
                                "TYLLT",
                                "MOBILE_MONEY",
                                "OTHER"
                              ]
                            },
                            "isPreAuthorization": {
                              "description": "true : empreinte (montant bloqué, non débité), admise seulement avec un moyen qui la permet (sinon 400 `not_applicable`) et jamais sur une location au mois.",
                              "default": false,
                              "type": "boolean"
                            },
                            "paidAt": {
                              "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`).",
                              "examples": [
                                "2026-11-10T10:00:00+01:00"
                              ],
                              "type": "string"
                            },
                            "stripePaymentIntentId": {}
                          },
                          "required": [
                            "type",
                            "amount",
                            "method"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "description": "Remboursement, déduit du net encaissé ; émet les avoirs nécessaires.",
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "REFUND"
                            },
                            "amount": {
                              "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                              "type": "number"
                            },
                            "providerReference": {
                              "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "notes": {
                              "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 500
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "method": {
                              "description": "Moyen du remboursement. `STRIPE` est refusé (400 `not_applicable`) : remboursez chez Stripe ; Lexio l’enregistre à réception de l’événement Stripe, sauf si l’équipe du loueur l’a déjà saisi à la main.",
                              "type": "string",
                              "enum": [
                                "CREDIT_CARD",
                                "CASH",
                                "TRANSFER",
                                "CHECK",
                                "MOBILE_MONEY",
                                "OTHER",
                                "STRIPE"
                              ]
                            },
                            "paidAt": {
                              "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`).",
                              "examples": [
                                "2026-11-10T10:00:00+01:00"
                              ],
                              "type": "string"
                            },
                            "stripePaymentIntentId": {},
                            "isPreAuthorization": {}
                          },
                          "required": [
                            "type",
                            "amount",
                            "method"
                          ],
                          "additionalProperties": false
                        }
                      ],
                      "type": "object"
                    }
                  }
                },
                "required": [
                  "inspection",
                  "signature",
                  "termsAccepted"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Départ du véhicule",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "createdPayments": {
                          "description": "Dans l’ordre de la requête.",
                          "examples": [
                            [
                              {
                                "id": "b1c2d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e",
                                "rentalId": "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f",
                                "number": "CAU-2026.11-0042",
                                "type": "DEPOSIT",
                                "amount": 800,
                                "currency": "EUR",
                                "method": "CREDIT_CARD",
                                "status": "VALIDATED",
                                "isPreAuthorization": true,
                                "paidAt": "2026-11-10T10:05:00+01:00",
                                "createdAt": "2026-11-10T10:05:02+01:00",
                                "providerReference": null,
                                "stripePaymentIntentId": null,
                                "notes": null
                              }
                            ]
                          ],
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "description": "Paiement créé par l’action, même forme que `Payment`.",
                            "type": "object",
                            "properties": {
                              "id": {
                                "description": "null uniquement en aperçu (`dryRun`).",
                                "anyOf": [
                                  {
                                    "examples": [
                                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                                    ],
                                    "type": "string",
                                    "format": "uuid"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "rentalId": {
                                "examples": [
                                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                                ],
                                "description": "Location du paiement.",
                                "type": "string",
                                "format": "uuid"
                              },
                              "number": {
                                "description": "null uniquement en aperçu (`dryRun`).",
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "type": {
                                "description": "`PAYMENT` : encaissement ; `DEPOSIT` : caution ; `REFUND` : remboursement.",
                                "type": "string",
                                "enum": [
                                  "PAYMENT",
                                  "DEPOSIT",
                                  "REFUND"
                                ]
                              },
                              "amount": {
                                "description": "Montant réellement encaissé, bloqué ou remboursé, dans `currency` ; positif, le sens est porté par `type`. Seul un mouvement de caution enregistré dans Lexio au retour (restitution ou retenue) est négatif.",
                                "type": "number"
                              },
                              "currency": {
                                "description": "Devise de la location.",
                                "examples": [
                                  "EUR"
                                ],
                                "type": "string",
                                "enum": [
                                  "EUR",
                                  "XPF",
                                  "CHF",
                                  "CAD",
                                  "GBP",
                                  "USD",
                                  "XOF"
                                ]
                              },
                              "method": {
                                "description": "Moyen de paiement.",
                                "type": "string",
                                "enum": [
                                  "CASH",
                                  "CREDIT_CARD",
                                  "TRANSFER",
                                  "CHECK",
                                  "PAYPAL",
                                  "SWIKLY",
                                  "STRIPE",
                                  "TYLLT",
                                  "MOBILE_MONEY",
                                  "OTHER",
                                  "SEPA_DEBIT"
                                ]
                              },
                              "status": {
                                "description": "Statut de la transaction : seules les lignes `VALIDATED` comptent dans le solde de la location. `PENDING` : en attente (prélèvement SEPA en cours, remboursement à exécuter).",
                                "type": "string",
                                "enum": [
                                  "PENDING",
                                  "VALIDATED",
                                  "REFUSED",
                                  "CANCELLED"
                                ]
                              },
                              "isPreAuthorization": {
                                "description": "true : empreinte de caution, montant bloqué sans être débité ; toujours false hors `DEPOSIT`.",
                                "type": "boolean"
                              },
                              "paidAt": {
                                "examples": [
                                  "2026-11-10T10:00:00+01:00"
                                ],
                                "description": "Date de l’opération ; pour un paiement Stripe, celle du PaymentIntent.",
                                "type": "string",
                                "format": "date-time"
                              },
                              "createdAt": {
                                "description": "null uniquement en aperçu (`dryRun`).",
                                "anyOf": [
                                  {
                                    "examples": [
                                      "2026-11-10T10:00:00+01:00"
                                    ],
                                    "type": "string",
                                    "format": "date-time"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "providerReference": {
                                "description": "Référence de l’opérateur Mobile Money ; null pour les autres moyens.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 64
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "stripePaymentIntentId": {
                                "description": "PaymentIntent Stripe qui a réglé ce paiement ; null sinon.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "pattern": "^pi_[A-Za-z0-9]+$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "notes": {
                                "description": "Libellé libre, de longueur non bornée : une ligne saisie dans Lexio ou écrite par le serveur peut dépasser la limite d’entrée de l’API. Toujours null pour une clé partenaire.",
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "rentalId",
                              "number",
                              "type",
                              "amount",
                              "currency",
                              "method",
                              "status",
                              "isPreAuthorization",
                              "paidAt",
                              "createdAt",
                              "providerReference",
                              "stripePaymentIntentId",
                              "notes"
                            ]
                          }
                        },
                        "vehicleMileageUpdated": {
                          "description": "false si le compteur vaut déjà ce relevé ou si le véhicule a un relevé plus récent (le plus récent fait foi).",
                          "type": "boolean"
                        },
                        "contractQueued": {
                          "description": "Génération du contrat signé lancée après le départ, puis envoi de l’exemplaire signé au client par email (une seule fois) ; il se lit par GET /rentals/{rentalId}/contract dès que document n’est plus null. En dryRun, annonce l’effet du départ réel.",
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "createdPayments",
                        "vehicleMileageUpdated",
                        "contractQueued"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`CUSTOMER_BLOCKED`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`, `VEHICLE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/CustomerBlockedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VehicleUnavailableProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `PAYMENT_EXCEEDS_DUE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PaymentExceedsDueProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/depart-et-retour/pick-up-rental",
          "metadata": {
            "title": "Départ du véhicule",
            "sidebarTitle": "Départ du véhicule"
          }
        }
      }
    },
    "/rentals/{rentalId}/reschedule": {
      "post": {
        "operationId": "rescheduleRental",
        "summary": "Changer les dates d’une location",
        "description": "**Accès** : `rentals.write`\n\nDéplace le départ, le retour ou les deux, au tarif du jour. L’heure envoyée est retenue telle quelle.\n\n**Règles**\n- `RESERVED` : départ dans le passé → 400 `date_in_past`.\n- `IN_PROGRESS` : seule la fin bouge, après maintenant et le départ réel ; avenant si le changement est significatif (`effects.amendment`).\n\n**Refus**\n- `RENTAL_STATUS_NOT_ALLOWED` : `startAt` sur `IN_PROGRESS`.\n- `BOOKING_RULE_VIOLATION` (clé partenaire) : borne modifiée hors des règles de réservation.\n- `VEHICLE_UNAVAILABLE` : véhicule occupé sur la nouvelle période (`BOOKED`, `BLOCKED`, `BUFFER` ; seule l’occupation compte, conflits anonymes) ou sans tarif (`NO_PRICING_CATEGORY`).\n- `OPTION_OUT_OF_SEASON`, `OPTION_UNAVAILABLE` : option vendue hors saison, stock insuffisant.\n- `BOOKING_REFUSED` : contrat au mois que la nouvelle période ne peut plus tarifer au loyer.\n\n**Aperçu et prix** : `?dryRun=true`, `expectedTotalTTC` (`PRICE_CHANGED`), `overpaymentResolution` (`OVERPAYMENT_RESOLUTION_REQUIRED`, `SEPA_DEBIT_PENDING`) : voir [Idempotence](https://docs.lexio.rent/idempotence).",
        "tags": [
          "Modifications"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu, la même action annulée en fin de transaction.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu, la même action annulée en fin de transaction."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "endAt": "2026-11-17T10:00",
                "expectedTotalTTC": 422.16
              },
              "schema": {
                "type": "object",
                "properties": {
                  "startAt": {
                    "description": "Nouveau départ, heure murale de l’agence sans décalage (YYYY-MM-DDTHH:MM). Omis : inchangé. Refusé sur une location IN_PROGRESS (409 RENTAL_STATUS_NOT_ALLOWED, pointer /startAt).",
                    "examples": [
                      "2026-11-10T10:00"
                    ],
                    "type": "string"
                  },
                  "endAt": {
                    "description": "Nouveau retour, même format : l’heure est toujours celle envoyée, jamais la fermeture de l’agence. Omis : inchangé.",
                    "examples": [
                      "2026-11-10T10:00"
                    ],
                    "type": "string"
                  },
                  "expectedTotalTTC": {
                    "description": "Total TTC affiché par l’aperçu (dryRun). Écart d’au moins une unité mineure avec le total recalculé → 409 PRICE_CHANGED.",
                    "type": "number"
                  },
                  "overpaymentResolution": {
                    "description": "REFUND_PENDING : remboursement PENDING par virement du trop-perçu ; NO_REFUND : le loueur le conserve. Exige le scope payments.refund.",
                    "type": "string",
                    "enum": [
                      "REFUND_PENDING",
                      "NO_REFUND"
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Changer les dates d’une location",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "priceChange": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/PriceChange"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "previousPeriod": {
                          "description": "Période avant le changement.",
                          "examples": [
                            {
                              "startAt": "2026-11-10T10:00:00+01:00",
                              "endAt": "2026-11-15T10:00:00+01:00",
                              "timezone": "Europe/Paris",
                              "billedDays": 5,
                              "durationMinutes": 7200
                            }
                          ],
                          "$ref": "#/components/schemas/Period"
                        },
                        "amendment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/AmendmentRef"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "overpayment": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/Overpayment"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "priceChange",
                        "previousPeriod",
                        "amendment",
                        "overpayment"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`BOOKING_REFUSED`, `IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `OPTION_UNAVAILABLE`, `OVERPAYMENT_RESOLUTION_REQUIRED`, `PRICE_CHANGED`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`, `SEPA_DEBIT_PENDING`, `VEHICLE_UNAVAILABLE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRefusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionUnavailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OverpaymentResolutionRequiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PriceChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/SepaDebitPendingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VehicleUnavailableProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`BOOKING_RULE_VIOLATION`, `IDEMPOTENCY_KEY_REUSED`, `OPTION_OUT_OF_SEASON`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/BookingRuleViolationProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OptionOutOfSeasonProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/modifications/reschedule-rental",
          "metadata": {
            "title": "Changer les dates d’une location",
            "sidebarTitle": "Changer les dates d’une location"
          }
        }
      }
    },
    "/rentals/{rentalId}/return": {
      "post": {
        "operationId": "returnRental",
        "summary": "Retour du véhicule",
        "description": "**Accès** : `rentals.operate`\n\nClôt une location `IN_PROGRESS` : elle passe `COMPLETED` avec état des lieux de retour, compteur, signature, frais, dépassement kilométrique, paiements et, si l’agence facture au retour, facture (tout ou rien). Facture refusée faute de données : brouillon dans Lexio (`effects.invoice` null).\n\n**Calculs** : Lexio applique le dépassement kilométrique, km cumulés sur les véhicules successifs (`effects.mileageOverage`) ; énergie manquante et retard sont seulement proposés (`effects.suggestedCharges`), à renvoyer dans `charges`.\n\n**Ordre** : frais et dépassement, contrôle de `expectedTotalTTC`, paiements sur ce total, facture. La caution se rend ou se retient dans Lexio.\n\n**Refus**\n- `PRICE_CHANGED` : total différent de `expectedTotalTTC`.\n- `PAYMENT_EXCEEDS_DUE`, `REFUND_EXCEEDS_PAID` : `PAYMENT` au-delà du dû, `REFUND` au-delà du trop-perçu.\n- 400 `out_of_range` : compteur sous le départ du véhicule en cours.\n- `REFERENCE_NOT_FOUND` : dommage du départ inconnu.\n\n`?dryRun=true` : mêmes contrôles et calculs sans écriture, pour afficher le total avant la signature. Contrat régénéré après la réponse.",
        "tags": [
          "Départ et retour"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "rentals.operate"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "rentalId",
            "schema": {
              "examples": [
                "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant de la location."
          },
          {
            "in": "query",
            "name": "dryRun",
            "schema": {
              "description": "true : aperçu. Mêmes contrôles, même calcul (frais, dépassement, facture) et même réponse que le retour réel, puis rien n’est écrit.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "true : aperçu. Mêmes contrôles, même calcul (frais, dépassement, facture) et même réponse que le retour réel, puis rien n’est écrit."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKeyRequired"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "inspection": {
                  "odometerKm": 49130,
                  "fuelLevelPercent": 100,
                  "checklist": {
                    "interiorClean": "NOT_OK",
                    "skippedViews": []
                  },
                  "damages": [],
                  "notes": "Intérieur sale",
                  "confirmedDepartureDamageIds": [
                    "dmg-1"
                  ]
                },
                "signature": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",
                "charges": [
                  {
                    "type": "CLEANING",
                    "description": "Nettoyage intérieur",
                    "amountTTC": 60
                  }
                ],
                "payments": [
                  {
                    "type": "PAYMENT",
                    "amount": 60,
                    "method": "CREDIT_CARD"
                  }
                ],
                "expectedTotalTTC": 368.4
              },
              "schema": {
                "type": "object",
                "properties": {
                  "inspection": {
                    "type": "object",
                    "properties": {
                      "odometerKm": {
                        "description": "Relevé du compteur, entier (une chaîne → 400 invalid_type).",
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 10000000
                      },
                      "fuelLevelPercent": {
                        "description": "Carburant ou batterie selon l’énergie du véhicule ; null = non relevé.",
                        "default": null,
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 100
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "checklist": {
                        "description": "Omis : aucun contrôle ni tour photo enregistré pour cet état des lieux.",
                        "type": "object",
                        "properties": {
                          "interiorClean": {
                            "description": "Propreté intérieure (voiture seulement). Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "exteriorClean": {
                            "description": "Propreté extérieure. Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "vehiclePapers": {
                            "description": "Papiers du véhicule. Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "safetyKit": {
                            "description": "Kit de sécurité. Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "levels": {
                            "description": "Niveaux. Omis = NOT_CHECKED.",
                            "type": "string",
                            "enum": [
                              "OK",
                              "NOT_OK",
                              "NOT_CHECKED"
                            ]
                          },
                          "skippedViews": {
                            "description": "Vues du tour non photographiées. Vue hors des vues figées de la location → 400 not_applicable.",
                            "default": [],
                            "maxItems": 32,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "FRONT",
                                "FRONT_LEFT",
                                "REAR_LEFT",
                                "REAR",
                                "REAR_RIGHT",
                                "FRONT_RIGHT",
                                "WINDSHIELD",
                                "INTERIOR",
                                "TRUNK",
                                "DASHBOARD",
                                "TW_FRONT",
                                "TW_COCKPIT",
                                "TW_LEFT",
                                "TW_RIGHT",
                                "TW_REAR",
                                "TW_SADDLE",
                                "WHEEL_FRONT_LEFT",
                                "DOOR_FRONT_LEFT",
                                "DOOR_REAR_LEFT",
                                "WHEEL_REAR_LEFT",
                                "WHEEL_REAR_RIGHT",
                                "DOOR_REAR_RIGHT",
                                "DOOR_FRONT_RIGHT",
                                "WHEEL_FRONT_RIGHT",
                                "REAR_SEATS"
                              ]
                            }
                          }
                        },
                        "additionalProperties": false
                      },
                      "damages": {
                        "description": "Dommages NOUVEAUX constatés au retour.",
                        "maxItems": 50,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "description": "Facultatif : restitué tel quel et citable au retour. Omis : généré par le serveur.",
                              "type": "string",
                              "pattern": "^[A-Za-z0-9_-]{1,64}$"
                            },
                            "view": {
                              "description": "Position du dommage ; le serveur en dérive la zone. Vue hors du profil figé ou sans zone extérieure (INTERIOR, REAR_SEATS, TRUNK, DASHBOARD) → 400 not_applicable : décrivez ce constat dans notes.",
                              "type": "string",
                              "enum": [
                                "FRONT",
                                "FRONT_LEFT",
                                "REAR_LEFT",
                                "REAR",
                                "REAR_RIGHT",
                                "FRONT_RIGHT",
                                "WINDSHIELD",
                                "INTERIOR",
                                "TRUNK",
                                "DASHBOARD",
                                "TW_FRONT",
                                "TW_COCKPIT",
                                "TW_LEFT",
                                "TW_RIGHT",
                                "TW_REAR",
                                "TW_SADDLE",
                                "WHEEL_FRONT_LEFT",
                                "DOOR_FRONT_LEFT",
                                "DOOR_REAR_LEFT",
                                "WHEEL_REAR_LEFT",
                                "WHEEL_REAR_RIGHT",
                                "DOOR_REAR_RIGHT",
                                "DOOR_FRONT_RIGHT",
                                "WHEEL_FRONT_RIGHT",
                                "REAR_SEATS"
                              ]
                            },
                            "type": {
                              "type": "string",
                              "enum": [
                                "SCRATCH",
                                "DENT",
                                "CRACK",
                                "BROKEN",
                                "STAIN",
                                "OTHER"
                              ]
                            },
                            "description": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 500
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "view",
                            "type"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "notes": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 2000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "confirmedDepartureDamageIds": {
                        "description": "Dommages du départ revus et toujours présents.",
                        "default": [],
                        "maxItems": 50,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "pattern": "^[A-Za-z0-9_-]{1,64}$"
                        }
                      }
                    },
                    "required": [
                      "odometerKm"
                    ],
                    "additionalProperties": false
                  },
                  "signature": {
                    "description": "Exactement un de signature et signatureWaived.",
                    "type": "string",
                    "maxLength": 500000,
                    "pattern": "^data:image\\/png;base64,[A-Za-z0-9+/]+={0,2}$"
                  },
                  "signatureWaived": {
                    "description": "Retour sans le client (boîte à clés…), à la place de signature.",
                    "type": "object",
                    "properties": {
                      "reason": {
                        "description": "Motif imprimé sur l’état des lieux de retour.",
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 300
                      }
                    },
                    "required": [
                      "reason"
                    ],
                    "additionalProperties": false
                  },
                  "actualEndAt": {
                    "description": "Instant RFC 3339 AVEC décalage (sans → 400 offset_required). Défaut : maintenant. Borné à [actualStartAt ; maintenant + 5 min], sinon 400 out_of_range.",
                    "examples": [
                      "2026-11-10T10:00:00+01:00"
                    ],
                    "type": "string"
                  },
                  "charges": {
                    "description": "Frais constatés au retour, appliqués dans l’ordre de la requête.",
                    "maxItems": 50,
                    "type": "array",
                    "items": {
                      "description": "Frais libre au retour : exactement un de amountHT ou amountTTC (les deux → 400 mutually_exclusive ; aucun → 400 required).",
                      "type": "object",
                      "properties": {
                        "type": {
                          "description": "MILEAGE et MILEAGE_OVERAGE → 400 invalid_value : le dépassement est calculé par Lexio.",
                          "type": "string",
                          "enum": [
                            "DAMAGE",
                            "FUEL",
                            "CLEANING",
                            "LATE_RETURN",
                            "OTHER"
                          ]
                        },
                        "description": {
                          "description": "Libellé de la ligne, repris sur la facture.",
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 500
                        },
                        "amountHT": {
                          "description": "Exactement un de amountHT et amountTTC.",
                          "type": "number"
                        },
                        "amountTTC": {
                          "description": "Fait foi : le HT en dérive au taux de TVA de la location.",
                          "type": "number"
                        }
                      },
                      "required": [
                        "type",
                        "description"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "payments": {
                    "description": "Encaissements (PAYMENT, scope payments.write) et remboursements (REFUND, scope payments.refund) du retour, rattachés à son état des lieux. paidAt omis = actualEndAt. Contrôlés sur le total après frais et dépassement : Σ PAYMENT au-delà du reste dû (prélèvements SEPA en cours déduits) → 422 PAYMENT_EXCEEDS_DUE ; Σ REFUND au-delà du trop-perçu → 422 REFUND_EXCEEDS_PAID. DEPOSIT ou STRIPE → 400 not_applicable : un encaissement Stripe passe par POST /rentals/{rentalId}/payments, un remboursement Stripe se fait chez Stripe et Lexio l’enregistre à réception de l’événement Stripe, sauf saisie manuelle préalable par l’équipe du loueur.",
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "description": "Encaissement.",
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "PAYMENT"
                            },
                            "amount": {
                              "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                              "type": "number"
                            },
                            "providerReference": {
                              "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "notes": {
                              "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 500
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "method": {
                              "description": "Moyen de paiement ; `STRIPE` exige `stripePaymentIntentId`.",
                              "type": "string",
                              "enum": [
                                "CREDIT_CARD",
                                "CASH",
                                "TRANSFER",
                                "CHECK",
                                "MOBILE_MONEY",
                                "OTHER",
                                "STRIPE"
                              ]
                            },
                            "paidAt": {
                              "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`). Refusée avec `STRIPE` : la date est lue sur le PaymentIntent.",
                              "examples": [
                                "2026-11-10T10:00:00+01:00"
                              ],
                              "type": "string"
                            },
                            "stripePaymentIntentId": {
                              "description": "PaymentIntent `pi_…` encaissé sur le compte Stripe de l’agence, dans la devise de la location et pour `amount` exactement ; requis avec `STRIPE`, refusé sinon.",
                              "type": "string",
                              "maxLength": 255,
                              "pattern": "^pi_[A-Za-z0-9]+$"
                            },
                            "isPreAuthorization": {}
                          },
                          "required": [
                            "type",
                            "amount",
                            "method"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "description": "Caution, encaissée ou en empreinte ; hors solde de la location.",
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "DEPOSIT"
                            },
                            "amount": {
                              "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                              "type": "number"
                            },
                            "providerReference": {
                              "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "notes": {
                              "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 500
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "method": {
                              "description": "Moyen de la caution.",
                              "type": "string",
                              "enum": [
                                "CREDIT_CARD",
                                "CASH",
                                "TRANSFER",
                                "CHECK",
                                "SWIKLY",
                                "TYLLT",
                                "MOBILE_MONEY",
                                "OTHER"
                              ]
                            },
                            "isPreAuthorization": {
                              "description": "true : empreinte (montant bloqué, non débité), admise seulement avec un moyen qui la permet (sinon 400 `not_applicable`) et jamais sur une location au mois.",
                              "default": false,
                              "type": "boolean"
                            },
                            "paidAt": {
                              "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`).",
                              "examples": [
                                "2026-11-10T10:00:00+01:00"
                              ],
                              "type": "string"
                            },
                            "stripePaymentIntentId": {}
                          },
                          "required": [
                            "type",
                            "amount",
                            "method"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "description": "Remboursement, déduit du net encaissé ; émet les avoirs nécessaires.",
                          "type": "object",
                          "properties": {
                            "type": {
                              "type": "string",
                              "const": "REFUND"
                            },
                            "amount": {
                              "description": "Montant en unités majeures de la devise de la location, strictement positif, sur sa grille (2 décimales en EUR, entier en XPF et XOF) ; le sens vient de `type`.",
                              "type": "number"
                            },
                            "providerReference": {
                              "description": "Référence de l’opération chez l’opérateur, `MOBILE_MONEY` seulement (sinon 400 `not_applicable`).",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "notes": {
                              "description": "Note pour l’équipe du loueur ; refusée à une clé partenaire.",
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 500
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "method": {
                              "description": "Moyen du remboursement. `STRIPE` est refusé (400 `not_applicable`) : remboursez chez Stripe ; Lexio l’enregistre à réception de l’événement Stripe, sauf si l’équipe du loueur l’a déjà saisi à la main.",
                              "type": "string",
                              "enum": [
                                "CREDIT_CARD",
                                "CASH",
                                "TRANSFER",
                                "CHECK",
                                "MOBILE_MONEY",
                                "OTHER",
                                "STRIPE"
                              ]
                            },
                            "paidAt": {
                              "description": "Date de l’opération, RFC 3339 avec décalage ; omise : maintenant. Ni avant la création de la location, ni plus de 5 minutes dans le futur (400 `out_of_range`).",
                              "examples": [
                                "2026-11-10T10:00:00+01:00"
                              ],
                              "type": "string"
                            },
                            "stripePaymentIntentId": {},
                            "isPreAuthorization": {}
                          },
                          "required": [
                            "type",
                            "amount",
                            "method"
                          ],
                          "additionalProperties": false
                        }
                      ],
                      "type": "object"
                    }
                  },
                  "expectedTotalTTC": {
                    "description": "Ancrage facultatif sur le total TTC après frais et dépassement (celui de l’aperçu dryRun). Écart d’une unité mineure → 409 PRICE_CHANGED.",
                    "type": "number"
                  }
                },
                "required": [
                  "inspection"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Retour du véhicule",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Rental"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {
                        "priceChange": {
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/PriceChange"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "appliedCharges": {
                          "description": "charges[] de la requête, puis la ligne MILEAGE_OVERAGE si excessKm > 0.",
                          "maxItems": 51,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "description": "= refId de la ligne de prix (CHARGE ou MILEAGE_OVERAGE) ; null en dryRun.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "uuid"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "DAMAGE",
                                  "FUEL",
                                  "CLEANING",
                                  "LATE_RETURN",
                                  "OTHER",
                                  "MILEAGE_OVERAGE"
                                ]
                              },
                              "description": {
                                "type": "string"
                              },
                              "amountHT": {
                                "type": "number"
                              },
                              "amountTTC": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "id",
                              "type",
                              "description",
                              "amountHT",
                              "amountTTC"
                            ]
                          }
                        },
                        "suggestedCharges": {
                          "maxItems": 2,
                          "type": "array",
                          "items": {
                            "description": "Calculé par Lexio (énergie manquante au-delà de la tolérance, retard au-delà de la tolérance) mais NON appliqué : pour le facturer, renvoyez-le dans charges[].",
                            "type": "object",
                            "properties": {
                              "type": {
                                "type": "string",
                                "enum": [
                                  "FUEL",
                                  "LATE_RETURN"
                                ]
                              },
                              "description": {
                                "type": "string"
                              },
                              "amountHT": {
                                "type": "number"
                              },
                              "amountTTC": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "type",
                              "description",
                              "amountHT",
                              "amountTTC"
                            ]
                          }
                        },
                        "mileageOverage": {
                          "anyOf": [
                            {
                              "description": "Dépassement calculé et appliqué par Lexio (ligne MILEAGE_OVERAGE si excessKm > 0) ; montants à 0 sans dépassement. null si le kilométrage est illimité, si la location ne vend pas de km ou si le relevé de départ manque.",
                              "type": "object",
                              "properties": {
                                "includedKm": {
                                  "description": "Km inclus pour toute la location.",
                                  "type": "integer",
                                  "minimum": 0
                                },
                                "drivenKm": {
                                  "description": "Km cumulés à travers les changements de véhicule.",
                                  "type": "integer",
                                  "minimum": 0
                                },
                                "excessKm": {
                                  "description": "Km facturés : drivenKm − includedKm, 0 au minimum.",
                                  "type": "integer",
                                  "minimum": 0
                                },
                                "overageRatePerKmHT": {
                                  "description": "Tarif figé au contrat, sinon tarif actif de la catégorie ; 4 décimales au plus.",
                                  "type": "number",
                                  "minimum": 0
                                },
                                "amountHT": {
                                  "type": "number",
                                  "minimum": 0
                                },
                                "amountTTC": {
                                  "type": "number",
                                  "minimum": 0
                                }
                              },
                              "required": [
                                "includedKm",
                                "drivenKm",
                                "excessKm",
                                "overageRatePerKmHT",
                                "amountHT",
                                "amountTTC"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "createdPayments": {
                          "description": "Dans l’ordre de la requête.",
                          "examples": [
                            [
                              {
                                "id": "c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f",
                                "rentalId": "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f",
                                "number": "PAY-2026.11-0051",
                                "type": "PAYMENT",
                                "amount": 60,
                                "currency": "EUR",
                                "method": "CREDIT_CARD",
                                "status": "VALIDATED",
                                "isPreAuthorization": false,
                                "paidAt": "2026-11-15T10:20:00+01:00",
                                "createdAt": "2026-11-15T10:20:02+01:00",
                                "providerReference": null,
                                "stripePaymentIntentId": null,
                                "notes": null
                              }
                            ]
                          ],
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "description": "Paiement créé par l’action, même forme que `Payment`.",
                            "type": "object",
                            "properties": {
                              "id": {
                                "description": "null uniquement en aperçu (`dryRun`).",
                                "anyOf": [
                                  {
                                    "examples": [
                                      "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                                    ],
                                    "type": "string",
                                    "format": "uuid"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "rentalId": {
                                "examples": [
                                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                                ],
                                "description": "Location du paiement.",
                                "type": "string",
                                "format": "uuid"
                              },
                              "number": {
                                "description": "null uniquement en aperçu (`dryRun`).",
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "type": {
                                "description": "`PAYMENT` : encaissement ; `DEPOSIT` : caution ; `REFUND` : remboursement.",
                                "type": "string",
                                "enum": [
                                  "PAYMENT",
                                  "DEPOSIT",
                                  "REFUND"
                                ]
                              },
                              "amount": {
                                "description": "Montant réellement encaissé, bloqué ou remboursé, dans `currency` ; positif, le sens est porté par `type`. Seul un mouvement de caution enregistré dans Lexio au retour (restitution ou retenue) est négatif.",
                                "type": "number"
                              },
                              "currency": {
                                "description": "Devise de la location.",
                                "examples": [
                                  "EUR"
                                ],
                                "type": "string",
                                "enum": [
                                  "EUR",
                                  "XPF",
                                  "CHF",
                                  "CAD",
                                  "GBP",
                                  "USD",
                                  "XOF"
                                ]
                              },
                              "method": {
                                "description": "Moyen de paiement.",
                                "type": "string",
                                "enum": [
                                  "CASH",
                                  "CREDIT_CARD",
                                  "TRANSFER",
                                  "CHECK",
                                  "PAYPAL",
                                  "SWIKLY",
                                  "STRIPE",
                                  "TYLLT",
                                  "MOBILE_MONEY",
                                  "OTHER",
                                  "SEPA_DEBIT"
                                ]
                              },
                              "status": {
                                "description": "Statut de la transaction : seules les lignes `VALIDATED` comptent dans le solde de la location. `PENDING` : en attente (prélèvement SEPA en cours, remboursement à exécuter).",
                                "type": "string",
                                "enum": [
                                  "PENDING",
                                  "VALIDATED",
                                  "REFUSED",
                                  "CANCELLED"
                                ]
                              },
                              "isPreAuthorization": {
                                "description": "true : empreinte de caution, montant bloqué sans être débité ; toujours false hors `DEPOSIT`.",
                                "type": "boolean"
                              },
                              "paidAt": {
                                "examples": [
                                  "2026-11-10T10:00:00+01:00"
                                ],
                                "description": "Date de l’opération ; pour un paiement Stripe, celle du PaymentIntent.",
                                "type": "string",
                                "format": "date-time"
                              },
                              "createdAt": {
                                "description": "null uniquement en aperçu (`dryRun`).",
                                "anyOf": [
                                  {
                                    "examples": [
                                      "2026-11-10T10:00:00+01:00"
                                    ],
                                    "type": "string",
                                    "format": "date-time"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "providerReference": {
                                "description": "Référence de l’opérateur Mobile Money ; null pour les autres moyens.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 64
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "stripePaymentIntentId": {
                                "description": "PaymentIntent Stripe qui a réglé ce paiement ; null sinon.",
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "pattern": "^pi_[A-Za-z0-9]+$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "notes": {
                                "description": "Libellé libre, de longueur non bornée : une ligne saisie dans Lexio ou écrite par le serveur peut dépasser la limite d’entrée de l’API. Toujours null pour une clé partenaire.",
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "rentalId",
                              "number",
                              "type",
                              "amount",
                              "currency",
                              "method",
                              "status",
                              "isPreAuthorization",
                              "paidAt",
                              "createdAt",
                              "providerReference",
                              "stripePaymentIntentId",
                              "notes"
                            ]
                          }
                        },
                        "invoice": {
                          "description": "Facture émise au retour si l’organisation facture au retour avec émission automatique ; null sinon, y compris quand l’émission est refusée faute de données de l’agence ou du client : la facture reste alors en brouillon dans Lexio. id et number null en dryRun.",
                          "anyOf": [
                            {
                              "$ref": "#/components/schemas/InvoiceRef"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "vehicleMileageUpdated": {
                          "description": "false si le véhicule a un relevé plus récent (le plus récent fait foi).",
                          "type": "boolean"
                        },
                        "contractQueued": {
                          "description": "Régénération du contrat avec l’état des lieux de retour lancée après le retour ; en dryRun, annonce l’effet du retour réel.",
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "priceChange",
                        "appliedCharges",
                        "suggestedCharges",
                        "mileageOverage",
                        "createdPayments",
                        "invoice",
                        "vehicleMileageUpdated",
                        "contractQueued"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_ALREADY_APPLIED`, `IDEMPOTENCY_IN_FLIGHT`, `PRICE_CHANGED`, `RENTAL_BUSY`, `RENTAL_CHANGED`, `RENTAL_STATUS_NOT_ALLOWED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyAlreadyAppliedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PriceChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalBusyProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalChangedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RentalStatusNotAllowedProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `PAYMENT_EXCEEDS_DUE`, `REFERENCE_NOT_FOUND`, `REFUND_EXCEEDS_PAID`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/PaymentExceedsDueProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    },
                    {
                      "$ref": "#/components/schemas/RefundExceedsPaidProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/depart-et-retour/return-rental",
          "metadata": {
            "title": "Retour du véhicule",
            "sidebarTitle": "Retour du véhicule"
          }
        }
      }
    },
    "/season-calendar": {
      "get": {
        "operationId": "listSeasonCalendarMonths",
        "summary": "Lire le calendrier des saisons",
        "description": "**Accès** : `pricing.read` · Fonctionnalité d’abonnement : `pricing.seasons` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie les 12 mois du calendrier des saisons, de 1 à 12 : un gabarit annuel, sans année, qui vaut chaque année. Chaque mois a une entrée par jour ; février en compte 29.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "x-required-feature": "pricing.seasons",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Lire le calendrier des saisons",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/SeasonCalendarMonth"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/list-season-calendar-months",
          "metadata": {
            "title": "Lire le calendrier des saisons",
            "sidebarTitle": "Lire le calendrier des saisons"
          }
        }
      }
    },
    "/season-calendar/{month}": {
      "get": {
        "operationId": "getSeasonCalendarMonth",
        "summary": "Lire un mois du calendrier des saisons",
        "description": "**Accès** : `pricing.read` · Fonctionnalité d’abonnement : `pricing.seasons` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie l’affectation jour par jour d’un mois (1 à 12) du calendrier des saisons.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "x-required-feature": "pricing.seasons",
        "parameters": [
          {
            "in": "path",
            "name": "month",
            "schema": {
              "description": "Mois, de 1 (janvier) à 12 (décembre).",
              "type": "string"
            },
            "required": true,
            "description": "Mois, de 1 (janvier) à 12 (décembre)."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire un mois du calendrier des saisons",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SeasonCalendarMonth"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/get-season-calendar-month",
          "metadata": {
            "title": "Lire un mois du calendrier des saisons",
            "sidebarTitle": "Lire un mois du calendrier des saisons"
          }
        }
      },
      "put": {
        "operationId": "replaceSeasonCalendarMonth",
        "summary": "Remplacer un mois du calendrier des saisons",
        "description": "**Accès** : `pricing.write` · Fonctionnalité d’abonnement : `pricing.seasons` ([plans](https://docs.lexio.rent/authentification))\n\nRemplace en bloc les affectations jour → saison d’un mois : un élément par jour du mois, dans un ordre libre ; février compte 29 jours. Seuls les devis futurs suivent le changement.\n\n**Refus** (rien n’est écrit) : jour manquant, en double ou hors du mois → 400 ; `seasonSlug` inconnu → 422 `REFERENCE_NOT_FOUND`.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.write"
        ],
        "x-required-feature": "pricing.seasons",
        "parameters": [
          {
            "in": "path",
            "name": "month",
            "schema": {
              "description": "Mois, de 1 (janvier) à 12 (décembre).",
              "type": "string"
            },
            "required": true,
            "description": "Mois, de 1 (janvier) à 12 (décembre)."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "dayAssignments": [
                  {
                    "day": 1,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 2,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 3,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 4,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 5,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 6,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 7,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 8,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 9,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 10,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 11,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 12,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 13,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 14,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 15,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 16,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 17,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 18,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 19,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 20,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 21,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 22,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 23,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 24,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 25,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 26,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 27,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 28,
                    "seasonSlug": "basse"
                  },
                  {
                    "day": 29,
                    "seasonSlug": "basse"
                  }
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "dayAssignments": {
                    "description": "Saison de chaque jour du mois, une entrée par jour ; février compte 29 jours. Le gabarit vaut pour toutes les années. Ordre libre.",
                    "minItems": 1,
                    "maxItems": 31,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "day": {
                          "description": "Jour du mois.",
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 31
                        },
                        "seasonSlug": {
                          "description": "Saison de ce jour (`GET /seasons`).",
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 50,
                          "pattern": "^[a-z0-9_]+$"
                        }
                      },
                      "required": [
                        "day",
                        "seasonSlug"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "dayAssignments"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Remplacer un mois du calendrier des saisons",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SeasonCalendarMonth"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/replace-season-calendar-month",
          "metadata": {
            "title": "Remplacer un mois du calendrier des saisons",
            "sidebarTitle": "Remplacer un mois du calendrier des saisons"
          }
        }
      }
    },
    "/seasons": {
      "get": {
        "operationId": "listSeasons",
        "summary": "Lister les saisons",
        "description": "**Accès** : `pricing.read` · Fonctionnalité d’abonnement : `pricing.seasons` ([plans](https://docs.lexio.rent/authentification))\n\nListe les saisons tarifaires de l’organisation (10 au plus). Tri : `displayOrder`, `name`, puis `slug`.\n\nLe prix journalier HT d’une catégorie pendant une saison vaut `baseDailyPriceHT` × `priceFactor` ; le [calendrier des saisons](https://docs.lexio.rent/api-reference/tarification/list-season-calendar-months) dit quelle saison s’applique chaque jour.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "x-required-feature": "pricing.seasons",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Lister les saisons",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Season"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/list-seasons",
          "metadata": {
            "title": "Lister les saisons",
            "sidebarTitle": "Lister les saisons"
          }
        }
      }
    },
    "/seasons/{slug}": {
      "get": {
        "operationId": "getSeason",
        "summary": "Lire une saison",
        "description": "**Accès** : `pricing.read` · Fonctionnalité d’abonnement : `pricing.seasons` ([plans](https://docs.lexio.rent/authentification))\n\nRenvoie une saison tarifaire, identifiée par son `slug`.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.read"
        ],
        "x-required-feature": "pricing.seasons",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "schema": {
              "description": "Identifiant de la saison (`slug`).",
              "examples": [
                "haute"
              ],
              "type": "string",
              "minLength": 1,
              "maxLength": 50,
              "pattern": "^[a-z0-9_]+$"
            },
            "required": true,
            "description": "Identifiant de la saison (`slug`)."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire une saison",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Season"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/get-season",
          "metadata": {
            "title": "Lire une saison",
            "sidebarTitle": "Lire une saison"
          }
        }
      },
      "patch": {
        "operationId": "updateSeason",
        "summary": "Modifier une saison",
        "description": "**Accès** : `pricing.write` · Fonctionnalité d’abonnement : `pricing.seasons` ([plans](https://docs.lexio.rent/authentification))\n\nModifie le nom, la description, le rang ou le `priceFactor` d’une saison ; le `slug` est immuable, et les saisons se créent dans Lexio.\n\nUn nouveau `priceFactor` recalcule `seasonPrices` de toutes les catégories dans la même transaction. Seuls les devis futurs suivent le changement.",
        "tags": [
          "Tarification"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "pricing.write"
        ],
        "x-required-feature": "pricing.seasons",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "schema": {
              "description": "Identifiant de la saison (`slug`).",
              "examples": [
                "haute"
              ],
              "type": "string",
              "minLength": 1,
              "maxLength": 50,
              "pattern": "^[a-z0-9_]+$"
            },
            "required": true,
            "description": "Identifiant de la saison (`slug`)."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "priceFactor": 1.35
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom de la saison.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "priceFactor": {
                    "description": "Coefficient du prix de base des catégories pendant la saison : 1 = prix de base, 1,2 = +20 %. De 0,1 à 10. Au plus 4 décimales.",
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 10
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "priceFactor": 1.35
              },
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "description": "Nom de la saison.",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "priceFactor": {
                    "description": "Coefficient du prix de base des catégories pendant la saison : 1 = prix de base, 1,2 = +20 %. De 0,1 à 10. Au plus 4 décimales.",
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 10
                  },
                  "displayOrder": {
                    "description": "Rang d’affichage ; ordre de la liste.",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 2147483647
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier une saison",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Season"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/tarification/update-season",
          "metadata": {
            "title": "Modifier une saison",
            "sidebarTitle": "Modifier une saison"
          }
        }
      }
    },
    "/vehicle-blocks": {
      "get": {
        "operationId": "listVehicleBlocks",
        "summary": "Lister les blocages de planning",
        "description": "**Accès** : `vehicles.read`\n\nListe les indisponibilités posées sur les véhicules (réparation, nettoyage, usage personnel…), qui les rendent non réservables (`BLOCKED` dans [`GET /availability`](https://docs.lexio.rent/api-reference/offre/list-availability)). Lecture seule : les blocages se posent, se modifient et se lèvent dans Lexio.\n\n- `from` et `to` (requis) sont des jours de l’agence, inclus : un blocage est renvoyé s’il chevauche cette fenêtre. 92 jours au plus et `from` ≤ `to`, sinon 400 sur `/to`.\n- `vehicleId` et `type` acceptent plusieurs valeurs séparées par des virgules ; un `vehicleId` inconnu donne une liste vide.\n- Tri : `startAt`, puis `id`.",
        "tags": [
          "Flotte"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "vehicles.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "from",
            "schema": {
              "examples": [
                "2026-11-10"
              ],
              "description": "Premier jour de la fenêtre, inclus (`YYYY-MM-DD`, jour de l’agence).",
              "type": "string",
              "format": "date"
            },
            "required": true,
            "description": "Premier jour de la fenêtre, inclus (`YYYY-MM-DD`, jour de l’agence)."
          },
          {
            "in": "query",
            "name": "to",
            "schema": {
              "examples": [
                "2026-11-10"
              ],
              "description": "Dernier jour de la fenêtre, inclus ; 92 jours au plus.",
              "type": "string",
              "format": "date"
            },
            "required": true,
            "description": "Dernier jour de la fenêtre, inclus ; 92 jours au plus."
          },
          {
            "in": "query",
            "name": "vehicleId",
            "schema": {
              "type": "string"
            },
            "description": "Identifiants UUID séparés par des virgules, 100 au plus."
          },
          {
            "in": "query",
            "name": "type",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : MAINTENANCE, REPAIR, ACCIDENT, INSPECTION, CLEANING, PERSONAL_USE, LOAN, EXTERNAL_BOOKING, OTHER."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les blocages de planning",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/VehicleBlock"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/flotte/list-vehicle-blocks",
          "metadata": {
            "title": "Lister les blocages de planning",
            "sidebarTitle": "Lister les blocages de planning"
          }
        }
      }
    },
    "/vehicles": {
      "get": {
        "operationId": "listVehicles",
        "summary": "Lister les véhicules",
        "description": "**Accès** : `vehicles.read`\n\nListe la flotte de l’organisation, véhicules archivés compris sauf avec `isArchived=false`. Tri : `displayOrder`, puis `id`.\n\n`isBookable` dit si le véhicule peut être réservé en général ; sa disponibilité sur une période se lit dans [`GET /availability`](https://docs.lexio.rent/api-reference/offre/list-availability).",
        "tags": [
          "Flotte"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "vehicles.read"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Taille de la page, de 1 à 100 ; 50 par défaut."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            "description": "Valeur `nextCursor` de la page précédente ; omis pour la première page."
          },
          {
            "in": "query",
            "name": "isActive",
            "schema": {
              "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "`true` : actifs seulement ; `false` : inactifs seulement ; omis : tous."
          },
          {
            "in": "query",
            "name": "isArchived",
            "schema": {
              "description": "`false` : sans les véhicules archivés ; omis : archivés compris.",
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "description": "`false` : sans les véhicules archivés ; omis : archivés compris."
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : OPERATIONAL, BREAKDOWN."
          },
          {
            "in": "query",
            "name": "vehicleType",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : CITY, COMPACT, CROSSOVER, SEDAN, BREAK, SUV, OFF_ROAD, PICKUP, MINIVAN, VAN, UTILITY, COUPE, CONVERTIBLE, SPORT, LUXURY, MOTORCYCLE, SCOOTER."
          },
          {
            "in": "query",
            "name": "categoryId",
            "schema": {
              "description": "Véhicules de cette seule catégorie tarifaire.",
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "description": "Véhicules de cette seule catégorie tarifaire."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les véhicules",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Vehicle"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/flotte/list-vehicles",
          "metadata": {
            "title": "Lister les véhicules",
            "sidebarTitle": "Lister les véhicules"
          }
        }
      },
      "post": {
        "operationId": "createVehicle",
        "summary": "Créer un véhicule",
        "description": "**Accès** : `vehicles.write`\n\nAjoute un véhicule à la flotte ; aucune valeur n’est inventée.\n\n**Champs requis par le profil** (sinon 400 `required`)\n- voiture : `doors`, `transmission`, `registrationDate`, et `fuelCapacityLiters` hors électrique ;\n- deux-roues : `transmission` en thermique, `batteryCapacityKwh` en électrique.\n\nUne plaque ou un numéro de série est requis ; un champ non applicable au profil, ou un équipement hors famille ou énergie → 400 `not_applicable`.\n\n**Refus**\n- plaque déjà prise (casse, espaces, tirets et points ignorés) ou numéro de série déjà pris (casse ignorée), véhicule archivé compris → 409 `ALREADY_EXISTS` ;\n- `categoryId` inconnu → 422 `REFERENCE_NOT_FOUND` ;\n- `maintenanceTrackingMode` démarre le suivi d’entretien : il exige aussi le scope `maintenance.write` (403 `INSUFFICIENT_SCOPE`) et la fonctionnalité `maintenance.manage` du plan (403 `FEATURE_NOT_AVAILABLE`).\n\n**Effet** : la tranche d’abonnement Lexio de l’agence (véhicules actifs non archivés) est recalculée.",
        "tags": [
          "Flotte"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "vehicles.write"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "serialNumber": "TB-2026-00417",
                "brand": "Tinbot",
                "model": "ES1",
                "vehicleType": "SCOOTER",
                "fuelType": "ELECTRIC",
                "seats": 2,
                "odometerKm": 12,
                "batteryCapacityKwh": 4.2,
                "equipment": [
                  "REMOVABLE_BATTERY",
                  "USB_PORT"
                ],
                "maintenanceTrackingMode": "FROM_ZERO"
              },
              "schema": {
                "type": "object",
                "properties": {
                  "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.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9 -]{1,14}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "serialNumber": {
                    "description": "Numéro de série (deux-roues non immatriculé, par exemple) ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9 ._/-]{1,39}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vin": {
                    "description": "Numéro d’identification du véhicule (VIN, 17 caractères au plus) ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-HJ-NPR-Za-hj-npr-z0-9]{1,17}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "name": {
                    "description": "Nom d’usage donné par l’agence (ex. « 208 blanche ») ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "brand": {
                    "description": "Marque (ex. Peugeot).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 50
                  },
                  "model": {
                    "description": "Modèle (ex. 208).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 50
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 1000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "color": {
                    "description": "Couleur, en texte libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 30
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vehicleType": {
                    "description": "Type de véhicule : il fixe la famille et les champs applicables.",
                    "type": "string",
                    "enum": [
                      "CITY",
                      "COMPACT",
                      "CROSSOVER",
                      "SEDAN",
                      "BREAK",
                      "SUV",
                      "OFF_ROAD",
                      "PICKUP",
                      "MINIVAN",
                      "VAN",
                      "UTILITY",
                      "COUPE",
                      "CONVERTIBLE",
                      "SPORT",
                      "LUXURY",
                      "MOTORCYCLE",
                      "SCOOTER"
                    ]
                  },
                  "fuelType": {
                    "description": "Carburant ou motorisation : il fixe l’énergie et les champs applicables.",
                    "type": "string",
                    "enum": [
                      "PETROL",
                      "DIESEL",
                      "LPG",
                      "HYBRID",
                      "PLUGIN_HYBRID",
                      "ELECTRIC"
                    ]
                  },
                  "transmission": {
                    "description": "Boîte de vitesses ; null si non applicable au profil (deux-roues électrique).",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "MANUAL",
                          "AUTOMATIC"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "seats": {
                    "description": "Nombre de places : 1 à 50 pour une voiture, 1 à 3 pour un deux-roues.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 50
                  },
                  "doors": {
                    "description": "Nombre de portes ; null pour un deux-roues.",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 10
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "modelYear": {
                    "description": "Année modèle ; null si inconnue.",
                    "anyOf": [
                      {
                        "minimum": 1900,
                        "maximum": 2100,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "registrationDate": {
                    "description": "Date de première immatriculation (`YYYY-MM-DD`), jamais dans le futur ; null si inconnue.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "odometerKm": {
                    "minimum": 0,
                    "maximum": 10000000,
                    "description": "Kilométrage au compteur, en km.",
                    "type": "integer"
                  },
                  "powerKw": {
                    "description": "Puissance en kW ; null si inconnue. Un thermique va jusqu’à 1471 kW (2000 ch), un électrique jusqu’à 2000 kW.",
                    "anyOf": [
                      {
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "fuelCapacityLiters": {
                    "description": "Capacité du réservoir, en litres ; null pour un électrique ou si inconnue.",
                    "anyOf": [
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 500,
                        "description": "Au plus 1 décimale."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "batteryCapacityKwh": {
                    "description": "Capacité de la batterie de traction, en kWh ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 300,
                        "description": "Au plus 2 décimales."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "rangeKm": {
                    "description": "Autonomie électrique, en km ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "chargePortType": {
                    "description": "Prise de recharge ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "TYPE_1",
                          "TYPE_2",
                          "CCS",
                          "CHADEMO",
                          "DC",
                          "DOMESTIC"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "equipment": {
                    "description": "Équipements présents, parmi ceux de la famille et de l’énergie du véhicule. Remplace la liste entière ; chaque code une seule fois.",
                    "maxItems": 40,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "AIR_CONDITIONING",
                        "HEATED_SEATS",
                        "LEATHER_SEATS",
                        "KEYLESS_START",
                        "ELECTRIC_TRUNK",
                        "CONVERTIBLE_ROOF",
                        "SUNROOF",
                        "PANORAMIC_ROOF",
                        "GPS",
                        "BLUETOOTH",
                        "CARPLAY",
                        "ANDROID_AUTO",
                        "WIRELESS_CHARGING",
                        "ABS",
                        "ESP",
                        "CRUISE_CONTROL",
                        "ADAPTIVE_CRUISE_CONTROL",
                        "BLIND_SPOT_MONITOR",
                        "PARKING_SENSORS",
                        "REAR_CAMERA",
                        "PARKING_ASSIST",
                        "DASHCAM",
                        "TURBO",
                        "POWER_STEERING",
                        "START_STOP",
                        "ADBLUE",
                        "TOW_BAR",
                        "TOP_CASE",
                        "WINDSHIELD",
                        "HEATED_GRIPS",
                        "USB_PORT",
                        "TRACTION_CONTROL",
                        "ANTI_THEFT_ALARM",
                        "REMOVABLE_BATTERY",
                        "SPARE_BATTERY"
                      ]
                    }
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire (`GET /categories/{categoryId}`) ; null : véhicule sans prix, non réservable (`NO_PRICING_CATEGORY`).",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isActive": {
                    "description": "false : véhicule mis hors service par l’agence, non réservable (`INACTIVE`).",
                    "type": "boolean"
                  },
                  "status": {
                    "description": "`BREAKDOWN` : véhicule en panne, non réservable. `OPERATIONAL` sinon, location en cours comprise.",
                    "type": "string",
                    "enum": [
                      "OPERATIONAL",
                      "BREAKDOWN"
                    ]
                  },
                  "maintenanceTrackingMode": {
                    "description": "Mode de démarrage du suivi d’entretien, définitif une fois posé ; null : suivi non démarré. `FROM_ZERO` (véhicule neuf ou sans historique fiable) et `MANUAL_HISTORY` (historique saisi par `POST /maintenance-records`) comptent les échéances depuis 0 km et la première immatriculation ; `ASSUME_UP_TO_DATE` tient le véhicule pour à jour à son entrée en flotte (kilométrage et date de ce jour).",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "FROM_ZERO",
                          "ASSUME_UP_TO_DATE",
                          "MANUAL_HISTORY"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "brand",
                  "model",
                  "vehicleType",
                  "fuelType",
                  "seats",
                  "odometerKm"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Créer un véhicule",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Vehicle"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/flotte/create-vehicle",
          "metadata": {
            "title": "Créer un véhicule",
            "sidebarTitle": "Créer un véhicule"
          }
        }
      }
    },
    "/vehicles/{vehicleId}": {
      "delete": {
        "operationId": "deleteVehicle",
        "summary": "Supprimer un véhicule",
        "description": "**Accès** : `vehicles.delete`\n\nSupprime définitivement un véhicule sans historique, avec ses documents, images et positions GPS ; 204 sans corps.\n\n**Refus** : véhicule lié à une location (tout statut), un incident, une contravention, un entretien, une tâche de contrôle ou un blocage de planning → 409 `RESOURCE_IN_USE`, chaque cause et son nombre dans `blockers` (`RENTALS`, `INCIDENTS`, `CONTRAVENTIONS`, `MAINTENANCE_RECORDS`, `VEHICLE_CHECKS`, `VEHICLE_BLOCKS`). Rien n’est supprimé : archivez-le plutôt ([`POST /vehicles/{vehicleId}/archive`](https://docs.lexio.rent/api-reference/flotte/archive-vehicle)).\n\n**Effet** : la tranche d’abonnement Lexio de l’agence (véhicules actifs non archivés) est recalculée.",
        "tags": [
          "Flotte"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "vehicles.delete"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "vehicleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du véhicule."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "204": {
            "description": "Supprimé, sans corps.",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/flotte/delete-vehicle",
          "metadata": {
            "title": "Supprimer un véhicule",
            "sidebarTitle": "Supprimer un véhicule"
          }
        }
      },
      "get": {
        "operationId": "getVehicle",
        "summary": "Lire un véhicule",
        "description": "**Accès** : `vehicles.read`\n\nRenvoie un véhicule, dans la même représentation que la liste. Un véhicule archivé reste lisible.",
        "tags": [
          "Flotte"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "vehicles.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "vehicleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du véhicule."
          }
        ],
        "responses": {
          "200": {
            "description": "Lire un véhicule",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Vehicle"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/flotte/get-vehicle",
          "metadata": {
            "title": "Lire un véhicule",
            "sidebarTitle": "Lire un véhicule"
          }
        }
      },
      "patch": {
        "operationId": "updateVehicle",
        "summary": "Modifier un véhicule",
        "description": "**Accès** : `vehicles.write`\n\nModifie un véhicule en Merge Patch : champ omis inchangé, `null` efface un champ facultatif.\n\n- `null` sur un champ exigé par le profil (ex. `doors` d’une voiture) → 400 `required` ; sur `brand`, `model`, `vehicleType`, `fuelType`, `seats`, `odometerKm`, `isActive`, `status` ou `equipment` → 400 `null_not_allowed`.\n- Changer `vehicleType` ou `fuelType` juge le profil obtenu : dans la même requête, envoyez à `null` les champs devenus non applicables et fournissez les nouveaux requis.\n- `maintenanceTrackingMode` démarre le suivi, avec les mêmes exigences qu’à la création ; une fois démarré, le changer ou l’effacer → 409 `MAINTENANCE_TRACKING_ALREADY_STARTED`.\n\n**Refus** : véhicule archivé → 409 `VEHICLE_ARCHIVED` ; doublons et `categoryId` : comme à la [création](https://docs.lexio.rent/api-reference/flotte/create-vehicle).\n\n**Effet** : changer `isActive` recalcule la tranche d’abonnement Lexio de l’agence.",
        "tags": [
          "Flotte"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "vehicles.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "vehicleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du véhicule."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "status": "BREAKDOWN",
                "odometerKm": 18620
              },
              "schema": {
                "type": "object",
                "properties": {
                  "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.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9 -]{1,14}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "serialNumber": {
                    "description": "Numéro de série (deux-roues non immatriculé, par exemple) ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9 ._/-]{1,39}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vin": {
                    "description": "Numéro d’identification du véhicule (VIN, 17 caractères au plus) ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-HJ-NPR-Za-hj-npr-z0-9]{1,17}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "name": {
                    "description": "Nom d’usage donné par l’agence (ex. « 208 blanche ») ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "brand": {
                    "description": "Marque (ex. Peugeot).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 50
                  },
                  "model": {
                    "description": "Modèle (ex. 208).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 50
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 1000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "color": {
                    "description": "Couleur, en texte libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 30
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vehicleType": {
                    "description": "Type de véhicule : il fixe la famille et les champs applicables.",
                    "type": "string",
                    "enum": [
                      "CITY",
                      "COMPACT",
                      "CROSSOVER",
                      "SEDAN",
                      "BREAK",
                      "SUV",
                      "OFF_ROAD",
                      "PICKUP",
                      "MINIVAN",
                      "VAN",
                      "UTILITY",
                      "COUPE",
                      "CONVERTIBLE",
                      "SPORT",
                      "LUXURY",
                      "MOTORCYCLE",
                      "SCOOTER"
                    ]
                  },
                  "fuelType": {
                    "description": "Carburant ou motorisation : il fixe l’énergie et les champs applicables.",
                    "type": "string",
                    "enum": [
                      "PETROL",
                      "DIESEL",
                      "LPG",
                      "HYBRID",
                      "PLUGIN_HYBRID",
                      "ELECTRIC"
                    ]
                  },
                  "transmission": {
                    "description": "Boîte de vitesses ; null si non applicable au profil (deux-roues électrique).",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "MANUAL",
                          "AUTOMATIC"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "seats": {
                    "description": "Nombre de places : 1 à 50 pour une voiture, 1 à 3 pour un deux-roues.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 50
                  },
                  "doors": {
                    "description": "Nombre de portes ; null pour un deux-roues.",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 10
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "modelYear": {
                    "description": "Année modèle ; null si inconnue.",
                    "anyOf": [
                      {
                        "minimum": 1900,
                        "maximum": 2100,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "registrationDate": {
                    "description": "Date de première immatriculation (`YYYY-MM-DD`), jamais dans le futur ; null si inconnue.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "odometerKm": {
                    "minimum": 0,
                    "maximum": 10000000,
                    "description": "Kilométrage au compteur, en km.",
                    "type": "integer"
                  },
                  "powerKw": {
                    "description": "Puissance en kW ; null si inconnue. Un thermique va jusqu’à 1471 kW (2000 ch), un électrique jusqu’à 2000 kW.",
                    "anyOf": [
                      {
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "fuelCapacityLiters": {
                    "description": "Capacité du réservoir, en litres ; null pour un électrique ou si inconnue.",
                    "anyOf": [
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 500,
                        "description": "Au plus 1 décimale."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "batteryCapacityKwh": {
                    "description": "Capacité de la batterie de traction, en kWh ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 300,
                        "description": "Au plus 2 décimales."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "rangeKm": {
                    "description": "Autonomie électrique, en km ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "chargePortType": {
                    "description": "Prise de recharge ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "TYPE_1",
                          "TYPE_2",
                          "CCS",
                          "CHADEMO",
                          "DC",
                          "DOMESTIC"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "equipment": {
                    "description": "Équipements présents, parmi ceux de la famille et de l’énergie du véhicule. Remplace la liste entière ; chaque code une seule fois.",
                    "maxItems": 40,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "AIR_CONDITIONING",
                        "HEATED_SEATS",
                        "LEATHER_SEATS",
                        "KEYLESS_START",
                        "ELECTRIC_TRUNK",
                        "CONVERTIBLE_ROOF",
                        "SUNROOF",
                        "PANORAMIC_ROOF",
                        "GPS",
                        "BLUETOOTH",
                        "CARPLAY",
                        "ANDROID_AUTO",
                        "WIRELESS_CHARGING",
                        "ABS",
                        "ESP",
                        "CRUISE_CONTROL",
                        "ADAPTIVE_CRUISE_CONTROL",
                        "BLIND_SPOT_MONITOR",
                        "PARKING_SENSORS",
                        "REAR_CAMERA",
                        "PARKING_ASSIST",
                        "DASHCAM",
                        "TURBO",
                        "POWER_STEERING",
                        "START_STOP",
                        "ADBLUE",
                        "TOW_BAR",
                        "TOP_CASE",
                        "WINDSHIELD",
                        "HEATED_GRIPS",
                        "USB_PORT",
                        "TRACTION_CONTROL",
                        "ANTI_THEFT_ALARM",
                        "REMOVABLE_BATTERY",
                        "SPARE_BATTERY"
                      ]
                    }
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire (`GET /categories/{categoryId}`) ; null : véhicule sans prix, non réservable (`NO_PRICING_CATEGORY`).",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isActive": {
                    "description": "false : véhicule mis hors service par l’agence, non réservable (`INACTIVE`).",
                    "type": "boolean"
                  },
                  "status": {
                    "description": "`BREAKDOWN` : véhicule en panne, non réservable. `OPERATIONAL` sinon, location en cours comprise.",
                    "type": "string",
                    "enum": [
                      "OPERATIONAL",
                      "BREAKDOWN"
                    ]
                  },
                  "maintenanceTrackingMode": {
                    "description": "Mode de démarrage du suivi d’entretien, définitif une fois posé ; null : suivi non démarré. `FROM_ZERO` (véhicule neuf ou sans historique fiable) et `MANUAL_HISTORY` (historique saisi par `POST /maintenance-records`) comptent les échéances depuis 0 km et la première immatriculation ; `ASSUME_UP_TO_DATE` tient le véhicule pour à jour à son entrée en flotte (kilométrage et date de ce jour).",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "FROM_ZERO",
                          "ASSUME_UP_TO_DATE",
                          "MANUAL_HISTORY"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            },
            "application/merge-patch+json": {
              "example": {
                "status": "BREAKDOWN",
                "odometerKm": 18620
              },
              "schema": {
                "type": "object",
                "properties": {
                  "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.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9 -]{1,14}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "serialNumber": {
                    "description": "Numéro de série (deux-roues non immatriculé, par exemple) ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9 ._/-]{1,39}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vin": {
                    "description": "Numéro d’identification du véhicule (VIN, 17 caractères au plus) ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-HJ-NPR-Za-hj-npr-z0-9]{1,17}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "name": {
                    "description": "Nom d’usage donné par l’agence (ex. « 208 blanche ») ; null si absent.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 100
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "brand": {
                    "description": "Marque (ex. Peugeot).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 50
                  },
                  "model": {
                    "description": "Modèle (ex. 208).",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 50
                  },
                  "description": {
                    "description": "Description libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 1000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "color": {
                    "description": "Couleur, en texte libre ; null si absente.",
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 30
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vehicleType": {
                    "description": "Type de véhicule : il fixe la famille et les champs applicables.",
                    "type": "string",
                    "enum": [
                      "CITY",
                      "COMPACT",
                      "CROSSOVER",
                      "SEDAN",
                      "BREAK",
                      "SUV",
                      "OFF_ROAD",
                      "PICKUP",
                      "MINIVAN",
                      "VAN",
                      "UTILITY",
                      "COUPE",
                      "CONVERTIBLE",
                      "SPORT",
                      "LUXURY",
                      "MOTORCYCLE",
                      "SCOOTER"
                    ]
                  },
                  "fuelType": {
                    "description": "Carburant ou motorisation : il fixe l’énergie et les champs applicables.",
                    "type": "string",
                    "enum": [
                      "PETROL",
                      "DIESEL",
                      "LPG",
                      "HYBRID",
                      "PLUGIN_HYBRID",
                      "ELECTRIC"
                    ]
                  },
                  "transmission": {
                    "description": "Boîte de vitesses ; null si non applicable au profil (deux-roues électrique).",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "MANUAL",
                          "AUTOMATIC"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "seats": {
                    "description": "Nombre de places : 1 à 50 pour une voiture, 1 à 3 pour un deux-roues.",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 50
                  },
                  "doors": {
                    "description": "Nombre de portes ; null pour un deux-roues.",
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 2,
                        "maximum": 10
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "modelYear": {
                    "description": "Année modèle ; null si inconnue.",
                    "anyOf": [
                      {
                        "minimum": 1900,
                        "maximum": 2100,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "registrationDate": {
                    "description": "Date de première immatriculation (`YYYY-MM-DD`), jamais dans le futur ; null si inconnue.",
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "odometerKm": {
                    "minimum": 0,
                    "maximum": 10000000,
                    "description": "Kilométrage au compteur, en km.",
                    "type": "integer"
                  },
                  "powerKw": {
                    "description": "Puissance en kW ; null si inconnue. Un thermique va jusqu’à 1471 kW (2000 ch), un électrique jusqu’à 2000 kW.",
                    "anyOf": [
                      {
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "fuelCapacityLiters": {
                    "description": "Capacité du réservoir, en litres ; null pour un électrique ou si inconnue.",
                    "anyOf": [
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 500,
                        "description": "Au plus 1 décimale."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "batteryCapacityKwh": {
                    "description": "Capacité de la batterie de traction, en kWh ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "type": "number",
                        "exclusiveMinimum": 0,
                        "maximum": 300,
                        "description": "Au plus 2 décimales."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "rangeKm": {
                    "description": "Autonomie électrique, en km ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "chargePortType": {
                    "description": "Prise de recharge ; null si non applicable ou inconnue.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "TYPE_1",
                          "TYPE_2",
                          "CCS",
                          "CHADEMO",
                          "DC",
                          "DOMESTIC"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "equipment": {
                    "description": "Équipements présents, parmi ceux de la famille et de l’énergie du véhicule. Remplace la liste entière ; chaque code une seule fois.",
                    "maxItems": 40,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "AIR_CONDITIONING",
                        "HEATED_SEATS",
                        "LEATHER_SEATS",
                        "KEYLESS_START",
                        "ELECTRIC_TRUNK",
                        "CONVERTIBLE_ROOF",
                        "SUNROOF",
                        "PANORAMIC_ROOF",
                        "GPS",
                        "BLUETOOTH",
                        "CARPLAY",
                        "ANDROID_AUTO",
                        "WIRELESS_CHARGING",
                        "ABS",
                        "ESP",
                        "CRUISE_CONTROL",
                        "ADAPTIVE_CRUISE_CONTROL",
                        "BLIND_SPOT_MONITOR",
                        "PARKING_SENSORS",
                        "REAR_CAMERA",
                        "PARKING_ASSIST",
                        "DASHCAM",
                        "TURBO",
                        "POWER_STEERING",
                        "START_STOP",
                        "ADBLUE",
                        "TOW_BAR",
                        "TOP_CASE",
                        "WINDSHIELD",
                        "HEATED_GRIPS",
                        "USB_PORT",
                        "TRACTION_CONTROL",
                        "ANTI_THEFT_ALARM",
                        "REMOVABLE_BATTERY",
                        "SPARE_BATTERY"
                      ]
                    }
                  },
                  "categoryId": {
                    "description": "Catégorie tarifaire (`GET /categories/{categoryId}`) ; null : véhicule sans prix, non réservable (`NO_PRICING_CATEGORY`).",
                    "anyOf": [
                      {
                        "examples": [
                          "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                        ],
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "isActive": {
                    "description": "false : véhicule mis hors service par l’agence, non réservable (`INACTIVE`).",
                    "type": "boolean"
                  },
                  "status": {
                    "description": "`BREAKDOWN` : véhicule en panne, non réservable. `OPERATIONAL` sinon, location en cours comprise.",
                    "type": "string",
                    "enum": [
                      "OPERATIONAL",
                      "BREAKDOWN"
                    ]
                  },
                  "maintenanceTrackingMode": {
                    "description": "Mode de démarrage du suivi d’entretien, définitif une fois posé ; null : suivi non démarré. `FROM_ZERO` (véhicule neuf ou sans historique fiable) et `MANUAL_HISTORY` (historique saisi par `POST /maintenance-records`) comptent les échéances depuis 0 km et la première immatriculation ; `ASSUME_UP_TO_DATE` tient le véhicule pour à jour à son entrée en flotte (kilométrage et date de ce jour).",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "FROM_ZERO",
                          "ASSUME_UP_TO_DATE",
                          "MANUAL_HISTORY"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Modifier un véhicule",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Vehicle"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`MALFORMED_REQUEST`, `VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/MalformedRequestProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ValidationFailedProblem"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`ALREADY_EXISTS`, `IDEMPOTENCY_IN_FLIGHT`, `MAINTENANCE_TRACKING_ALREADY_STARTED`, `VEHICLE_ARCHIVED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AlreadyExistsProblem"
                    },
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/MaintenanceTrackingAlreadyStartedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/VehicleArchivedProblem"
                    }
                  ]
                }
              }
            }
          },
          "413": {
            "description": "`PAYLOAD_TOO_LARGE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeProblem"
                }
              }
            }
          },
          "415": {
            "description": "`UNSUPPORTED_MEDIA_TYPE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`, `REFERENCE_NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ReferenceNotFoundProblem"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/flotte/update-vehicle",
          "metadata": {
            "title": "Modifier un véhicule",
            "sidebarTitle": "Modifier un véhicule"
          }
        }
      }
    },
    "/vehicles/{vehicleId}/archive": {
      "post": {
        "operationId": "archiveVehicle",
        "summary": "Archiver un véhicule",
        "description": "**Accès** : `vehicles.write`\n\nRetire le véhicule de la flotte active sans perdre son historique : il n’est plus réservable (`ARCHIVED` dans `notBookableReasons`) ni modifiable. Sans corps ; idempotente : un véhicule déjà archivé répond 200 sans changement.\n\n**Refus** : location en attente de validation, réservée ou en cours → 409 `RESOURCE_IN_USE` (`blockers` : `ACTIVE_RENTALS`).\n\n**Effet** : la tranche d’abonnement Lexio de l’agence (véhicules actifs non archivés) est recalculée.",
        "tags": [
          "Flotte"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "vehicles.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "vehicleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du véhicule."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Archiver un véhicule",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Vehicle"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {}
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`, `RESOURCE_IN_USE`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ResourceInUseProblem"
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/flotte/archive-vehicle",
          "metadata": {
            "title": "Archiver un véhicule",
            "sidebarTitle": "Archiver un véhicule"
          }
        }
      }
    },
    "/vehicles/{vehicleId}/maintenance-alerts": {
      "get": {
        "operationId": "listVehicleMaintenanceAlerts",
        "summary": "Lister les échéances d’entretien d’un véhicule",
        "description": "**Accès** : `maintenance.read`\n\nListe les échéances d’entretien d’un véhicule : une ligne par opération activée et applicable (famille, énergie), contrôle technique compris.\n\n- `status` : `OVERDUE` si `remainingKm` ou `remainingDays` est négatif, `UPCOMING` sous 1000 km ou 30 jours restants, `OK` sinon. Le paramètre `status` filtre (valeurs séparées par des virgules).\n- Tri : `OVERDUE`, `UPCOMING`, `OK`, puis km restants, jours restants et `operationCode`. Liste complète, sans pagination.\n- `isBlockingRentals` : l’opération en retard rend le véhicule non réservable (`MAINTENANCE_OVERDUE`), si l’agence bloque les réservations sur ce retard. Le blocage se calcule à l’heure : le jour de l’échéance, il peut précéder ou suivre `status` de quelques heures. Un contrôle technique échoué en attente de contre-visite bloque aussi (ligne `CT_INSPECTION` si elle est suivie, sinon seulement `notBookableReasons` du véhicule).\n\n**Refus** : suivi d’entretien non démarré → 409 `MAINTENANCE_TRACKING_NOT_STARTED` ; il se démarre par `maintenanceTrackingMode` de [`PATCH /vehicles/{vehicleId}`](https://docs.lexio.rent/api-reference/flotte/update-vehicle).",
        "tags": [
          "Entretien"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "maintenance.read"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "vehicleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du véhicule."
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            },
            "description": "Valeurs séparées par des virgules parmi : OVERDUE, UPCOMING, OK."
          }
        ],
        "responses": {
          "200": {
            "description": "Lister les échéances d’entretien d’un véhicule",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MaintenanceAlert"
                      }
                    },
                    "nextCursor": {
                      "description": "Curseur de la page suivante, à passer tel quel en `cursor` ; null en fin de liste. Voir [Pagination](https://docs.lexio.rent/pagination).",
                      "examples": [
                        "eyJpZCI6IjljMmQ3ZTRhIn0"
                      ],
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "nextCursor"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`MAINTENANCE_TRACKING_NOT_STARTED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MaintenanceTrackingNotStartedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/entretien/list-vehicle-maintenance-alerts",
          "metadata": {
            "title": "Lister les échéances d’entretien d’un véhicule",
            "sidebarTitle": "Lister les échéances d’entretien d’un véhicule"
          }
        }
      }
    },
    "/vehicles/{vehicleId}/unarchive": {
      "post": {
        "operationId": "unarchiveVehicle",
        "summary": "Désarchiver un véhicule",
        "description": "**Accès** : `vehicles.write`\n\nRemet le véhicule dans la flotte : il redevient modifiable et `ARCHIVED` quitte `notBookableReasons`. Sans corps ; idempotente : un véhicule non archivé répond 200 sans changement.\n\n**Effet** : la tranche d’abonnement Lexio de l’agence (véhicules actifs non archivés) est recalculée.",
        "tags": [
          "Flotte"
        ],
        "security": [
          {
            "ApiKey": []
          }
        ],
        "x-required-scopes": [
          "vehicles.write"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "vehicleId",
            "schema": {
              "examples": [
                "7c9e6679-7425-40de-944b-e07fc1f90ae7"
              ],
              "type": "string",
              "format": "uuid"
            },
            "required": true,
            "description": "Identifiant du véhicule."
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "Désarchiver un véhicule",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Idempotent-Replayed": {
                "$ref": "#/components/headers/IdempotentReplayed"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Vehicle"
                    },
                    "effects": {
                      "type": "object",
                      "properties": {}
                    }
                  },
                  "required": [
                    "data",
                    "effects"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`VALIDATION_FAILED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationFailedProblem"
                }
              }
            }
          },
          "401": {
            "description": "`API_KEY_DISABLED`, `API_KEY_EXPIRED`, `API_KEY_INVALID`, `API_KEY_MISSING`, `API_KEY_REVOKED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "WWW-Authenticate": {
                "$ref": "#/components/headers/WwwAuthenticate"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ApiKeyDisabledProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyExpiredProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyInvalidProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyMissingProblem"
                    },
                    {
                      "$ref": "#/components/schemas/ApiKeyRevokedProblem"
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "description": "`FEATURE_NOT_AVAILABLE`, `INSUFFICIENT_SCOPE`, `ORGANIZATION_SUSPENDED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/FeatureNotAvailableProblem"
                    },
                    {
                      "$ref": "#/components/schemas/InsufficientScopeProblem"
                    },
                    {
                      "$ref": "#/components/schemas/OrganizationSuspendedProblem"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "`NOT_FOUND`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundProblem"
                }
              }
            }
          },
          "409": {
            "description": "`IDEMPOTENCY_IN_FLIGHT`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyInFlightProblem"
                }
              }
            }
          },
          "422": {
            "description": "`IDEMPOTENCY_KEY_REUSED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyKeyReusedProblem"
                }
              }
            }
          },
          "429": {
            "description": "`RATE_LIMITED`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/RetryAfter"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitedProblem"
                }
              }
            }
          },
          "500": {
            "description": "`INTERNAL_ERROR`",
            "headers": {
              "X-Request-Id": {
                "$ref": "#/components/headers/XRequestId"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorProblem"
                }
              }
            }
          }
        },
        "x-mint": {
          "href": "/api-reference/flotte/unarchive-vehicle",
          "metadata": {
            "title": "Désarchiver un véhicule",
            "sidebarTitle": "Désarchiver un véhicule"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Offer": {
        "description": "Prix réservable d’un véhicule pour la période, avec le forfait, la franchise et la caution par défaut. Indicatif : seul un devis garantit le prix.",
        "examples": [
          {
            "vehicle": {
              "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
              "name": "208 Allure",
              "brand": "Peugeot",
              "model": "208",
              "vehicleType": "CITY",
              "plate": "AB-123-CD",
              "serialNumber": null,
              "description": "Citadine 5 portes, idéale pour la ville et la Côte d’Azur.",
              "color": "Blanc",
              "seats": 5,
              "doors": 5,
              "transmission": "MANUAL",
              "fuelType": "PETROL",
              "equipment": [
                "AIR_CONDITIONING",
                "BLUETOOTH",
                "GPS"
              ],
              "imageUrls": [
                "https://cdn.lexio.rent/vehicles/3b1f5c2a/front.webp"
              ],
              "category": {
                "id": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
                "name": "Citadine"
              }
            },
            "currency": "EUR",
            "period": {
              "startAt": "2026-11-10T10:00:00+01:00",
              "endAt": "2026-11-15T10:00:00+01:00",
              "timezone": "Europe/Paris",
              "billedDays": 5,
              "durationMinutes": 7200
            },
            "isAvailable": true,
            "unavailableReasons": [],
            "mileage": {
              "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
              "name": "200 km/jour",
              "isUnlimited": false,
              "includedKm": 1000,
              "overageRatePerKmHT": 0.25
            },
            "deductible": {
              "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
              "name": "Franchise réduite",
              "description": "Reste à charge réduit en cas de sinistre.",
              "excessAmount": 500
            },
            "deposit": {
              "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
              "name": "Caution citadine",
              "depositAmount": 800
            },
            "vatPercent": 20,
            "totalHT": 237,
            "vatAmount": 47.4,
            "totalTTC": 284.4,
            "lines": [
              {
                "key": "BASE",
                "label": "Tarif de base",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 210,
                "unitPriceTTC": 252,
                "amountHT": 210,
                "amountTTC": 252,
                "ratePercent": null
              },
              {
                "key": "DURATION_DISCOUNT",
                "label": "Réduction durée 5 jours",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": -10.5,
                "unitPriceTTC": -12.6,
                "amountHT": -10.5,
                "amountTTC": -12.6,
                "ratePercent": 5
              },
              {
                "key": "MILEAGE",
                "label": "Forfait 200 km/jour",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 0,
                "unitPriceTTC": 0,
                "amountHT": 0,
                "amountTTC": 0,
                "ratePercent": null
              },
              {
                "key": "DEDUCTIBLE",
                "label": "Franchise réduite",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 37.5,
                "unitPriceTTC": 45,
                "amountHT": 37.5,
                "amountTTC": 45,
                "ratePercent": null
              }
            ],
            "pricingBasis": {
              "dailyPrices": [
                {
                  "date": "2026-11-10",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                },
                {
                  "date": "2026-11-11",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                },
                {
                  "date": "2026-11-12",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                },
                {
                  "date": "2026-11-13",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                },
                {
                  "date": "2026-11-14",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                }
              ],
              "leadTime": null
            }
          }
        ],
        "type": "object",
        "properties": {
          "vehicle": {
            "$ref": "#/components/schemas/OfferVehicle"
          },
          "currency": {
            "description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "isAvailable": {
            "description": "true : réservable tel quel sur la période ; sinon voir `unavailableReasons`.",
            "type": "boolean"
          },
          "unavailableReasons": {
            "description": "Causes d’indisponibilité sur la période : `BOOKED` (déjà loué), `BLOCKED` (blocage de planning), `BUFFER` (délai entre deux locations), `BREAKDOWN` (en panne), `MAINTENANCE_OVERDUE` (entretien dépassé) ; vide si `isAvailable`.",
            "maxItems": 8,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "BOOKED",
                "BLOCKED",
                "BUFFER",
                "BREAKDOWN",
                "MAINTENANCE_OVERDUE"
              ]
            }
          },
          "mileage": {
            "$ref": "#/components/schemas/Mileage"
          },
          "deductible": {
            "description": "Franchise par défaut ; null sans franchise.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/DeductibleSnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "deposit": {
            "description": "Caution par défaut ; null sans caution.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/DepositSnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "vatPercent": {
            "description": "Taux de TVA appliqué, en pourcentage (20 = 20 %) ; 0 en autoliquidation ou pour une agence exonérée. Au plus 2 décimales.",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "totalHT": {
            "description": "Total hors taxes : somme des `lines[].amountHT`.",
            "type": "number"
          },
          "vatAmount": {
            "description": "Montant de la TVA : `totalTTC − totalHT`.",
            "type": "number"
          },
          "totalTTC": {
            "description": "Total toutes taxes comprises : somme des `lines[].amountTTC`. Caution et franchise n’y sont jamais comptées.",
            "type": "number"
          },
          "lines": {
            "description": "Détail du prix, une ligne par règle appliquée.",
            "maxItems": 20,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceLine"
            }
          },
          "pricingBasis": {
            "$ref": "#/components/schemas/PricingBasis"
          }
        },
        "required": [
          "vehicle",
          "currency",
          "period",
          "isAvailable",
          "unavailableReasons",
          "mileage",
          "deductible",
          "deposit",
          "vatPercent",
          "totalHT",
          "vatAmount",
          "totalTTC",
          "lines",
          "pricingBasis"
        ]
      },
      "OfferVehicle": {
        "description": "Véhicule proposé, avec son descriptif de vente et sa catégorie tarifaire.",
        "examples": [
          {
            "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
            "name": "208 Allure",
            "brand": "Peugeot",
            "model": "208",
            "vehicleType": "CITY",
            "plate": "AB-123-CD",
            "serialNumber": null,
            "description": "Citadine 5 portes, idéale pour la ville et la Côte d’Azur.",
            "color": "Blanc",
            "seats": 5,
            "doors": 5,
            "transmission": "MANUAL",
            "fuelType": "PETROL",
            "equipment": [
              "AIR_CONDITIONING",
              "BLUETOOTH",
              "GPS"
            ],
            "imageUrls": [
              "https://cdn.lexio.rent/vehicles/3b1f5c2a/front.webp"
            ],
            "category": {
              "id": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
              "name": "Citadine"
            }
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant du véhicule.",
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "description": "Nom d’usage donné par l’agence (ex. « 208 blanche ») ; null si absent.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "brand": {
            "description": "Marque (ex. Peugeot).",
            "type": "string",
            "maxLength": 50
          },
          "model": {
            "description": "Modèle (ex. 208).",
            "type": "string",
            "maxLength": 50
          },
          "vehicleType": {
            "description": "Type de véhicule : il fixe la famille et les champs applicables.",
            "type": "string",
            "enum": [
              "CITY",
              "COMPACT",
              "CROSSOVER",
              "SEDAN",
              "BREAK",
              "SUV",
              "OFF_ROAD",
              "PICKUP",
              "MINIVAN",
              "VAN",
              "UTILITY",
              "COUPE",
              "CONVERTIBLE",
              "SPORT",
              "LUXURY",
              "MOTORCYCLE",
              "SCOOTER"
            ]
          },
          "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.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "serialNumber": {
            "description": "Numéro de série (deux-roues non immatriculé, par exemple) ; null si absent.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "description": "Description libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ]
          },
          "color": {
            "description": "Couleur, en texte libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "seats": {
            "description": "Nombre de places : 1 à 50 pour une voiture, 1 à 3 pour un deux-roues.",
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "doors": {
            "description": "Nombre de portes ; null pour un deux-roues.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 2,
                "maximum": 10
              },
              {
                "type": "null"
              }
            ]
          },
          "transmission": {
            "description": "Boîte de vitesses ; null si non applicable au profil (deux-roues électrique).",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "MANUAL",
                  "AUTOMATIC"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "fuelType": {
            "description": "Carburant ou motorisation : il fixe l’énergie et les champs applicables.",
            "type": "string",
            "enum": [
              "PETROL",
              "DIESEL",
              "LPG",
              "HYBRID",
              "PLUGIN_HYBRID",
              "ELECTRIC"
            ]
          },
          "equipment": {
            "description": "Équipements présents, parmi ceux de la famille et de l’énergie du véhicule.",
            "maxItems": 40,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "AIR_CONDITIONING",
                "HEATED_SEATS",
                "LEATHER_SEATS",
                "KEYLESS_START",
                "ELECTRIC_TRUNK",
                "CONVERTIBLE_ROOF",
                "SUNROOF",
                "PANORAMIC_ROOF",
                "GPS",
                "BLUETOOTH",
                "CARPLAY",
                "ANDROID_AUTO",
                "WIRELESS_CHARGING",
                "ABS",
                "ESP",
                "CRUISE_CONTROL",
                "ADAPTIVE_CRUISE_CONTROL",
                "BLIND_SPOT_MONITOR",
                "PARKING_SENSORS",
                "REAR_CAMERA",
                "PARKING_ASSIST",
                "DASHCAM",
                "TURBO",
                "POWER_STEERING",
                "START_STOP",
                "ADBLUE",
                "TOW_BAR",
                "TOP_CASE",
                "WINDSHIELD",
                "HEATED_GRIPS",
                "USB_PORT",
                "TRACTION_CONTROL",
                "ANTI_THEFT_ALARM",
                "REMOVABLE_BATTERY",
                "SPARE_BATTERY"
              ]
            }
          },
          "imageUrls": {
            "description": "Photos de présentation, URL publiques stables, dans l’ordre choisi dans Lexio.",
            "maxItems": 30,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "category": {
            "description": "Catégorie tarifaire du véhicule (`GET /categories`).",
            "type": "object",
            "properties": {
              "id": {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              "name": {
                "type": "string",
                "maxLength": 200
              }
            },
            "required": [
              "id",
              "name"
            ]
          }
        },
        "required": [
          "id",
          "name",
          "brand",
          "model",
          "vehicleType",
          "plate",
          "serialNumber",
          "description",
          "color",
          "seats",
          "doors",
          "transmission",
          "fuelType",
          "equipment",
          "imageUrls",
          "category"
        ]
      },
      "Period": {
        "description": "Période contractuelle, bornes à l’heure de l’agence.",
        "examples": [
          {
            "startAt": "2026-11-10T10:00:00+01:00",
            "endAt": "2026-11-15T10:00:00+01:00",
            "timezone": "Europe/Paris",
            "billedDays": 5,
            "durationMinutes": 7200
          }
        ],
        "type": "object",
        "properties": {
          "startAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Début contractuel, à l’heure de l’agence.",
            "type": "string",
            "format": "date-time"
          },
          "endAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Fin contractuelle, à l’heure de l’agence.",
            "type": "string",
            "format": "date-time"
          },
          "timezone": {
            "description": "Fuseau horaire IANA de l’agence.",
            "examples": [
              "Europe/Paris"
            ],
            "type": "string",
            "minLength": 1
          },
          "billedDays": {
            "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.",
            "type": "integer",
            "minimum": 0
          },
          "durationMinutes": {
            "description": "Durée exacte entre `startAt` et `endAt`, en minutes.",
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "startAt",
          "endAt",
          "timezone",
          "billedDays",
          "durationMinutes"
        ]
      },
      "Mileage": {
        "description": "Kilométrage inclus et prix du dépassement.",
        "examples": [
          {
            "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
            "name": "200 km/jour",
            "isUnlimited": false,
            "includedKm": 1000,
            "overageRatePerKmHT": 0.25
          }
        ],
        "type": "object",
        "properties": {
          "mileagePackageId": {
            "description": "Forfait kilométrique du catalogue (`GET /mileage-packages`) ; null sans forfait.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "description": "Nom du forfait ; null sans forfait.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "isUnlimited": {
            "description": "true : aucun plafond ; `includedKm` et `overageRatePerKmHT` valent alors null.",
            "type": "boolean"
          },
          "includedKm": {
            "description": "Kilomètres inclus pour toute la période, pas par jour ; null si illimité.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "overageRatePerKmHT": {
            "description": "Prix HT de chaque kilomètre au-delà de `includedKm`, facturé au retour ; null si illimité ou sans tarif de dépassement.",
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 999999.9999,
                "description": "Au plus 4 décimales."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "mileagePackageId",
          "name",
          "isUnlimited",
          "includedKm",
          "overageRatePerKmHT"
        ]
      },
      "DeductibleSnapshot": {
        "description": "Franchise retenue, figée au moment du calcul.",
        "examples": [
          {
            "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
            "name": "Franchise réduite",
            "description": "Reste à charge réduit en cas de sinistre.",
            "excessAmount": 500
          }
        ],
        "type": "object",
        "properties": {
          "deductibleId": {
            "description": "Franchise du catalogue (`GET /deductibles`) ; null si elle a été supprimée depuis.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "description": "Nom de la franchise ; null si elle a été supprimée depuis.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "description": "Description de la franchise ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          },
          "excessAmount": {
            "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`.",
            "type": "number",
            "minimum": 0
          }
        },
        "required": [
          "deductibleId",
          "name",
          "description",
          "excessAmount"
        ]
      },
      "DepositSnapshot": {
        "description": "Caution retenue, figée au moment du calcul.",
        "examples": [
          {
            "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
            "name": "Caution citadine",
            "depositAmount": 800
          }
        ],
        "type": "object",
        "properties": {
          "depositId": {
            "description": "Caution du catalogue (`GET /deposits`) ; null si elle a été supprimée depuis.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "description": "Nom de la caution ; null si elle a été supprimée depuis.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "depositAmount": {
            "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`).",
            "type": "number",
            "minimum": 0
          }
        },
        "required": [
          "depositId",
          "name",
          "depositAmount"
        ]
      },
      "PriceLine": {
        "description": "Ligne de prix d’une offre, d’un devis ou d’une location.",
        "examples": [
          {
            "key": "OPTION",
            "label": "Siège enfant",
            "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
            "quantity": 1,
            "unitPriceHT": 20,
            "unitPriceTTC": 24,
            "amountHT": 20,
            "amountTTC": 24,
            "ratePercent": null
          }
        ],
        "type": "object",
        "properties": {
          "key": {
            "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).",
            "type": "string",
            "enum": [
              "BASE",
              "LEAD_TIME_ADJUSTMENT",
              "DURATION_DISCOUNT",
              "COMMERCIAL_DISCOUNT",
              "WEEKEND_SURCHARGE",
              "SHORT_DURATION_SURCHARGE",
              "MILEAGE",
              "DEDUCTIBLE",
              "OPTION",
              "CHARGE",
              "PROMO",
              "MILEAGE_OVERAGE",
              "MODIFICATION"
            ]
          },
          "label": {
            "description": "Libellé affichable ; ne pas l’analyser, lire `key`.",
            "type": "string"
          },
          "refId": {
            "description": "Élément à l’origine de la ligne : `optionId` pour `OPTION`, identifiant du frais pour `CHARGE` et `MILEAGE_OVERAGE` d’une location ; null sinon.",
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "quantity": {
            "description": "Nombre d’exemplaires (option) ; 1 pour les autres lignes.",
            "type": "integer",
            "minimum": 1
          },
          "unitPriceHT": {
            "description": "Prix HT d’un exemplaire pour toute la période (`OPTION`) ; égal à `amountHT` sinon.",
            "type": "number"
          },
          "unitPriceTTC": {
            "description": "Prix TTC d’un exemplaire pour toute la période (`OPTION`) ; égal à `amountTTC` sinon.",
            "type": "number"
          },
          "amountHT": {
            "description": "Montant HT de la ligne, signé : négatif pour une remise.",
            "type": "number"
          },
          "amountTTC": {
            "description": "Montant TTC de la ligne, signé : négatif pour une remise.",
            "type": "number"
          },
          "ratePercent": {
            "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.",
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 100,
                "description": "Au plus 2 décimales."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "key",
          "label",
          "refId",
          "quantity",
          "unitPriceHT",
          "unitPriceTTC",
          "amountHT",
          "amountTTC",
          "ratePercent"
        ]
      },
      "PricingBasis": {
        "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`.",
        "examples": [
          {
            "dailyPrices": [
              {
                "date": "2026-11-10",
                "seasonSlug": "basse",
                "dailyPriceHT": 42
              },
              {
                "date": "2026-11-11",
                "seasonSlug": "basse",
                "dailyPriceHT": 42
              },
              {
                "date": "2026-11-12",
                "seasonSlug": "basse",
                "dailyPriceHT": 42
              },
              {
                "date": "2026-11-13",
                "seasonSlug": "basse",
                "dailyPriceHT": 42
              },
              {
                "date": "2026-11-14",
                "seasonSlug": "basse",
                "dailyPriceHT": 42
              }
            ],
            "leadTime": null
          }
        ],
        "type": "object",
        "properties": {
          "dailyPrices": {
            "description": "Un élément par jour facturé.",
            "maxItems": 1095,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "description": "Jour facturé, à l’heure de l’agence.",
                  "type": "string",
                  "format": "date"
                },
                "seasonSlug": {
                  "description": "Saison du jour (`GET /seasons`) ; null sans saison.",
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "dailyPriceHT": {
                  "description": "Prix HT du jour au catalogue, avant facteur de délai.",
                  "type": "number",
                  "minimum": 0
                }
              },
              "required": [
                "date",
                "seasonSlug",
                "dailyPriceHT"
              ]
            }
          },
          "leadTime": {
            "description": "Palier de délai de réservation appliqué ; null sans palier.",
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "leadTimeTierId": {
                    "description": "Palier de délai (`GET /lead-time-tiers`).",
                    "type": "string",
                    "format": "uuid"
                  },
                  "leadDays": {
                    "description": "Jours calendaires entre le calcul du prix et le départ.",
                    "type": "integer",
                    "minimum": 0
                  },
                  "priceFactors": {
                    "description": "Facteur appliqué au prix journalier de chaque saison.",
                    "maxItems": 10,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "seasonSlug": {
                          "type": "string"
                        },
                        "priceFactor": {
                          "description": "Facteur du prix journalier (1 = inchangé). Au plus 4 décimales.",
                          "type": "number",
                          "minimum": 0.1,
                          "maximum": 10
                        }
                      },
                      "required": [
                        "seasonSlug",
                        "priceFactor"
                      ]
                    }
                  }
                },
                "required": [
                  "leadTimeTierId",
                  "leadDays",
                  "priceFactors"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "dailyPrices",
          "leadTime"
        ]
      },
      "ValidationFailedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/validation-failed"
          },
          "title": {
            "type": "string",
            "const": "Requête invalide"
          },
          "status": {
            "type": "number",
            "const": 400
          },
          "code": {
            "type": "string",
            "const": "VALIDATION_FAILED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "errors"
        ]
      },
      "ApiKeyDisabledProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/api-key-disabled"
          },
          "title": {
            "type": "string",
            "const": "Clé API désactivée"
          },
          "status": {
            "type": "number",
            "const": 401
          },
          "code": {
            "type": "string",
            "const": "API_KEY_DISABLED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "ApiKeyExpiredProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/api-key-expired"
          },
          "title": {
            "type": "string",
            "const": "Clé API expirée"
          },
          "status": {
            "type": "number",
            "const": 401
          },
          "code": {
            "type": "string",
            "const": "API_KEY_EXPIRED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "ApiKeyInvalidProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/api-key-invalid"
          },
          "title": {
            "type": "string",
            "const": "Clé API invalide"
          },
          "status": {
            "type": "number",
            "const": 401
          },
          "code": {
            "type": "string",
            "const": "API_KEY_INVALID"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "ApiKeyMissingProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/api-key-missing"
          },
          "title": {
            "type": "string",
            "const": "Clé API absente"
          },
          "status": {
            "type": "number",
            "const": 401
          },
          "code": {
            "type": "string",
            "const": "API_KEY_MISSING"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "ApiKeyRevokedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/api-key-revoked"
          },
          "title": {
            "type": "string",
            "const": "Clé API révoquée"
          },
          "status": {
            "type": "number",
            "const": 401
          },
          "code": {
            "type": "string",
            "const": "API_KEY_REVOKED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "FeatureNotAvailableProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/feature-not-available"
          },
          "title": {
            "type": "string",
            "const": "Fonctionnalité non incluse"
          },
          "status": {
            "type": "number",
            "const": 403
          },
          "code": {
            "type": "string",
            "const": "FEATURE_NOT_AVAILABLE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "feature": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "feature"
        ]
      },
      "InsufficientScopeProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/insufficient-scope"
          },
          "title": {
            "type": "string",
            "const": "Scope insuffisant"
          },
          "status": {
            "type": "number",
            "const": 403
          },
          "code": {
            "type": "string",
            "const": "INSUFFICIENT_SCOPE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "requiredScopes": {
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "offers.read",
                "quotes.write",
                "rentals.read",
                "rentals.write",
                "rentals.operate",
                "rentals.delete",
                "payments.write",
                "payments.refund",
                "customers.read",
                "customers.write",
                "customers.delete",
                "vehicles.read",
                "vehicles.write",
                "vehicles.delete",
                "catalog.read",
                "catalog.write",
                "pricing.read",
                "pricing.write",
                "maintenance.read",
                "maintenance.write"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "requiredScopes"
        ]
      },
      "OrganizationSuspendedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/organization-suspended"
          },
          "title": {
            "type": "string",
            "const": "Organisation suspendue"
          },
          "status": {
            "type": "number",
            "const": 403
          },
          "code": {
            "type": "string",
            "const": "ORGANIZATION_SUSPENDED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "BookingRuleViolationProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/booking-rule-violation"
          },
          "title": {
            "type": "string",
            "const": "Règle de réservation non respectée"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "BOOKING_RULE_VIOLATION"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "rule": {
            "type": "string",
            "enum": [
              "LEAD_TIME",
              "HORIZON",
              "MIN_DURATION",
              "CLOSED_DAY",
              "OUTSIDE_HOURS"
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "errors",
          "rule"
        ]
      },
      "RateLimitedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/rate-limited"
          },
          "title": {
            "type": "string",
            "const": "Trop de requêtes"
          },
          "status": {
            "type": "number",
            "const": 429
          },
          "code": {
            "type": "string",
            "const": "RATE_LIMITED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "limit": {
            "type": "string",
            "enum": [
              "PRE_AUTH",
              "PER_KEY",
              "WRITE",
              "QUOTE"
            ]
          },
          "windowSeconds": {
            "type": "integer",
            "minimum": 1
          },
          "retryAfter": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "limit",
          "windowSeconds",
          "retryAfter"
        ]
      },
      "InternalErrorProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/internal-error"
          },
          "title": {
            "type": "string",
            "const": "Erreur interne"
          },
          "status": {
            "type": "number",
            "const": 500
          },
          "code": {
            "type": "string",
            "const": "INTERNAL_ERROR"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "Category": {
        "examples": [
          {
            "id": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
            "name": "Citadine",
            "description": "Peugeot 208, Renault Clio ou équivalent",
            "currency": "EUR",
            "baseDailyPriceHT": 42,
            "seasonPrices": [
              {
                "seasonSlug": "basse",
                "dailyPriceHT": 42
              },
              {
                "seasonSlug": "moyenne",
                "dailyPriceHT": 46.2
              },
              {
                "seasonSlug": "haute",
                "dailyPriceHT": 56.7
              }
            ],
            "overageRatePerKmHT": 0.25,
            "vehicleCount": 6,
            "activeVehicleCount": 5,
            "createdAt": "2026-01-12T10:21:44+01:00",
            "updatedAt": "2026-10-30T16:05:09+01:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant de la catégorie tarifaire.",
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "description": "Nom de la catégorie, unique dans l’organisation (casse ignorée).",
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "description": "Description libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "currency": {
            "description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "baseDailyPriceHT": {
            "description": "Prix journalier HT de base. Le prix de chaque saison en découle : base × `priceFactor` de la saison (`GET /seasons`).",
            "type": "number"
          },
          "seasonPrices": {
            "description": "Prix journalier HT par saison, une entrée par saison de l’organisation ; recalculé par Lexio quand le prix de base ou un `priceFactor` change.",
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "seasonSlug": {
                  "description": "Saison (`GET /seasons/{slug}`).",
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 50,
                  "pattern": "^[a-z0-9_]+$"
                },
                "dailyPriceHT": {
                  "description": "Prix journalier HT de la catégorie dans cette saison.",
                  "type": "number"
                }
              },
              "required": [
                "seasonSlug",
                "dailyPriceHT"
              ]
            }
          },
          "overageRatePerKmHT": {
            "description": "Prix HT de chaque kilomètre au-delà des kilomètres inclus, 4 décimales au plus ; null : aucun prix de dépassement défini.",
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 999999.9999,
                "description": "Au plus 4 décimales."
              },
              {
                "type": "null"
              }
            ]
          },
          "vehicleCount": {
            "description": "Véhicules rattachés, archivés et inactifs compris ; non nul, il empêche la suppression.",
            "type": "integer",
            "minimum": 0
          },
          "activeVehicleCount": {
            "description": "Véhicules rattachés, actifs et non archivés.",
            "type": "integer",
            "minimum": 0
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Création, heure de l’agence avec décalage.",
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "currency",
          "baseDailyPriceHT",
          "seasonPrices",
          "overageRatePerKmHT",
          "vehicleCount",
          "activeVehicleCount",
          "createdAt",
          "updatedAt"
        ]
      },
      "MalformedRequestProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/malformed-request"
          },
          "title": {
            "type": "string",
            "const": "Corps de requête illisible"
          },
          "status": {
            "type": "number",
            "const": 400
          },
          "code": {
            "type": "string",
            "const": "MALFORMED_REQUEST"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "AlreadyExistsProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/already-exists"
          },
          "title": {
            "type": "string",
            "const": "Doublon"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "ALREADY_EXISTS"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "field": {
            "type": "string",
            "minLength": 1
          },
          "conflictingId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "field",
          "conflictingId"
        ]
      },
      "IdempotencyInFlightProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/idempotency-in-flight"
          },
          "title": {
            "type": "string",
            "const": "Requête identique en cours"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "IDEMPOTENCY_IN_FLIGHT"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "PayloadTooLargeProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/payload-too-large"
          },
          "title": {
            "type": "string",
            "const": "Corps trop volumineux"
          },
          "status": {
            "type": "number",
            "const": 413
          },
          "code": {
            "type": "string",
            "const": "PAYLOAD_TOO_LARGE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "maxBytes"
        ]
      },
      "UnsupportedMediaTypeProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/unsupported-media-type"
          },
          "title": {
            "type": "string",
            "const": "Type de contenu non pris en charge"
          },
          "status": {
            "type": "number",
            "const": 415
          },
          "code": {
            "type": "string",
            "const": "UNSUPPORTED_MEDIA_TYPE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "accepted": {
            "minItems": 1,
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "accepted"
        ]
      },
      "IdempotencyKeyReusedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/idempotency-key-reused"
          },
          "title": {
            "type": "string",
            "const": "Clé d’idempotence réutilisée"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "IDEMPOTENCY_KEY_REUSED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "NotFoundProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/not-found"
          },
          "title": {
            "type": "string",
            "const": "Ressource introuvable"
          },
          "status": {
            "type": "number",
            "const": 404
          },
          "code": {
            "type": "string",
            "const": "NOT_FOUND"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "resource": {
            "type": "string",
            "enum": [
              "RENTAL",
              "RENTAL_OPTION",
              "QUOTE",
              "PAYMENT",
              "INVOICE",
              "PHOTO",
              "AMENDMENT",
              "INSPECTION",
              "CUSTOMER",
              "VEHICLE",
              "VEHICLE_BLOCK",
              "CATEGORY",
              "OPTION",
              "DEDUCTIBLE",
              "DEPOSIT",
              "MILEAGE_PACKAGE",
              "LOCATION",
              "SEASON",
              "SEASON_CALENDAR_MONTH",
              "DURATION_DISCOUNT",
              "LEAD_TIME_TIER",
              "MAINTENANCE_RECORD",
              "MAINTENANCE_OPERATION"
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "resource"
        ]
      },
      "ResourceInUseProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/resource-in-use"
          },
          "title": {
            "type": "string",
            "const": "Ressource utilisée"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "RESOURCE_IN_USE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "blockers": {
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "enum": [
                    "RENTALS",
                    "ACTIVE_RENTALS",
                    "INCIDENTS",
                    "CONTRAVENTIONS",
                    "MAINTENANCE_RECORDS",
                    "INSPECTIONS",
                    "VEHICLE_CHECKS",
                    "VEHICLE_BLOCKS",
                    "VEHICLES",
                    "DEPOSITS",
                    "DEDUCTIBLES",
                    "INVOICES",
                    "FINALIZED_ACCOUNTING_INVOICES",
                    "PAYMENTS_HELD",
                    "DEPOSITS_HELD",
                    "SALES_QUOTES",
                    "SEASON_CALENDAR_DAYS"
                  ]
                },
                "count": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "required": [
                "code",
                "count"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "blockers"
        ]
      },
      "Customer": {
        "examples": [
          {
            "id": "2c9d4e7a-8b1f-4a3c-9e5d-6f7a8b9c0d1e",
            "isCompany": false,
            "partnerCode": null,
            "firstName": "Marie",
            "lastName": "MARTIN",
            "companyName": null,
            "email": "marie.martin@example.com",
            "phone": "+33612345678",
            "birthDate": "1988-04-22",
            "birthCity": "Lyon",
            "nationality": "Française",
            "licenseNumber": "12AB34567",
            "licenseIssueDate": "2007-09-14",
            "address": {
              "street": "12 rue de France",
              "complement": null,
              "postalCode": "06000",
              "city": "Nice",
              "country": "FR"
            },
            "companyRegistrationNumber": null,
            "companyEstablishmentNumber": null,
            "vatNumber": null,
            "acquisitionSource": "ONLINE",
            "isBlocked": false,
            "anonymizedAt": null,
            "createdAt": "2026-11-03T14:27:05+01:00",
            "updatedAt": "2026-11-03T14:27:05+01:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant du client.",
            "type": "string",
            "format": "uuid"
          },
          "isCompany": {
            "description": "true : société ; false : particulier. Les champs de l’autre type valent null.",
            "type": "boolean"
          },
          "partnerCode": {
            "description": "Code partenaire de la clé qui a créé le client ; null pour un client de l’agence. Une clé partenaire ne voit que les clients de son code.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 50
              },
              {
                "type": "null"
              }
            ]
          },
          "firstName": {
            "description": "Prénom (particulier) ; null pour une société ou une fiche anonymisée.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "lastName": {
            "description": "Nom de famille (particulier), publié en majuscules ; null pour une société ou une fiche anonymisée.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "companyName": {
            "description": "Raison sociale (société) ; null pour un particulier.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "email": {
            "description": "Email, en minuscules ; celui d’un particulier est unique pour un même `partnerCode`. null si absent.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "phone": {
            "description": "Téléphone, au format international quand le pays est connu ; null si absent.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "birthDate": {
            "description": "Date de naissance (particulier), `YYYY-MM-DD`.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10"
                ],
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ]
          },
          "birthCity": {
            "description": "Lieu de naissance (particulier).",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "nationality": {
            "description": "Nationalité, en texte libre (particulier).",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "licenseNumber": {
            "description": "Numéro du permis de conduire (particulier).",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "licenseIssueDate": {
            "description": "Date de délivrance du permis de conduire (particulier), `YYYY-MM-DD`.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10"
                ],
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ]
          },
          "address": {
            "description": "Adresse postale ; null si aucune.",
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "street": {
                    "description": "Numéro et voie.",
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "complement": {
                    "description": "Complément d’adresse (bâtiment, étage…).",
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "postalCode": {
                    "description": "Code postal.",
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "city": {
                    "description": "Ville.",
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "country": {
                    "description": "Pays, code ISO 3166-1 alpha-2 ; null pour une ancienne valeur illisible.",
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[A-Z]{2}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "street",
                  "complement",
                  "postalCode",
                  "city",
                  "country"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "companyRegistrationNumber": {
            "description": "Numéro d’immatriculation de la société. En France et dans les DROM : SIREN, 9 chiffres, requis pour une société ; ailleurs, format du pays. Pays : celui de l’adresse, sinon celui de l’agence.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "companyEstablishmentNumber": {
            "description": "Numéro de l’établissement (en France : SIRET, 14 chiffres).",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "vatNumber": {
            "description": "Numéro de TVA intracommunautaire de la société.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "acquisitionSource": {
            "description": "Canal par lequel le client est arrivé. null si inconnu.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "ONLINE",
                  "PHONE",
                  "WALKIN",
                  "PARTNER",
                  "OTHER"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "isBlocked": {
            "description": "true : client bloqué par l’agence, une nouvelle location à son nom est refusée.",
            "type": "boolean"
          },
          "anonymizedAt": {
            "description": "Date de l’anonymisation : données personnelles effacées, fiche en lecture seule. null sinon.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Création, heure de l’agence avec décalage.",
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "isCompany",
          "partnerCode",
          "firstName",
          "lastName",
          "companyName",
          "email",
          "phone",
          "birthDate",
          "birthCity",
          "nationality",
          "licenseNumber",
          "licenseIssueDate",
          "address",
          "companyRegistrationNumber",
          "companyEstablishmentNumber",
          "vatNumber",
          "acquisitionSource",
          "isBlocked",
          "anonymizedAt",
          "createdAt",
          "updatedAt"
        ]
      },
      "CustomerAnonymizedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/customer-anonymized"
          },
          "title": {
            "type": "string",
            "const": "Client anonymisé"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "CUSTOMER_ANONYMIZED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "Deductible": {
        "examples": [
          {
            "id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
            "currency": "EUR",
            "name": "Franchise réduite",
            "description": "Reste à charge réduit en cas de sinistre.",
            "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
            "excessAmount": 500,
            "price": {
              "mode": "FIXED_PER_DAY",
              "amountHT": 7.5
            },
            "linkedDepositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
            "isDefault": false,
            "isActive": true,
            "updatedAt": "2026-10-02T17:20:08+02:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant de la franchise.",
            "type": "string",
            "format": "uuid"
          },
          "currency": {
            "description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "name": {
            "description": "Nom affiché au client.",
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "description": {
            "description": "Description libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "categoryId": {
            "description": "Catégorie tarifaire à laquelle l’élément est réservé ; null : toutes les catégories.",
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "excessAmount": {
            "description": "Montant laissé à la charge du client en cas de sinistre. Hors total de la location et sans TVA : il n’est pas facturé.",
            "type": "number"
          },
          "price": {
            "description": "Prix HT de cette franchise (son rachat) pour le client.",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "description": "Prix fixe par jour facturé.",
                    "type": "string",
                    "const": "FIXED_PER_DAY"
                  },
                  "amountHT": {
                    "description": "Prix HT par jour facturé ; 0 : offert.",
                    "type": "number"
                  }
                },
                "required": [
                  "mode",
                  "amountHT"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "description": "Pourcentage du prix de location du véhicule.",
                    "type": "string",
                    "const": "PERCENT_OF_RENTAL"
                  },
                  "percent": {
                    "description": "Pourcentage du prix HT de location du véhicule, hors options. Au plus 2 décimales.",
                    "type": "number",
                    "minimum": 0.01,
                    "maximum": 100
                  }
                },
                "required": [
                  "mode",
                  "percent"
                ]
              }
            ],
            "type": "object"
          },
          "linkedDepositId": {
            "description": "Caution retenue avec cette franchise quand une offre omet `depositId` ; null : aucune. À l’écriture : caution active, globale ou de la catégorie de la franchise (sinon 422 `REFERENCE_INACTIVE`).",
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "isDefault": {
            "description": "Franchise retenue quand une offre omet `deductibleId` : défaut de la catégorie du véhicule, sinon défaut global. Un seul défaut par catégorie et un seul global ; en désigner un autre retire ce statut à l’ancien. Un défaut est toujours actif.",
            "type": "boolean"
          },
          "isActive": {
            "description": "false : retiré de la vente ; les locations qui le portent le gardent.",
            "type": "boolean"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "currency",
          "name",
          "description",
          "categoryId",
          "excessAmount",
          "price",
          "linkedDepositId",
          "isDefault",
          "isActive",
          "updatedAt"
        ]
      },
      "ReferenceInactiveProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/reference-inactive"
          },
          "title": {
            "type": "string",
            "const": "Référence inactive"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "REFERENCE_INACTIVE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "errors"
        ]
      },
      "ReferenceNotFoundProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/reference-not-found"
          },
          "title": {
            "type": "string",
            "const": "Référence introuvable"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "REFERENCE_NOT_FOUND"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "errors"
        ]
      },
      "DefaultItemRequiredProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/default-item-required"
          },
          "title": {
            "type": "string",
            "const": "Élément par défaut requis"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "DEFAULT_ITEM_REQUIRED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "Deposit": {
        "examples": [
          {
            "id": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
            "currency": "EUR",
            "name": "Caution citadine",
            "description": "Empreinte bancaire, libérée au retour du véhicule",
            "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
            "depositAmount": 800,
            "method": "CREDIT_CARD",
            "isDefault": true,
            "isActive": true,
            "displayOrder": 0,
            "updatedAt": "2026-10-02T17:18:45+02:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant de la caution.",
            "type": "string",
            "format": "uuid"
          },
          "currency": {
            "description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "name": {
            "description": "Nom affiché au client.",
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "description": {
            "description": "Description libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "categoryId": {
            "description": "Catégorie tarifaire à laquelle l’élément est réservé ; null : toutes les catégories.",
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "depositAmount": {
            "description": "Montant demandé en garantie au client, rendu après la location sauf retenue décidée par le loueur. Hors total de la location et sans TVA.",
            "type": "number"
          },
          "method": {
            "description": "Moyen par lequel la caution est garantie.",
            "type": "string",
            "enum": [
              "CREDIT_CARD",
              "CASH",
              "TRANSFER",
              "CHECK",
              "SWIKLY",
              "STRIPE",
              "TYLLT",
              "MOBILE_MONEY",
              "OTHER"
            ]
          },
          "isDefault": {
            "description": "Caution retenue quand une offre omet `depositId` et que la franchise retenue n’a pas de caution liée active : défaut de la catégorie du véhicule, sinon défaut global. Un seul défaut par catégorie et un seul global ; un défaut est toujours actif.",
            "type": "boolean"
          },
          "isActive": {
            "description": "false : retiré de la vente ; les locations qui le portent le gardent.",
            "type": "boolean"
          },
          "displayOrder": {
            "description": "Rang d’affichage ; ordre de la liste.",
            "type": "integer",
            "minimum": 0
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "currency",
          "name",
          "description",
          "categoryId",
          "depositAmount",
          "method",
          "isDefault",
          "isActive",
          "displayOrder",
          "updatedAt"
        ]
      },
      "DurationDiscount": {
        "examples": [
          {
            "id": "5c7e9a1b-3d4f-4e6a-8b0c-2d4f6a8c0e1b",
            "minRentalDays": 5,
            "maxRentalDays": 6,
            "discountPercent": 5,
            "isActive": true,
            "updatedAt": "2026-09-25T14:11:37+02:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant de la remise.",
            "type": "string",
            "format": "uuid"
          },
          "minRentalDays": {
            "description": "Durée facturée minimale, en jours, incluse.",
            "type": "integer",
            "minimum": 1,
            "maximum": 365
          },
          "maxRentalDays": {
            "description": "Durée facturée maximale, en jours, incluse ; null : sans borne haute.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 365
              },
              {
                "type": "null"
              }
            ]
          },
          "discountPercent": {
            "description": "Remise en % sur le prix HT de location du véhicule, après saison et délai de réservation.",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "isActive": {
            "description": "false : remise conservée mais non appliquée.",
            "type": "boolean"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "minRentalDays",
          "maxRentalDays",
          "discountPercent",
          "isActive",
          "updatedAt"
        ]
      },
      "RangeOverlapProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/range-overlap"
          },
          "title": {
            "type": "string",
            "const": "Plages qui se chevauchent"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "RANGE_OVERLAP"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "conflictingId": {
            "type": "string",
            "format": "uuid"
          },
          "minRentalDays": {
            "type": "integer"
          },
          "maxRentalDays": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "minLeadDays": {
            "type": "integer"
          },
          "maxLeadDays": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "conflictingId"
        ]
      },
      "Event": {
        "description": "Changement d’une location ; relisez-la pour obtenir son état.",
        "examples": [
          {
            "id": "4e1a6b2c-9d3e-4f5a-8b7c-6d5e4f3a2b1c",
            "type": "rental.updated",
            "occurredAt": "2026-11-10T10:12:31+01:00",
            "resource": {
              "type": "RENTAL",
              "id": "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f",
              "partnerReference": "AV-884213"
            }
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant de l’événement.",
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "description": "`rental.created` : location créée ; `rental.updated` : location modifiée (statut, dates, véhicule, prix, options, paiements, lieux, notes…) ; `rental.cancelled` : location annulée ; `rental.deleted` : location supprimée.",
            "type": "string",
            "enum": [
              "rental.created",
              "rental.updated",
              "rental.cancelled",
              "rental.deleted"
            ]
          },
          "occurredAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Instant du changement. L’ordre du flux est celui de la page, pas cet instant.",
            "type": "string",
            "format": "date-time"
          },
          "resource": {
            "description": "Location concernée, à relire par `GET /rentals/{rentalId}`.",
            "type": "object",
            "properties": {
              "type": {
                "description": "Type de la ressource concernée.",
                "type": "string",
                "const": "RENTAL"
              },
              "id": {
                "examples": [
                  "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f"
                ],
                "description": "Identifiant de la location (`rentalId`).",
                "type": "string",
                "format": "uuid"
              },
              "partnerReference": {
                "description": "Numéro de commande du partenaire ; null si absent.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "type",
              "id",
              "partnerReference"
            ]
          }
        },
        "required": [
          "id",
          "type",
          "occurredAt",
          "resource"
        ]
      },
      "CursorExpiredProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/cursor-expired"
          },
          "title": {
            "type": "string",
            "const": "Curseur expiré"
          },
          "status": {
            "type": "number",
            "const": 410
          },
          "code": {
            "type": "string",
            "const": "CURSOR_EXPIRED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "LeadTimeTier": {
        "examples": [
          {
            "id": "0a2c4e6b-8d1f-4b3a-9c5e-7f9b1d3a5c6e",
            "label": "Réservation anticipée",
            "minLeadDays": 60,
            "maxLeadDays": null,
            "priceFactors": [
              {
                "seasonSlug": "basse",
                "priceFactor": 0.95
              },
              {
                "seasonSlug": "moyenne",
                "priceFactor": 0.95
              },
              {
                "seasonSlug": "haute",
                "priceFactor": 0.9
              }
            ],
            "isActive": true,
            "updatedAt": "2026-09-25T14:20:03+02:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant du palier.",
            "type": "string",
            "format": "uuid"
          },
          "label": {
            "description": "Libellé du palier.",
            "type": "string",
            "maxLength": 100
          },
          "minLeadDays": {
            "description": "Délai minimal, en jours, entre la date du devis et le jour du départ, inclus.",
            "type": "integer",
            "minimum": 0,
            "maximum": 3650
          },
          "maxLeadDays": {
            "description": "Délai maximal, en jours, inclus ; null : sans borne haute.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 3650
              },
              {
                "type": "null"
              }
            ]
          },
          "priceFactors": {
            "description": "Une entrée par saison de l’organisation, dans l’ordre de `GET /seasons`.",
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "seasonSlug": {
                  "description": "Saison (`GET /seasons`).",
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 50,
                  "pattern": "^[a-z0-9_]+$"
                },
                "priceFactor": {
                  "description": "Coefficient du prix journalier dans cette saison : 0,95 = −5 %, 1,1 = +10 %. Au plus 4 décimales.",
                  "type": "number",
                  "exclusiveMinimum": 0
                }
              },
              "required": [
                "seasonSlug",
                "priceFactor"
              ]
            }
          },
          "isActive": {
            "description": "false : palier conservé mais non appliqué.",
            "type": "boolean"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "label",
          "minLeadDays",
          "maxLeadDays",
          "priceFactors",
          "isActive",
          "updatedAt"
        ]
      },
      "Location": {
        "examples": [
          {
            "id": "e4a6c8b0-2d3f-4a5b-8c7d-9e0f1a2b3c4d",
            "name": "Aéroport Nice Côte d’Azur – Terminal 2",
            "address": "Rue Costes et Bellonte, 06200 Nice",
            "type": "AIRPORT",
            "isActive": true,
            "displayOrder": 1
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant du lieu.",
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "description": "Nom affiché au client.",
            "type": "string"
          },
          "address": {
            "description": "Adresse postale, en une ligne.",
            "type": "string"
          },
          "type": {
            "description": "Nature du lieu.",
            "type": "string",
            "enum": [
              "AGENCY",
              "AIRPORT",
              "STATION",
              "HOTEL",
              "OTHER"
            ]
          },
          "isActive": {
            "description": "false : lieu qui n’est plus proposé.",
            "type": "boolean"
          },
          "displayOrder": {
            "description": "Rang d’affichage ; ordre de la liste.",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "address",
          "type",
          "isActive",
          "displayOrder"
        ]
      },
      "MaintenanceOperation": {
        "examples": [
          {
            "operationCode": "OIL_CHANGE",
            "name": "Vidange moteur",
            "group": "ENGINE",
            "applicability": {
              "families": [
                "CAR",
                "TWO_WHEELER"
              ],
              "energies": [
                "FUEL"
              ]
            },
            "kmInterval": 15000,
            "monthInterval": 12,
            "electricKmInterval": null,
            "electricMonthInterval": null,
            "isEnabled": true,
            "isCustom": false,
            "isRecordable": true,
            "displayOrder": 1
          }
        ],
        "type": "object",
        "properties": {
          "operationCode": {
            "description": "Code stable de l’opération, à citer dans `operationCodes`.",
            "type": "string",
            "minLength": 1
          },
          "name": {
            "description": "Libellé de l’opération.",
            "type": "string",
            "minLength": 1
          },
          "group": {
            "description": "Famille d’opérations ; null si l’opération n’est pas classée.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "ENGINE",
                  "TRANSMISSION",
                  "BRAKING",
                  "STEERING",
                  "SUSPENSION",
                  "LIGHTING",
                  "TIRES",
                  "BODYWORK",
                  "INTERIOR",
                  "AC",
                  "ELECTRONICS",
                  "SAFETY",
                  "INSPECTION",
                  "OTHER",
                  "CHECK"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "applicability": {
            "description": "Véhicules auxquels l’opération s’applique : la saisir sur un autre véhicule répond 400 `not_applicable`.",
            "type": "object",
            "properties": {
              "families": {
                "description": "Familles de véhicules concernées.",
                "minItems": 1,
                "maxItems": 2,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "CAR",
                    "TWO_WHEELER"
                  ]
                }
              },
              "energies": {
                "description": "Énergies concernées.",
                "minItems": 1,
                "maxItems": 2,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "FUEL",
                    "ELECTRIC"
                  ]
                }
              }
            },
            "required": [
              "families",
              "energies"
            ]
          },
          "kmInterval": {
            "description": "Intervalle entre deux interventions, en km ; null : aucun.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "monthInterval": {
            "description": "Intervalle entre deux interventions, en mois ; null : aucun.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "electricKmInterval": {
            "description": "Intervalle en km propre aux véhicules électriques ; null : `kmInterval`.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "electricMonthInterval": {
            "description": "Intervalle en mois propre aux véhicules électriques ; null : `monthInterval`.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "isEnabled": {
            "description": "false : opération non suivie, sans échéance ; elle reste enregistrable.",
            "type": "boolean"
          },
          "isCustom": {
            "description": "true : opération créée par l’agence.",
            "type": "boolean"
          },
          "isRecordable": {
            "description": "true : code accepté dans un entretien ; false pour le contrôle technique, saisi dans Lexio.",
            "type": "boolean"
          },
          "displayOrder": {
            "description": "Rang d’affichage ; ordre de la liste.",
            "type": "integer"
          }
        },
        "required": [
          "operationCode",
          "name",
          "group",
          "applicability",
          "kmInterval",
          "monthInterval",
          "electricKmInterval",
          "electricMonthInterval",
          "isEnabled",
          "isCustom",
          "isRecordable",
          "displayOrder"
        ]
      },
      "MaintenanceRecord": {
        "examples": [
          {
            "id": "b1d3f5a7-9c2e-4b4d-8f6a-0c2e4a6b8d1f",
            "vehicleId": "8d2f4c1e-6a3b-4f7d-9e2c-1b5a7c9d3e4f",
            "currency": "EUR",
            "operationCodes": [
              "OIL_CHANGE",
              "OIL_FILTER"
            ],
            "interventionDate": "2026-11-05",
            "odometerKm": 18450,
            "costHT": 129.9,
            "supplier": "Garage du Port, Nice",
            "notes": null,
            "invoice": {
              "url": "https://storage.lexio.rent/d/b1d3f5a7?sig=9f2c",
              "expiresAt": "2026-11-06T10:15:00+01:00"
            },
            "createdAt": "2026-11-05T17:42:19+01:00",
            "updatedAt": "2026-11-05T17:42:19+01:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant de l’entretien.",
            "type": "string",
            "format": "uuid"
          },
          "vehicleId": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Véhicule entretenu (`GET /vehicles/{vehicleId}`).",
            "type": "string",
            "format": "uuid"
          },
          "currency": {
            "description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "operationCodes": {
            "description": "Opérations réalisées (`GET /maintenance-operations`), l’opération principale en premier.",
            "minItems": 1,
            "maxItems": 30,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "interventionDate": {
            "examples": [
              "2026-11-10"
            ],
            "description": "Jour de l’intervention, `YYYY-MM-DD`, fuseau de l’agence ; jamais dans le futur.",
            "type": "string",
            "format": "date"
          },
          "odometerKm": {
            "description": "Kilométrage au compteur lors de l’intervention.",
            "type": "integer",
            "minimum": 0,
            "maximum": 10000000
          },
          "costHT": {
            "description": "Coût HT de l’intervention ; 0 si non renseigné.",
            "type": "number",
            "minimum": 0
          },
          "supplier": {
            "description": "Garage ou prestataire ; null si absent.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "notes": {
            "description": "Notes libres ; null si absentes.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ]
          },
          "invoice": {
            "description": "Facture déposée dans Lexio, URL signée valable une heure, à ne pas stocker ; null sans facture.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SignedDocument"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Création, heure de l’agence avec décalage.",
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "vehicleId",
          "currency",
          "operationCodes",
          "interventionDate",
          "odometerKm",
          "costHT",
          "supplier",
          "notes",
          "invoice",
          "createdAt",
          "updatedAt"
        ]
      },
      "SignedDocument": {
        "description": "Fichier téléchargeable par une adresse signée et temporaire.",
        "examples": [
          {
            "url": "https://storage.example.com/contrats/LOC-2026.11-0042.pdf?signature=9b2e41c7",
            "expiresAt": "2026-11-10T11:12:00+01:00"
          }
        ],
        "type": "object",
        "properties": {
          "url": {
            "description": "Adresse signée et temporaire du fichier : ne la conservez pas, relisez la ressource pour en obtenir une nouvelle.",
            "type": "string",
            "format": "uri"
          },
          "expiresAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Instant où l’adresse cesse d’être valable.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "url",
          "expiresAt"
        ]
      },
      "ServiceUnavailableProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/service-unavailable"
          },
          "title": {
            "type": "string",
            "const": "Service momentanément indisponible"
          },
          "status": {
            "type": "number",
            "const": 503
          },
          "code": {
            "type": "string",
            "const": "SERVICE_UNAVAILABLE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "dependency": {
            "type": "string",
            "enum": [
              "PAYMENT_PROVIDER",
              "FILE_STORAGE",
              "ACCOUNTING",
              "EMAIL"
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "dependency"
        ]
      },
      "IdempotencyAlreadyAppliedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/idempotency-already-applied"
          },
          "title": {
            "type": "string",
            "const": "Écriture déjà appliquée"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "IDEMPOTENCY_ALREADY_APPLIED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "resourceId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "resourceId"
        ]
      },
      "MileagePackage": {
        "examples": [
          {
            "id": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
            "currency": "EUR",
            "name": "200 km/jour",
            "description": "Kilométrage illimité à partir de 30 jours",
            "price": {
              "mode": "FIXED_PER_DAY",
              "amountHT": 0
            },
            "tiers": [
              {
                "fromDay": 1,
                "dailyKm": 200
              },
              {
                "fromDay": 30,
                "dailyKm": null
              }
            ],
            "isDefault": true,
            "isActive": true,
            "displayOrder": 0,
            "updatedAt": "2026-10-21T11:36:52+02:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant du forfait kilométrique.",
            "type": "string",
            "format": "uuid"
          },
          "currency": {
            "description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "name": {
            "description": "Nom affiché au client.",
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "description": {
            "description": "Description libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "price": {
            "description": "Prix HT du forfait pour le client.",
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "description": "Prix fixe par jour facturé.",
                    "type": "string",
                    "const": "FIXED_PER_DAY"
                  },
                  "amountHT": {
                    "description": "Prix HT par jour facturé ; 0 : offert.",
                    "type": "number"
                  }
                },
                "required": [
                  "mode",
                  "amountHT"
                ]
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "description": "Pourcentage du prix de location du véhicule.",
                    "type": "string",
                    "const": "PERCENT_OF_RENTAL"
                  },
                  "percent": {
                    "description": "Pourcentage du prix HT de location du véhicule, hors options. Au plus 2 décimales.",
                    "type": "number",
                    "minimum": 0.01,
                    "maximum": 100
                  }
                },
                "required": [
                  "mode",
                  "percent"
                ]
              }
            ],
            "type": "object"
          },
          "tiers": {
            "description": "Kilomètres inclus par jour selon la durée : s’applique le palier de plus grand `fromDay` atteint par les jours facturés. Le palier du jour 1 est obligatoire, un palier par jour.",
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "fromDay": {
                  "description": "Le palier vaut pour une location d’au moins ce nombre de jours facturés.",
                  "type": "integer",
                  "minimum": 1
                },
                "dailyKm": {
                  "description": "Kilomètres inclus par jour facturé ; null : kilométrage illimité.",
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "fromDay",
                "dailyKm"
              ]
            }
          },
          "isDefault": {
            "description": "Forfait retenu quand une offre omet `mileagePackageId`. Au plus un par organisation : en désigner un autre retire ce statut à l’ancien ; un forfait par défaut est toujours actif.",
            "type": "boolean"
          },
          "isActive": {
            "description": "false : forfait retiré de la vente.",
            "type": "boolean"
          },
          "displayOrder": {
            "description": "Rang d’affichage ; ordre de la liste.",
            "type": "integer",
            "minimum": 0
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "currency",
          "name",
          "description",
          "price",
          "tiers",
          "isDefault",
          "isActive",
          "displayOrder",
          "updatedAt"
        ]
      },
      "Option": {
        "examples": [
          {
            "id": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
            "currency": "EUR",
            "name": "Siège enfant",
            "description": "Siège auto groupe 0+/1, de la naissance à 4 ans",
            "kind": "STANDARD",
            "group": "ACCESSORIES",
            "price": {
              "unit": "DAY",
              "amountHT": 4,
              "maxAmountHT": 40
            },
            "maxQuantity": 2,
            "stockCount": 4,
            "availableMonths": [],
            "youngDriverAgeThreshold": null,
            "imageUrls": [],
            "isActive": true,
            "displayOrder": 2,
            "updatedAt": "2026-10-14T09:48:31+02:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant de l’option.",
            "type": "string",
            "format": "uuid"
          },
          "currency": {
            "description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "name": {
            "description": "Nom affiché au client.",
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "description": {
            "description": "Description libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "description": "`STANDARD` : option vendue à la quantité. `ADDITIONAL_DRIVER` : conducteur additionnel, réservable par une clé interne seulement. `YOUNG_DRIVER` : supplément jeune conducteur, appliqué par Lexio d’après l’âge des conducteurs, jamais demandé directement. Une seule option de chacun de ces deux derniers types par organisation.",
            "type": "string",
            "enum": [
              "STANDARD",
              "ADDITIONAL_DRIVER",
              "YOUNG_DRIVER"
            ]
          },
          "group": {
            "description": "Rubrique d’affichage de l’option.",
            "type": "string",
            "enum": [
              "COMFORT",
              "PROTECTION",
              "ACCESSORIES",
              "DELIVERY",
              "SERVICES",
              "OTHER"
            ]
          },
          "price": {
            "description": "Prix HT de l’option et son plafond.",
            "type": "object",
            "properties": {
              "unit": {
                "description": "`DAY` : par jour facturé ; `HOUR` : par heure de location ; `WEEK` : par semaine entamée ; `RENTAL` : une fois par location.",
                "type": "string",
                "enum": [
                  "DAY",
                  "HOUR",
                  "WEEK",
                  "RENTAL"
                ]
              },
              "amountHT": {
                "description": "Prix HT d’une unité de `unit`, pour un exemplaire.",
                "type": "number"
              },
              "maxAmountHT": {
                "description": "Plafond HT par exemplaire sur toute la location ; null : sans plafond. Interdit avec `RENTAL` (400 `not_applicable`), au moins égal à `amountHT` (400 `too_small`) ; pas de plafond s’envoie null, jamais 0.",
                "anyOf": [
                  {
                    "description": "Montant en unités majeures, sur la grille de la devise de la ressource.",
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "unit",
              "amountHT",
              "maxAmountHT"
            ]
          },
          "maxQuantity": {
            "description": "Exemplaires au plus par location, pour une option `STANDARD`. Une option conducteur vaut toujours 1 ici et ne le fixe pas (400 `not_applicable`) : le conducteur additionnel se réserve jusqu’à 4 fois, borne lue dans `choices.options[].maxBookableQuantity` du devis.",
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "stockCount": {
            "description": "Exemplaires louables en même temps, toutes locations confondues ; ignoré pour une option conducteur. Le reste disponible sur une période se lit dans `maxBookableQuantity` du devis.",
            "type": "integer",
            "minimum": 1,
            "maximum": 1000
          },
          "availableMonths": {
            "description": "Mois où l’option se vend (1 = janvier), chacun une fois : elle est proposée si la location touche l’un d’eux ; [] : toute l’année.",
            "maxItems": 12,
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 12
            }
          },
          "youngDriverAgeThreshold": {
            "description": "Âge au départ en dessous duquel le supplément s’applique à un conducteur. Requis pour une option `YOUNG_DRIVER` (sinon 400 `required`) ; null pour les autres types, qui le refusent (400 `not_applicable`).",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 16,
                "maximum": 99
              },
              {
                "type": "null"
              }
            ]
          },
          "imageUrls": {
            "description": "Image de l’option, URL signée valable une heure, à ne pas stocker ; [] sans image.",
            "maxItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "isActive": {
            "description": "false : option retirée de la vente.",
            "type": "boolean"
          },
          "displayOrder": {
            "description": "Rang d’affichage ; ordre de la liste.",
            "type": "integer",
            "minimum": 0
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "currency",
          "name",
          "description",
          "kind",
          "group",
          "price",
          "maxQuantity",
          "stockCount",
          "availableMonths",
          "youngDriverAgeThreshold",
          "imageUrls",
          "isActive",
          "displayOrder",
          "updatedAt"
        ]
      },
      "Organization": {
        "examples": [
          {
            "id": "5f0c9a7e-2b1d-4c3e-8f6a-9d2e1b7c4a03",
            "name": "Riviera Location Nice",
            "currency": "EUR",
            "currencyExponent": 2,
            "timezone": "Europe/Paris",
            "vatPercent": 20,
            "isVatExempt": false,
            "isVatReverseChargeAvailable": false,
            "toleranceHours": 2,
            "rentalBufferMinutes": 120,
            "businessHours": {
              "isOpen24h": false,
              "days": [
                {
                  "day": "MONDAY",
                  "isOpen": true,
                  "openingTime": "08:00",
                  "closingTime": "19:00"
                },
                {
                  "day": "TUESDAY",
                  "isOpen": true,
                  "openingTime": "08:00",
                  "closingTime": "19:00"
                },
                {
                  "day": "WEDNESDAY",
                  "isOpen": true,
                  "openingTime": "08:00",
                  "closingTime": "19:00"
                },
                {
                  "day": "THURSDAY",
                  "isOpen": true,
                  "openingTime": "08:00",
                  "closingTime": "19:00"
                },
                {
                  "day": "FRIDAY",
                  "isOpen": true,
                  "openingTime": "08:00",
                  "closingTime": "19:00"
                },
                {
                  "day": "SATURDAY",
                  "isOpen": true,
                  "openingTime": "08:00",
                  "closingTime": "19:00"
                },
                {
                  "day": "SUNDAY",
                  "isOpen": false,
                  "openingTime": null,
                  "closingTime": null
                }
              ]
            },
            "bookingRules": {
              "minLeadHours": 2,
              "maxHorizonDays": 365,
              "minRentalDays": 1
            },
            "apiKey": {
              "id": "c3e8a1f4-6b2d-4e9a-8c7f-1a2b3c4d5e6f",
              "name": "Site de réservation",
              "partnerCode": null,
              "scopes": [
                "offers.read",
                "quotes.write",
                "rentals.read",
                "rentals.write"
              ],
              "expiresAt": null
            }
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Identifiant de l’organisation (l’agence).",
            "type": "string",
            "minLength": 1
          },
          "name": {
            "description": "Nom commercial de l’agence.",
            "type": "string"
          },
          "currency": {
            "description": "Devise de l’agence (ISO 4217), celle de tous les montants de son catalogue.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "currencyExponent": {
            "description": "Nombre de décimales de la devise : 2 pour EUR, 0 pour XPF. Tout montant envoyé au-delà est refusé (400 `too_many_decimals`).",
            "type": "integer",
            "minimum": 0,
            "maximum": 3
          },
          "timezone": {
            "description": "Fuseau IANA de l’agence : les heures de location sont des heures locales de ce fuseau.",
            "examples": [
              "Europe/Paris"
            ],
            "type": "string",
            "minLength": 1
          },
          "vatPercent": {
            "description": "Taux de TVA appliqué aux prix HT, en % ; 0 si l’agence est exonérée.",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "isVatExempt": {
            "description": "true : agence exonérée de TVA, `vatPercent` vaut alors 0.",
            "type": "boolean"
          },
          "isVatReverseChargeAvailable": {
            "description": "true : une location peut être facturée en autoliquidation de TVA (`isVatReverseCharge`) ; sinon une telle demande répond 422 `VAT_REVERSE_CHARGE_NOT_ALLOWED`.",
            "type": "boolean"
          },
          "toleranceHours": {
            "description": "Retard toléré, en heures, avant de facturer un jour de plus : une durée de 3 jours et 2 h est facturée 3 jours si `toleranceHours` ≥ 2, sinon 4.",
            "type": "integer",
            "minimum": 0
          },
          "rentalBufferMinutes": {
            "description": "Battement, en minutes, laissé libre avant et après chaque location d’un véhicule : un véhicule n’est pas disponible pendant ce battement.",
            "type": "integer",
            "minimum": 0
          },
          "businessHours": {
            "description": "Horaires d’ouverture. Clé partenaire : départ et retour doivent tomber dans ces horaires (422 `BOOKING_RULE_VIOLATION`) ; une clé interne n’y est pas soumise.",
            "type": "object",
            "properties": {
              "isOpen24h": {
                "description": "true : ouvert tous les jours de 00:00 à 23:59, `days` le reflète.",
                "type": "boolean"
              },
              "days": {
                "description": "Les 7 jours de la semaine, du lundi au dimanche.",
                "minItems": 7,
                "maxItems": 7,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "day": {
                      "description": "Jour de la semaine.",
                      "type": "string",
                      "enum": [
                        "MONDAY",
                        "TUESDAY",
                        "WEDNESDAY",
                        "THURSDAY",
                        "FRIDAY",
                        "SATURDAY",
                        "SUNDAY"
                      ]
                    },
                    "isOpen": {
                      "description": "false : agence fermée ce jour-là.",
                      "type": "boolean"
                    },
                    "openingTime": {
                      "description": "Heure d’ouverture `HH:mm`, heure locale de l’agence ; null un jour fermé.",
                      "anyOf": [
                        {
                          "examples": [
                            "09:00"
                          ],
                          "type": "string",
                          "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "closingTime": {
                      "description": "Heure de fermeture `HH:mm`, incluse ; null un jour fermé.",
                      "anyOf": [
                        {
                          "examples": [
                            "09:00"
                          ],
                          "type": "string",
                          "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "day",
                    "isOpen",
                    "openingTime",
                    "closingTime"
                  ]
                }
              }
            },
            "required": [
              "isOpen24h",
              "days"
            ]
          },
          "bookingRules": {
            "description": "Règles de réservation, appliquées aux seules clés partenaires (422 `BOOKING_RULE_VIOLATION`).",
            "type": "object",
            "properties": {
              "minLeadHours": {
                "description": "Délai minimal, en heures, entre maintenant et le départ.",
                "type": "integer",
                "minimum": 0
              },
              "maxHorizonDays": {
                "description": "Le départ tombe au plus tard ce nombre de jours après aujourd’hui.",
                "type": "integer",
                "minimum": 0
              },
              "minRentalDays": {
                "description": "Nombre minimal de jours calendaires entre le jour du départ et celui du retour.",
                "type": "integer",
                "minimum": 0
              }
            },
            "required": [
              "minLeadHours",
              "maxHorizonDays",
              "minRentalDays"
            ]
          },
          "apiKey": {
            "description": "La clé API qui fait l’appel.",
            "type": "object",
            "properties": {
              "id": {
                "description": "Identifiant de la clé qui appelle.",
                "type": "string",
                "format": "uuid"
              },
              "name": {
                "description": "Nom donné à la clé dans Lexio.",
                "type": "string"
              },
              "partnerCode": {
                "description": "Code partenaire de la clé : elle ne voit que les clients, devis, locations et événements de ce code. null pour une clé interne, qui voit toute l’agence.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "scopes": {
                "description": "Scopes accordés à la clé.",
                "maxItems": 20,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "offers.read",
                    "quotes.write",
                    "rentals.read",
                    "rentals.write",
                    "rentals.operate",
                    "rentals.delete",
                    "payments.write",
                    "payments.refund",
                    "customers.read",
                    "customers.write",
                    "customers.delete",
                    "vehicles.read",
                    "vehicles.write",
                    "vehicles.delete",
                    "catalog.read",
                    "catalog.write",
                    "pricing.read",
                    "pricing.write",
                    "maintenance.read",
                    "maintenance.write"
                  ]
                }
              },
              "expiresAt": {
                "description": "Fin de validité de la clé ; null si elle n’expire pas.",
                "anyOf": [
                  {
                    "examples": [
                      "2026-11-10T10:00:00+01:00"
                    ],
                    "type": "string",
                    "format": "date-time"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "name",
              "partnerCode",
              "scopes",
              "expiresAt"
            ]
          }
        },
        "required": [
          "id",
          "name",
          "currency",
          "currencyExponent",
          "timezone",
          "vatPercent",
          "isVatExempt",
          "isVatReverseChargeAvailable",
          "toleranceHours",
          "rentalBufferMinutes",
          "businessHours",
          "bookingRules",
          "apiKey"
        ]
      },
      "PricingSettings": {
        "examples": [
          {
            "seasonalPricing": {
              "isEnabled": true,
              "isAvailable": true
            },
            "leadTimePricing": {
              "isEnabled": true,
              "isAvailable": true
            },
            "durationDiscounts": {
              "isEnabled": true,
              "isAvailable": true
            },
            "weekendSurcharge": {
              "isEnabled": false,
              "isAvailable": true,
              "surchargePercent": 10,
              "exemptFromRentalDays": 3
            },
            "shortDurationSurcharge": {
              "isEnabled": true,
              "isAvailable": true,
              "tiers": [
                {
                  "maxRentalDays": 1,
                  "surchargePercent": 15,
                  "isActive": true
                },
                {
                  "maxRentalDays": 2,
                  "surchargePercent": 5,
                  "isActive": true
                }
              ]
            }
          }
        ],
        "type": "object",
        "properties": {
          "seasonalPricing": {
            "description": "Prix par saison (`GET /seasons`, `GET /season-calendar`).",
            "type": "object",
            "properties": {
              "isEnabled": {
                "description": "Règle activée par l’agence dans Lexio.",
                "type": "boolean"
              },
              "isAvailable": {
                "description": "Fonctionnalité incluse dans le plan de l’agence (lecture seule).",
                "type": "boolean"
              }
            },
            "required": [
              "isEnabled",
              "isAvailable"
            ]
          },
          "leadTimePricing": {
            "description": "Coefficients selon le délai de réservation (`GET /lead-time-tiers`).",
            "type": "object",
            "properties": {
              "isEnabled": {
                "description": "Règle activée par l’agence dans Lexio.",
                "type": "boolean"
              },
              "isAvailable": {
                "description": "Fonctionnalité incluse dans le plan de l’agence (lecture seule).",
                "type": "boolean"
              }
            },
            "required": [
              "isEnabled",
              "isAvailable"
            ]
          },
          "durationDiscounts": {
            "description": "Remises selon la durée (`GET /duration-discounts`).",
            "type": "object",
            "properties": {
              "isEnabled": {
                "description": "Règle activée par l’agence dans Lexio.",
                "type": "boolean"
              },
              "isAvailable": {
                "description": "Fonctionnalité incluse dans le plan de l’agence (lecture seule).",
                "type": "boolean"
              }
            },
            "required": [
              "isEnabled",
              "isAvailable"
            ]
          },
          "weekendSurcharge": {
            "description": "Majoration d’une location qui touche un samedi ou un dimanche.",
            "type": "object",
            "properties": {
              "isEnabled": {
                "description": "Règle activée par l’agence dans Lexio.",
                "type": "boolean"
              },
              "isAvailable": {
                "description": "Fonctionnalité incluse dans le plan de l’agence (lecture seule).",
                "type": "boolean"
              },
              "surchargePercent": {
                "description": "Majoration en %.",
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "exemptFromRentalDays": {
                "description": "Aucune majoration quand la durée facturée atteint cette valeur.",
                "type": "integer",
                "minimum": 0,
                "maximum": 30
              }
            },
            "required": [
              "isEnabled",
              "isAvailable",
              "surchargePercent",
              "exemptFromRentalDays"
            ]
          },
          "shortDurationSurcharge": {
            "description": "Majoration des locations courtes, par paliers de durée.",
            "type": "object",
            "properties": {
              "isEnabled": {
                "description": "Règle activée par l’agence dans Lexio.",
                "type": "boolean"
              },
              "isAvailable": {
                "description": "Fonctionnalité incluse dans le plan de l’agence (lecture seule).",
                "type": "boolean"
              },
              "tiers": {
                "description": "S’applique le palier actif de plus petit `maxRentalDays` supérieur ou égal à la durée facturée.",
                "maxItems": 20,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "maxRentalDays": {
                      "description": "Durée facturée jusqu’à laquelle le palier vaut, incluse.",
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 365
                    },
                    "surchargePercent": {
                      "description": "Majoration en %.",
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "isActive": {
                      "description": "false : palier non appliqué.",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "maxRentalDays",
                    "surchargePercent",
                    "isActive"
                  ]
                }
              }
            },
            "required": [
              "isEnabled",
              "isAvailable",
              "tiers"
            ]
          }
        },
        "required": [
          "seasonalPricing",
          "leadTimePricing",
          "durationDiscounts",
          "weekendSurcharge",
          "shortDurationSurcharge"
        ]
      },
      "Quote": {
        "description": "Devis : prix garanti, frais et code promo compris, jusqu’à `expiresAt`. Il ne réserve pas le véhicule.",
        "examples": [
          {
            "id": "0b8e2a6c-4d1f-4e3a-9b7c-1c2d3e4f5a6b",
            "createdAt": "2026-11-02T09:12:44+01:00",
            "expiresAt": "2026-11-03T09:12:44+01:00",
            "consumedAt": null,
            "rentalId": null,
            "currency": "EUR",
            "vehicle": {
              "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
              "name": "208 Allure",
              "brand": "Peugeot",
              "model": "208",
              "vehicleType": "CITY",
              "plate": "AB-123-CD",
              "serialNumber": null
            },
            "period": {
              "startAt": "2026-11-10T10:00:00+01:00",
              "endAt": "2026-11-15T10:00:00+01:00",
              "timezone": "Europe/Paris",
              "billedDays": 5,
              "durationMinutes": 7200
            },
            "mileage": {
              "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
              "name": "200 km/jour",
              "isUnlimited": false,
              "includedKm": 1000,
              "overageRatePerKmHT": 0.25
            },
            "deductible": {
              "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
              "name": "Franchise réduite",
              "description": "Reste à charge réduit en cas de sinistre.",
              "excessAmount": 500
            },
            "deposit": {
              "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
              "name": "Caution citadine",
              "depositAmount": 800
            },
            "promoCode": null,
            "isVatReverseCharge": false,
            "vatPercent": 20,
            "totalHT": 257,
            "vatAmount": 51.4,
            "totalTTC": 308.4,
            "lines": [
              {
                "key": "BASE",
                "label": "Tarif de base",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 210,
                "unitPriceTTC": 252,
                "amountHT": 210,
                "amountTTC": 252,
                "ratePercent": null
              },
              {
                "key": "DURATION_DISCOUNT",
                "label": "Réduction durée 5 jours",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": -10.5,
                "unitPriceTTC": -12.6,
                "amountHT": -10.5,
                "amountTTC": -12.6,
                "ratePercent": 5
              },
              {
                "key": "MILEAGE",
                "label": "Forfait 200 km/jour",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 0,
                "unitPriceTTC": 0,
                "amountHT": 0,
                "amountTTC": 0,
                "ratePercent": null
              },
              {
                "key": "DEDUCTIBLE",
                "label": "Franchise réduite",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 37.5,
                "unitPriceTTC": 45,
                "amountHT": 37.5,
                "amountTTC": 45,
                "ratePercent": null
              },
              {
                "key": "OPTION",
                "label": "Siège enfant",
                "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                "quantity": 1,
                "unitPriceHT": 20,
                "unitPriceTTC": 24,
                "amountHT": 20,
                "amountTTC": 24,
                "ratePercent": null
              }
            ],
            "pricingBasis": {
              "dailyPrices": [
                {
                  "date": "2026-11-10",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                },
                {
                  "date": "2026-11-11",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                },
                {
                  "date": "2026-11-12",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                },
                {
                  "date": "2026-11-13",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                },
                {
                  "date": "2026-11-14",
                  "seasonSlug": "basse",
                  "dailyPriceHT": 42
                }
              ],
              "leadTime": null
            },
            "choices": {
              "mileagePackages": [
                {
                  "mileage": {
                    "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
                    "name": "200 km/jour",
                    "isUnlimited": false,
                    "includedKm": 1000,
                    "overageRatePerKmHT": 0.25
                  },
                  "line": {
                    "key": "MILEAGE",
                    "label": "Forfait 200 km/jour",
                    "refId": null,
                    "quantity": 1,
                    "unitPriceHT": 0,
                    "unitPriceTTC": 0,
                    "amountHT": 0,
                    "amountTTC": 0,
                    "ratePercent": null
                  }
                },
                {
                  "mileage": {
                    "mileagePackageId": "9d0e1f2a-3b4c-4d5e-8f60-819203142536",
                    "name": "Kilométrage illimité",
                    "isUnlimited": true,
                    "includedKm": null,
                    "overageRatePerKmHT": null
                  },
                  "line": {
                    "key": "MILEAGE",
                    "label": "Forfait Kilométrage illimité",
                    "refId": null,
                    "quantity": 1,
                    "unitPriceHT": 75,
                    "unitPriceTTC": 90,
                    "amountHT": 75,
                    "amountTTC": 90,
                    "ratePercent": null
                  }
                }
              ],
              "deductibles": [
                {
                  "deductible": {
                    "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
                    "name": "Franchise réduite",
                    "description": "Reste à charge réduit en cas de sinistre.",
                    "excessAmount": 500
                  },
                  "deposit": {
                    "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
                    "name": "Caution citadine",
                    "depositAmount": 800
                  },
                  "line": {
                    "key": "DEDUCTIBLE",
                    "label": "Franchise réduite",
                    "refId": null,
                    "quantity": 1,
                    "unitPriceHT": 37.5,
                    "unitPriceTTC": 45,
                    "amountHT": 37.5,
                    "amountTTC": 45,
                    "ratePercent": null
                  }
                }
              ],
              "options": [
                {
                  "optionId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                  "name": "Siège enfant",
                  "maxBookableQuantity": 2,
                  "line": {
                    "key": "OPTION",
                    "label": "Siège enfant",
                    "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                    "quantity": 1,
                    "unitPriceHT": 20,
                    "unitPriceTTC": 24,
                    "amountHT": 20,
                    "amountTTC": 24,
                    "ratePercent": null
                  }
                }
              ]
            }
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant du devis, à passer en `quoteId`.",
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Instant du calcul.",
            "type": "string",
            "format": "date-time"
          },
          "expiresAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Fin de la garantie de prix, 24 h après `createdAt` ; au-delà, `POST /rentals` répond 409 `QUOTE_EXPIRED`.",
            "type": "string",
            "format": "date-time"
          },
          "consumedAt": {
            "description": "Instant où une location a été créée avec ce devis ; null tant qu’il n’a pas servi.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "rentalId": {
            "description": "Location créée avec ce devis ; null tant qu’il n’a pas servi.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "currency": {
            "description": "Devise ISO 4217 : tous les montants de la ressource sont dans cette devise.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "vehicle": {
            "$ref": "#/components/schemas/VehicleRef"
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "mileage": {
            "$ref": "#/components/schemas/Mileage"
          },
          "deductible": {
            "description": "Franchise retenue ; null sans franchise.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/DeductibleSnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "deposit": {
            "description": "Caution retenue ; null sans caution.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/DepositSnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "promoCode": {
            "description": "Code promo appliqué, en majuscules ; null sans code.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 50
              },
              {
                "type": "null"
              }
            ]
          },
          "isVatReverseCharge": {
            "description": "true : autoliquidation de la TVA, `vatPercent` vaut 0 et `totalTTC` = `totalHT`.",
            "type": "boolean"
          },
          "vatPercent": {
            "description": "Taux de TVA appliqué, en pourcentage (20 = 20 %) ; 0 en autoliquidation ou pour une agence exonérée. Au plus 2 décimales.",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "totalHT": {
            "description": "Total hors taxes : somme des `lines[].amountHT`.",
            "type": "number"
          },
          "vatAmount": {
            "description": "Montant de la TVA : `totalTTC − totalHT`.",
            "type": "number"
          },
          "totalTTC": {
            "description": "Total toutes taxes comprises : somme des `lines[].amountTTC`. Caution et franchise n’y sont jamais comptées.",
            "type": "number"
          },
          "lines": {
            "description": "Détail du prix, une ligne par règle appliquée.",
            "maxItems": 100,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceLine"
            }
          },
          "pricingBasis": {
            "$ref": "#/components/schemas/PricingBasis"
          },
          "choices": {
            "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é.",
            "type": "object",
            "properties": {
              "mileagePackages": {
                "maxItems": 50,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "mileage": {
                      "$ref": "#/components/schemas/Mileage"
                    },
                    "line": {
                      "description": "Ligne `MILEAGE` que ce forfait produirait.",
                      "examples": [
                        {
                          "key": "OPTION",
                          "label": "Siège enfant",
                          "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                          "quantity": 1,
                          "unitPriceHT": 20,
                          "unitPriceTTC": 24,
                          "amountHT": 20,
                          "amountTTC": 24,
                          "ratePercent": null
                        }
                      ],
                      "$ref": "#/components/schemas/PriceLine"
                    }
                  },
                  "required": [
                    "mileage",
                    "line"
                  ]
                }
              },
              "deductibles": {
                "maxItems": 50,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "deductible": {
                      "$ref": "#/components/schemas/DeductibleSnapshot"
                    },
                    "deposit": {
                      "description": "Caution qui serait retenue avec cette franchise ; null sans caution.",
                      "anyOf": [
                        {
                          "$ref": "#/components/schemas/DepositSnapshot"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "line": {
                      "description": "Ligne `DEDUCTIBLE` que cette franchise produirait.",
                      "examples": [
                        {
                          "key": "OPTION",
                          "label": "Siège enfant",
                          "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                          "quantity": 1,
                          "unitPriceHT": 20,
                          "unitPriceTTC": 24,
                          "amountHT": 20,
                          "amountTTC": 24,
                          "ratePercent": null
                        }
                      ],
                      "$ref": "#/components/schemas/PriceLine"
                    }
                  },
                  "required": [
                    "deductible",
                    "deposit",
                    "line"
                  ]
                }
              },
              "options": {
                "maxItems": 100,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "optionId": {
                      "examples": [
                        "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                      ],
                      "type": "string",
                      "format": "uuid"
                    },
                    "name": {
                      "type": "string",
                      "maxLength": 200
                    },
                    "maxBookableQuantity": {
                      "description": "Quantité réservable sur la période : stock restant, borné par la quantité maximale de l’option.",
                      "type": "integer",
                      "minimum": 0
                    },
                    "line": {
                      "description": "Ligne `OPTION` pour une unité.",
                      "examples": [
                        {
                          "key": "OPTION",
                          "label": "Siège enfant",
                          "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                          "quantity": 1,
                          "unitPriceHT": 20,
                          "unitPriceTTC": 24,
                          "amountHT": 20,
                          "amountTTC": 24,
                          "ratePercent": null
                        }
                      ],
                      "$ref": "#/components/schemas/PriceLine"
                    }
                  },
                  "required": [
                    "optionId",
                    "name",
                    "maxBookableQuantity",
                    "line"
                  ]
                }
              }
            },
            "required": [
              "mileagePackages",
              "deductibles",
              "options"
            ]
          }
        },
        "required": [
          "id",
          "createdAt",
          "expiresAt",
          "consumedAt",
          "rentalId",
          "currency",
          "vehicle",
          "period",
          "mileage",
          "deductible",
          "deposit",
          "promoCode",
          "isVatReverseCharge",
          "vatPercent",
          "totalHT",
          "vatAmount",
          "totalTTC",
          "lines",
          "pricingBasis",
          "choices"
        ]
      },
      "VehicleRef": {
        "description": "Véhicule, vue réduite de `GET /vehicles/{vehicleId}`.",
        "examples": [
          {
            "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
            "name": "208 Allure",
            "brand": "Peugeot",
            "model": "208",
            "vehicleType": "CITY",
            "plate": "AB-123-CD",
            "serialNumber": null
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant du véhicule.",
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "description": "Nom d’usage donné par l’agence (ex. « 208 blanche ») ; null si absent.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "brand": {
            "description": "Marque (ex. Peugeot).",
            "type": "string",
            "maxLength": 50
          },
          "model": {
            "description": "Modèle (ex. 208).",
            "type": "string",
            "maxLength": 50
          },
          "vehicleType": {
            "description": "Type de véhicule : il fixe la famille et les champs applicables.",
            "type": "string",
            "enum": [
              "CITY",
              "COMPACT",
              "CROSSOVER",
              "SEDAN",
              "BREAK",
              "SUV",
              "OFF_ROAD",
              "PICKUP",
              "MINIVAN",
              "VAN",
              "UTILITY",
              "COUPE",
              "CONVERTIBLE",
              "SPORT",
              "LUXURY",
              "MOTORCYCLE",
              "SCOOTER"
            ]
          },
          "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.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "serialNumber": {
            "description": "Numéro de série (deux-roues non immatriculé, par exemple) ; null si absent.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "brand",
          "model",
          "vehicleType",
          "plate",
          "serialNumber"
        ]
      },
      "OptionUnavailableProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/option-unavailable"
          },
          "title": {
            "type": "string",
            "const": "Option en rupture"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "OPTION_UNAVAILABLE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "optionId": {
            "type": "string",
            "format": "uuid"
          },
          "availableQuantity": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "optionId",
          "availableQuantity"
        ]
      },
      "VehicleUnavailableProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/vehicle-unavailable"
          },
          "title": {
            "type": "string",
            "const": "Véhicule indisponible"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "VEHICLE_UNAVAILABLE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "reasons": {
            "minItems": 1,
            "maxItems": 8,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "BOOKED",
                "BLOCKED",
                "BUFFER",
                "INACTIVE",
                "ARCHIVED",
                "BREAKDOWN",
                "MAINTENANCE_OVERDUE",
                "NO_PRICING_CATEGORY"
              ]
            }
          },
          "conflicts": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "RENTAL",
                    "VEHICLE_BLOCK"
                  ]
                },
                "startAt": {
                  "type": "string"
                },
                "endAt": {
                  "type": "string"
                }
              },
              "required": [
                "kind",
                "startAt",
                "endAt"
              ]
            }
          },
          "overdueOperations": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "reasons",
          "conflicts",
          "overdueOperations"
        ]
      },
      "DiscountCapExceededProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/discount-cap-exceeded"
          },
          "title": {
            "type": "string",
            "const": "Plafond de remise dépassé"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "DISCOUNT_CAP_EXCEEDED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "maxDiscountPercent": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "maxDiscountPercent"
        ]
      },
      "OptionOutOfSeasonProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/option-out-of-season"
          },
          "title": {
            "type": "string",
            "const": "Option hors saison"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "OPTION_OUT_OF_SEASON"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "OptionQuantityExceededProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/option-quantity-exceeded"
          },
          "title": {
            "type": "string",
            "const": "Quantité d’option dépassée"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "OPTION_QUANTITY_EXCEEDED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "maxQuantity": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "maxQuantity"
        ]
      },
      "PromoCodeRejectedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/promo-code-rejected"
          },
          "title": {
            "type": "string",
            "const": "Code promo refusé"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "PROMO_CODE_REJECTED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "reason": {
            "type": "string",
            "enum": [
              "NOT_FOUND",
              "NOT_STARTED",
              "EXPIRED",
              "EXHAUSTED",
              "BELOW_MIN_DURATION",
              "CATEGORY_NOT_ELIGIBLE",
              "NO_DISCOUNT"
            ]
          },
          "minRentalDays": {
            "description": "Jours facturés minimum du code, avec `reason: BELOW_MIN_DURATION` seulement.",
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "reason"
        ]
      },
      "VatReverseChargeNotAllowedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/vat-reverse-charge-not-allowed"
          },
          "title": {
            "type": "string",
            "const": "Autoliquidation impossible"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "VAT_REVERSE_CHARGE_NOT_ALLOWED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "reason": {
            "type": "string",
            "enum": [
              "NOT_ENABLED",
              "ORGANIZATION_VAT_NUMBER_MISSING",
              "CUSTOMER_VAT_NUMBER_MISSING"
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "reason"
        ]
      },
      "Rental": {
        "description": "Location, dans la même représentation pour la lecture, la liste et chaque écriture. Montants dans `currency`, voir [Montants et TVA](https://docs.lexio.rent/montants-et-tva).",
        "examples": [
          {
            "id": "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f",
            "number": "LOC-2026.11-0042",
            "status": "RESERVED",
            "source": "PARTNER",
            "partnerCode": "azur-voyages",
            "partnerReference": "AV-884213",
            "period": {
              "startAt": "2026-11-10T10:00:00+01:00",
              "endAt": "2026-11-15T10:00:00+01:00",
              "timezone": "Europe/Paris",
              "billedDays": 5,
              "durationMinutes": 7200
            },
            "actualStartAt": null,
            "actualEndAt": null,
            "vehicle": {
              "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
              "name": "208 Allure",
              "brand": "Peugeot",
              "model": "208",
              "vehicleType": "CITY",
              "plate": "AB-123-CD",
              "serialNumber": null
            },
            "customer": {
              "id": "7c4e2b9a-1f3d-4a6e-8b5c-9d0e1f2a3b4c",
              "isCompany": false,
              "firstName": "Marie",
              "lastName": "Martin",
              "companyName": null,
              "email": "marie.martin@example.com",
              "phone": "+33612345678"
            },
            "pickupLocation": {
              "locationId": "c41a9e3b-2d55-4b0f-8c11-0f3a7d6e9b42",
              "name": "Agence Nice Gare",
              "address": "12 avenue Thiers, 06000 Nice"
            },
            "returnLocation": {
              "locationId": null,
              "name": "Hôtel Negresco",
              "address": "37 promenade des Anglais, 06000 Nice"
            },
            "mileage": {
              "mileagePackageId": "5b7c9d1e-2f3a-4b5c-8d6e-7f8091a2b3c4",
              "name": "200 km/jour",
              "isUnlimited": false,
              "includedKm": 1000,
              "overageRatePerKmHT": 0.25
            },
            "deductible": {
              "deductibleId": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
              "name": "Franchise réduite",
              "description": "Reste à charge réduit en cas de sinistre.",
              "excessAmount": 500
            },
            "deposit": {
              "depositId": "4e5f6a7b-8c9d-4e0f-9a1b-3c4d5e6f7081",
              "name": "Caution citadine",
              "depositAmount": 800
            },
            "options": [
              {
                "optionId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                "name": "Siège enfant",
                "kind": "STANDARD",
                "quantity": 1
              }
            ],
            "lines": [
              {
                "key": "BASE",
                "label": "Tarif de base",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 210,
                "unitPriceTTC": 252,
                "amountHT": 210,
                "amountTTC": 252,
                "ratePercent": null
              },
              {
                "key": "DURATION_DISCOUNT",
                "label": "Réduction durée 5 jours",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": -10.5,
                "unitPriceTTC": -12.6,
                "amountHT": -10.5,
                "amountTTC": -12.6,
                "ratePercent": 5
              },
              {
                "key": "MILEAGE",
                "label": "Forfait 200 km/jour",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 0,
                "unitPriceTTC": 0,
                "amountHT": 0,
                "amountTTC": 0,
                "ratePercent": null
              },
              {
                "key": "DEDUCTIBLE",
                "label": "Franchise réduite",
                "refId": null,
                "quantity": 1,
                "unitPriceHT": 37.5,
                "unitPriceTTC": 45,
                "amountHT": 37.5,
                "amountTTC": 45,
                "ratePercent": null
              },
              {
                "key": "OPTION",
                "label": "Siège enfant",
                "refId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
                "quantity": 1,
                "unitPriceHT": 20,
                "unitPriceTTC": 24,
                "amountHT": 20,
                "amountTTC": 24,
                "ratePercent": null
              }
            ],
            "promoCode": null,
            "currency": "EUR",
            "vatPercent": 20,
            "isVatReverseCharge": false,
            "totalHT": 257,
            "vatAmount": 51.4,
            "totalTTC": 308.4,
            "balance": {
              "totalTTC": 308.4,
              "paidAmount": 0,
              "dueAmount": 308.4,
              "overpaidAmount": 0
            },
            "notes": "Siège enfant à installer avant la remise.",
            "createdAt": "2026-11-02T09:15:02+01:00",
            "updatedAt": "2026-11-02T09:15:02+01:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant de la location.",
            "type": "string",
            "format": "uuid"
          },
          "number": {
            "description": "Numéro de la location dans Lexio, unique dans l’organisation et jamais réattribué.",
            "type": "string"
          },
          "status": {
            "description": "`PENDING_APPROVAL` : demande à approuver par le loueur ; `RESERVED` : réservée ; `IN_PROGRESS` : véhicule remis ; `COMPLETED` : véhicule rendu ; `CANCELLED` : annulée.",
            "type": "string",
            "enum": [
              "RESERVED",
              "PENDING_APPROVAL",
              "IN_PROGRESS",
              "COMPLETED",
              "CANCELLED"
            ]
          },
          "source": {
            "description": "Canal de vente : `ONLINE` (en ligne), `PHONE` (téléphone), `WALKIN` (sur place), `PARTNER` (partenaire, toute location créée par une clé partenaire), `OTHER`.",
            "type": "string",
            "enum": [
              "ONLINE",
              "PHONE",
              "WALKIN",
              "PARTNER",
              "OTHER"
            ]
          },
          "partnerCode": {
            "description": "Code partenaire de la clé qui a créé la location ; null hors partenaire.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 50
              },
              {
                "type": "null"
              }
            ]
          },
          "partnerReference": {
            "description": "Numéro de commande du partenaire, unique par code partenaire ; null si absent.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ]
          },
          "period": {
            "$ref": "#/components/schemas/Period"
          },
          "actualStartAt": {
            "description": "Départ réel (`pickup`) ; null tant que le véhicule n’est pas remis.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "actualEndAt": {
            "description": "Retour réel (`return`) ; null tant que le véhicule n’est pas rendu.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "vehicle": {
            "description": "Véhicule actuellement affecté à la location.",
            "examples": [
              {
                "id": "3b1f5c2a-8d4e-4f6a-9b7c-2e5d8a1f4c63",
                "name": "208 Allure",
                "brand": "Peugeot",
                "model": "208",
                "vehicleType": "CITY",
                "plate": "AB-123-CD",
                "serialNumber": null
              }
            ],
            "$ref": "#/components/schemas/VehicleRef"
          },
          "customer": {
            "description": "Titulaire de la location.",
            "type": "object",
            "properties": {
              "id": {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "description": "Identifiant du client.",
                "type": "string",
                "format": "uuid"
              },
              "isCompany": {
                "description": "true : société ; false : particulier. Les champs de l’autre type valent null.",
                "type": "boolean"
              },
              "firstName": {
                "description": "Prénom (particulier) ; null pour une société ou une fiche anonymisée.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "lastName": {
                "description": "Nom de famille (particulier), publié en majuscules ; null pour une société ou une fiche anonymisée.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "companyName": {
                "description": "Raison sociale (société) ; null pour un particulier.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "email": {
                "description": "Email, en minuscules ; celui d’un particulier est unique pour un même `partnerCode`. null si absent.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "phone": {
                "description": "Téléphone, au format international quand le pays est connu ; null si absent.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "isCompany",
              "firstName",
              "lastName",
              "companyName",
              "email",
              "phone"
            ]
          },
          "pickupLocation": {
            "description": "Lieu de départ ; null si non renseigné.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/LocationRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "returnLocation": {
            "description": "Lieu de retour ; null si non renseigné.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/LocationRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "mileage": {
            "$ref": "#/components/schemas/Mileage"
          },
          "deductible": {
            "description": "Franchise retenue ; null sans franchise.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/DeductibleSnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "deposit": {
            "description": "Caution retenue ; null sans caution.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/DepositSnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "options": {
            "description": "Options vendues ; leurs montants se lisent dans `lines`.",
            "maxItems": 50,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RentalOption"
            }
          },
          "lines": {
            "description": "Détail du prix, une ligne par règle appliquée, frais et dépassement kilométrique compris.",
            "maxItems": 200,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceLine"
            }
          },
          "promoCode": {
            "description": "Code promo utilisé ; null sans code.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 50
              },
              {
                "type": "null"
              }
            ]
          },
          "currency": {
            "description": "Devise de la location, figée à sa création : tous ses montants sont dans celle-ci.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "vatPercent": {
            "description": "Taux de TVA appliqué, en pourcentage (20 = 20 %) ; 0 en autoliquidation ou pour une agence exonérée. Au plus 2 décimales.",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "isVatReverseCharge": {
            "description": "true : autoliquidation de la TVA, `vatPercent` vaut 0 et `totalTTC` = `totalHT`.",
            "type": "boolean"
          },
          "totalHT": {
            "description": "Total hors taxes ; fait foi. Égal à la somme des `lines[].amountHT`, sauf écart possible sur une location ancienne.",
            "type": "number"
          },
          "vatAmount": {
            "description": "Montant de la TVA : `totalTTC − totalHT`.",
            "type": "number"
          },
          "totalTTC": {
            "description": "Total toutes taxes comprises, montant de la pièce : inchangé par une annulation, caution et franchise exclues. Fait foi ; égal à la somme des `lines[].amountTTC`, sauf écart possible sur une location ancienne.",
            "type": "number"
          },
          "balance": {
            "$ref": "#/components/schemas/Balance"
          },
          "notes": {
            "description": "Note libre de la location ; null si vide.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Instant de création.",
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Instant de la dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "number",
          "status",
          "source",
          "partnerCode",
          "partnerReference",
          "period",
          "actualStartAt",
          "actualEndAt",
          "vehicle",
          "customer",
          "pickupLocation",
          "returnLocation",
          "mileage",
          "deductible",
          "deposit",
          "options",
          "lines",
          "promoCode",
          "currency",
          "vatPercent",
          "isVatReverseCharge",
          "totalHT",
          "vatAmount",
          "totalTTC",
          "balance",
          "notes",
          "createdAt",
          "updatedAt"
        ]
      },
      "LocationRef": {
        "description": "Lieu de départ ou de retour, copié à l’enregistrement : une modification ultérieure du catalogue ne le change pas.",
        "examples": [
          {
            "locationId": "c41a9e3b-2d55-4b0f-8c11-0f3a7d6e9b42",
            "name": "Agence Nice Gare",
            "address": "12 avenue Thiers, 06000 Nice"
          }
        ],
        "type": "object",
        "properties": {
          "locationId": {
            "description": "Lieu du catalogue (`GET /locations`) ; null pour une adresse libre.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "description": "Nom du lieu, copié à l’enregistrement ; null si aucun.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "address": {
            "description": "Adresse, copiée à l’enregistrement ; null si aucune.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "locationId",
          "name",
          "address"
        ]
      },
      "RentalOption": {
        "description": "Option vendue. Son prix se lit dans `lines` (ligne `OPTION` dont `refId` = `optionId`).",
        "examples": [
          {
            "optionId": "6a7b8c9d-0e1f-4a2b-9c3d-5e6f70819203",
            "name": "Siège enfant",
            "kind": "STANDARD",
            "quantity": 1
          }
        ],
        "type": "object",
        "properties": {
          "optionId": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Option du catalogue (`GET /options`).",
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "description": "Nom de l’option.",
            "type": "string",
            "maxLength": 200
          },
          "kind": {
            "description": "`STANDARD` : option du catalogue ; `ADDITIONAL_DRIVER` : conducteur additionnel ; `YOUNG_DRIVER` : majoration jeune conducteur.",
            "type": "string",
            "enum": [
              "STANDARD",
              "ADDITIONAL_DRIVER",
              "YOUNG_DRIVER"
            ]
          },
          "quantity": {
            "description": "Quantité vendue.",
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "optionId",
          "name",
          "kind",
          "quantity"
        ]
      },
      "Balance": {
        "description": "Solde de la location dans sa devise ; la caution n’y entre jamais.",
        "examples": [
          {
            "totalTTC": 308.4,
            "paidAmount": 0,
            "dueAmount": 308.4,
            "overpaidAmount": 0
          }
        ],
        "type": "object",
        "properties": {
          "totalTTC": {
            "description": "Montant exigible : `totalTTC` de la location, 0 si elle est annulée.",
            "type": "number",
            "minimum": 0
          },
          "paidAmount": {
            "description": "Net encaissé : paiements validés moins remboursements validés, caution exclue.",
            "type": "number"
          },
          "dueAmount": {
            "description": "Reste à payer : `totalTTC − paidAmount`, 0 au minimum.",
            "type": "number",
            "minimum": 0
          },
          "overpaidAmount": {
            "description": "Trop-perçu : `paidAmount − totalTTC`, 0 au minimum ; à rembourser ou à conserver par le loueur.",
            "type": "number",
            "minimum": 0
          }
        },
        "required": [
          "totalTTC",
          "paidAmount",
          "dueAmount",
          "overpaidAmount"
        ]
      },
      "BookingRefusedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/booking-refused"
          },
          "title": {
            "type": "string",
            "const": "Réservation refusée"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "BOOKING_REFUSED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "CustomerBlockedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/customer-blocked"
          },
          "title": {
            "type": "string",
            "const": "Client bloqué"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "CUSTOMER_BLOCKED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "PriceChangedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/price-changed"
          },
          "title": {
            "type": "string",
            "const": "Prix modifié"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "PRICE_CHANGED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "expectedTotalTTC": {
            "type": "number"
          },
          "currentTotalTTC": {
            "type": "number"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "expectedTotalTTC",
          "currentTotalTTC"
        ]
      },
      "QuoteAlreadyUsedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/quote-already-used"
          },
          "title": {
            "type": "string",
            "const": "Devis déjà utilisé"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "QUOTE_ALREADY_USED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "rentalId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "rentalId"
        ]
      },
      "QuoteExpiredProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/quote-expired"
          },
          "title": {
            "type": "string",
            "const": "Devis expiré"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "QUOTE_EXPIRED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "DriverAgeMismatchProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/driver-age-mismatch"
          },
          "title": {
            "type": "string",
            "const": "Âge du conducteur différent du devis"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "DRIVER_AGE_MISMATCH"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "RentalStatusNotAllowedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/rental-status-not-allowed"
          },
          "title": {
            "type": "string",
            "const": "Statut de la location incompatible"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "RENTAL_STATUS_NOT_ALLOWED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "rentalStatus": {
            "type": "string",
            "enum": [
              "RESERVED",
              "PENDING_APPROVAL",
              "IN_PROGRESS",
              "COMPLETED",
              "CANCELLED"
            ]
          },
          "allowedStatuses": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "RESERVED",
                "PENDING_APPROVAL",
                "IN_PROGRESS",
                "COMPLETED",
                "CANCELLED"
              ]
            }
          },
          "action": {
            "type": "string",
            "enum": [
              "CANCEL",
              "PICKUP",
              "RETURN",
              "RESCHEDULE",
              "CHANGE_VEHICLE",
              "CHANGE_COVERAGE",
              "CHANGE_CUSTOMER",
              "SET_OPTION_QUANTITY",
              "REMOVE_OPTION",
              "EDIT_NOTES",
              "EDIT_LOCATIONS",
              "DELETE",
              "ADD_PAYMENT",
              "REFUND",
              "DELETE_PAYMENT",
              "UPLOAD_PHOTO",
              "DELETE_PHOTO"
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "rentalStatus",
          "allowedStatuses",
          "action"
        ]
      },
      "Amendment": {
        "examples": [
          {
            "id": "f6b8d0e2-4a5c-4e7a-9b1d-3f5a7c9e1b4d",
            "rentalId": "a1c3e5f7-2b4d-4f6a-8c0e-1d3f5b7d9e2a",
            "number": "AVT-LOC-2026.11-0042-001",
            "status": "SIGNED",
            "changeType": "DATE_EXTENSION",
            "changedFields": [
              "END_AT",
              "TOTAL"
            ],
            "previousTotalHT": 175,
            "previousTotalTTC": 210,
            "newTotalHT": 210,
            "newTotalTTC": 252,
            "differenceHT": 35,
            "differenceTTC": 42,
            "currency": "EUR",
            "createdAt": "2026-11-14T09:12:40+01:00",
            "sentAt": "2026-11-14T09:12:41+01:00",
            "signedAt": "2026-11-14T09:30:05+01:00",
            "signatureExpiresAt": "2026-11-21T09:12:41+01:00",
            "document": {
              "url": "https://storage.lexio.rent/d/f6b8d0e2?sig=7c3a",
              "expiresAt": "2026-11-14T10:30:05+01:00"
            }
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant de l’avenant.",
            "type": "string",
            "format": "uuid"
          },
          "rentalId": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Location concernée (`GET /rentals/{rentalId}`).",
            "type": "string",
            "format": "uuid"
          },
          "number": {
            "description": "Numéro de l’avenant, dérivé de celui de la location.",
            "type": "string"
          },
          "status": {
            "description": "`PENDING`, `SENT`, `VIEWED` : signature du client en attente. `SIGNED`, `DECLINED`, `EXPIRED`, `CANCELLED` : définitifs.",
            "type": "string",
            "enum": [
              "PENDING",
              "SENT",
              "VIEWED",
              "SIGNED",
              "EXPIRED",
              "DECLINED",
              "CANCELLED"
            ]
          },
          "changeType": {
            "description": "Nature principale de la modification.",
            "type": "string",
            "enum": [
              "DATE_EXTENSION",
              "DATE_REDUCTION",
              "VEHICLE_CHANGE",
              "PRICE_ADJUSTMENT",
              "OPTIONS_CHANGE",
              "DRIVER_CHANGE",
              "MILEAGE_CHANGE",
              "DEDUCTIBLE_CHANGE",
              "DEPOSIT_CHANGE",
              "RENT_CHANGE",
              "MULTIPLE"
            ]
          },
          "changedFields": {
            "description": "Éléments de la location modifiés, sans doublon.",
            "maxItems": 12,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "START_AT",
                "END_AT",
                "VEHICLE",
                "TOTAL",
                "MONTHLY_RENT",
                "MILEAGE",
                "OPTIONS",
                "DRIVERS",
                "PICKUP_LOCATION",
                "RETURN_LOCATION",
                "DEDUCTIBLE",
                "DEPOSIT"
              ]
            }
          },
          "previousTotalHT": {
            "description": "Total HT de la location avant l’avenant.",
            "type": "number"
          },
          "previousTotalTTC": {
            "description": "Total TTC avant l’avenant.",
            "type": "number"
          },
          "newTotalHT": {
            "description": "Total HT après l’avenant ; suit la location tant que la signature est en attente.",
            "type": "number"
          },
          "newTotalTTC": {
            "description": "Total TTC après l’avenant.",
            "type": "number"
          },
          "differenceHT": {
            "description": "`newTotalHT` − `previousTotalHT`, signé.",
            "type": "number"
          },
          "differenceTTC": {
            "description": "`newTotalTTC` − `previousTotalTTC`, signé.",
            "type": "number"
          },
          "currency": {
            "description": "Devise de la location (ISO 4217).",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Création, heure de l’agence avec décalage.",
            "type": "string",
            "format": "date-time"
          },
          "sentAt": {
            "description": "Envoi au client pour signature ; null tant qu’il n’est pas envoyé.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "signedAt": {
            "description": "Signature ; null si non signé.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "signatureExpiresAt": {
            "description": "Échéance de la demande de signature ; null sans demande.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "document": {
            "description": "PDF signé s’il existe, sinon PDF de l’avenant, URL signée valable une heure, à ne pas stocker ; null sans PDF.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SignedDocument"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "rentalId",
          "number",
          "status",
          "changeType",
          "changedFields",
          "previousTotalHT",
          "previousTotalTTC",
          "newTotalHT",
          "newTotalTTC",
          "differenceHT",
          "differenceTTC",
          "currency",
          "createdAt",
          "sentAt",
          "signedAt",
          "signatureExpiresAt",
          "document"
        ]
      },
      "InvoiceRef": {
        "description": "Facture ou avoir produit par l’opération ; le document se lit par `GET /rentals/{rentalId}/invoices`.",
        "examples": [
          {
            "id": "f2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d",
            "number": "FAC-2026.11-0103",
            "type": "INVOICE",
            "creditedInvoiceId": null,
            "totalHT": 307,
            "totalTTC": 368.4
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Facture ou avoir ; null en aperçu (`dryRun`).",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "number": {
            "description": "Numéro de la pièce ; null en aperçu (`dryRun`).",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "type": {
            "description": "`INVOICE` : facture ; `CREDIT_NOTE` : avoir.",
            "type": "string",
            "enum": [
              "INVOICE",
              "CREDIT_NOTE"
            ]
          },
          "creditedInvoiceId": {
            "description": "Facture que cet avoir crédite ; null pour une facture.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "totalHT": {
            "description": "Total HT de la pièce, négatif pour un avoir.",
            "type": "number"
          },
          "totalTTC": {
            "description": "Total TTC de la pièce, négatif pour un avoir.",
            "type": "number"
          }
        },
        "required": [
          "id",
          "number",
          "type",
          "creditedInvoiceId",
          "totalHT",
          "totalTTC"
        ]
      },
      "CreditNoteNotIssuableProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/credit-note-not-issuable"
          },
          "title": {
            "type": "string",
            "const": "Avoir impossible à émettre"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "CREDIT_NOTE_NOT_ISSUABLE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "RentalBusyProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/rental-busy"
          },
          "title": {
            "type": "string",
            "const": "Location occupée"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "RENTAL_BUSY"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "RentalChangedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/rental-changed"
          },
          "title": {
            "type": "string",
            "const": "Location modifiée entre-temps"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "RENTAL_CHANGED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "PriceChange": {
        "description": "Totaux de la location avant puis après l’action, dans sa devise ; null si le total TTC ne change pas.",
        "examples": [
          {
            "previousTotalHT": 257,
            "previousTotalTTC": 308.4,
            "newTotalHT": 351.8,
            "newTotalTTC": 422.16,
            "differenceHT": 94.8,
            "differenceTTC": 113.76
          }
        ],
        "type": "object",
        "properties": {
          "previousTotalHT": {
            "description": "Total HT avant l’action.",
            "type": "number"
          },
          "previousTotalTTC": {
            "description": "Total TTC avant l’action.",
            "type": "number"
          },
          "newTotalHT": {
            "description": "Total HT après l’action.",
            "type": "number"
          },
          "newTotalTTC": {
            "description": "Total TTC après l’action, à reprendre en `expectedTotalTTC` de l’appel réel.",
            "type": "number"
          },
          "differenceHT": {
            "description": "`newTotalHT − previousTotalHT`, signé.",
            "type": "number"
          },
          "differenceTTC": {
            "description": "`newTotalTTC − previousTotalTTC`, signé.",
            "type": "number"
          }
        },
        "required": [
          "previousTotalHT",
          "previousTotalTTC",
          "newTotalHT",
          "newTotalTTC",
          "differenceHT",
          "differenceTTC"
        ]
      },
      "AmendmentRef": {
        "description": "Avenant créé par une modification significative d’une location `IN_PROGRESS` ; son document se lit par `GET /rentals/{rentalId}/amendments`.",
        "examples": [
          {
            "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
            "number": "AVT-LOC-2026.11-0042-001"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "description": "Avenant ; null en aperçu (`dryRun`).",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "number": {
            "description": "Numéro de l’avenant ; null en aperçu (`dryRun`).",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "number"
        ]
      },
      "Overpayment": {
        "description": "Trop-perçu créé par l’action et sa résolution.",
        "examples": [
          {
            "overpaidAmount": 24,
            "resolution": "REFUND_PENDING",
            "resolvableByKey": true,
            "refundPaymentId": "b7c8d9e0-f1a2-4b3c-8d4e-5f6a7b8c9d0e"
          }
        ],
        "type": "object",
        "properties": {
          "overpaidAmount": {
            "description": "Trop-perçu créé par l’action : net encaissé hors caution, moins les remboursements en attente, au-delà du nouveau total TTC. Un trop-perçu antérieur n’est jamais redemandé.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "resolution": {
            "description": "Résolution appliquée ; null seulement en aperçu sans `overpaymentResolution`, que l’appel réel exigera.",
            "anyOf": [
              {
                "description": "REFUND_PENDING : remboursement PENDING par virement du trop-perçu ; NO_REFUND : le loueur le conserve. Exige le scope payments.refund.",
                "type": "string",
                "enum": [
                  "REFUND_PENDING",
                  "NO_REFUND"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "resolvableByKey": {
            "description": "true si la clé a le scope `payments.refund` et peut résoudre le trop-perçu ; sinon le loueur le traite dans Lexio.",
            "type": "boolean"
          },
          "refundPaymentId": {
            "description": "Remboursement en attente (`PENDING`) créé par `REFUND_PENDING` ; null sinon, et en aperçu.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "overpaidAmount",
          "resolution",
          "resolvableByKey",
          "refundPaymentId"
        ]
      },
      "OverpaymentResolutionRequiredProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/overpayment-resolution-required"
          },
          "title": {
            "type": "string",
            "const": "Trop-perçu à résoudre"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "OVERPAYMENT_RESOLUTION_REQUIRED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "overpaidAmount": {
            "type": "number"
          },
          "resolvableByKey": {
            "type": "boolean"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "overpaidAmount",
          "resolvableByKey"
        ]
      },
      "SepaDebitPendingProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/sepa-debit-pending"
          },
          "title": {
            "type": "string",
            "const": "Prélèvement SEPA en cours"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "SEPA_DEBIT_PENDING"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "pendingDebitAmount": {
            "type": "number"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "pendingDebitAmount"
        ]
      },
      "InvoiceFinalizedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/invoice-finalized"
          },
          "title": {
            "type": "string",
            "const": "Facture finalisée"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "INVOICE_FINALIZED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "PricingChoiceNotAvailableProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/pricing-choice-not-available"
          },
          "title": {
            "type": "string",
            "const": "Choix tarifaire indisponible"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "PRICING_CHOICE_NOT_AVAILABLE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "availablePricingChoices": {
            "minItems": 1,
            "maxItems": 4,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pricingChoice": {
                  "type": "string",
                  "enum": [
                    "KEEP_ORIGINAL_PRICE",
                    "APPLY_LOWER_PRICE",
                    "APPLY_NEW_PRICE",
                    "APPLY_PRORATA"
                  ]
                },
                "newTotalHT": {
                  "type": "number"
                },
                "newTotalTTC": {
                  "type": "number"
                },
                "isRecommended": {
                  "type": "boolean"
                }
              },
              "required": [
                "pricingChoice",
                "newTotalHT",
                "newTotalTTC",
                "isRecommended"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "errors"
        ]
      },
      "Contract": {
        "examples": [
          {
            "rentalId": "a1c3e5f7-2b4d-4f6a-8c0e-1d3f5b7d9e2a",
            "status": "AVAILABLE",
            "issuedAt": "2026-11-07T10:02:18+01:00",
            "document": {
              "url": "https://storage.lexio.rent/d/a1c3e5f7?sig=2d8f",
              "expiresAt": "2026-11-07T11:02:18+01:00"
            }
          }
        ],
        "type": "object",
        "properties": {
          "rentalId": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Location concernée (`GET /rentals/{rentalId}`).",
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "description": "`NOT_ISSUED` : aucun contrat disponible ; `AVAILABLE` : `document` lisible. `PENDING` est réservé et n’est pas encore renvoyé.",
            "type": "string",
            "enum": [
              "NOT_ISSUED",
              "PENDING",
              "AVAILABLE"
            ]
          },
          "issuedAt": {
            "description": "Date du document (départ ou retour) ; null sans contrat.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "document": {
            "description": "PDF du contrat, URL signée valable une heure, à ne pas stocker ; null sans contrat.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SignedDocument"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "rentalId",
          "status",
          "issuedAt",
          "document"
        ]
      },
      "Inspection": {
        "examples": [
          {
            "phase": "DEPARTURE",
            "inspectedAt": "2026-11-07T10:01:47+01:00",
            "odometerKm": 18452,
            "fuelLevelPercent": 100,
            "checklist": {
              "interiorClean": "OK",
              "exteriorClean": "OK",
              "vehiclePapers": "OK",
              "safetyKit": "OK",
              "levels": "NOT_CHECKED",
              "skippedViews": []
            },
            "damages": [
              {
                "id": "dmg-7f3a2c",
                "type": "SCRATCH",
                "view": "FRONT_LEFT",
                "description": "Rayure de 3 cm sur la jante avant gauche"
              }
            ],
            "confirmedDepartureDamageIds": [],
            "notes": null,
            "isSigned": true,
            "signatureWaivedReason": null
          }
        ],
        "type": "object",
        "properties": {
          "phase": {
            "description": "État des lieux de départ ou de retour.",
            "type": "string",
            "enum": [
              "DEPARTURE",
              "RETURN"
            ]
          },
          "inspectedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Instant de l’état des lieux, heure de l’agence avec décalage.",
            "type": "string",
            "format": "date-time"
          },
          "odometerKm": {
            "description": "null = non relevé (jamais 0 inventé).",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "fuelLevelPercent": {
            "description": "Carburant ou charge selon l’énergie ; null = non relevé.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "checklist": {
            "description": "null = état des lieux sans contrôles structurés.",
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "interiorClean": {
                    "description": "Propreté intérieure ; null : contrôle non applicable.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "OK",
                          "NOT_OK",
                          "NOT_CHECKED"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "exteriorClean": {
                    "description": "Propreté extérieure ; null : contrôle non applicable.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "OK",
                          "NOT_OK",
                          "NOT_CHECKED"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "vehiclePapers": {
                    "description": "Papiers du véhicule à bord ; null : contrôle non applicable.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "OK",
                          "NOT_OK",
                          "NOT_CHECKED"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "safetyKit": {
                    "description": "Équipements de sécurité à bord ; null : contrôle non applicable.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "OK",
                          "NOT_OK",
                          "NOT_CHECKED"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "levels": {
                    "description": "Niveaux ; null : contrôle non applicable.",
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "OK",
                          "NOT_OK",
                          "NOT_CHECKED"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "skippedViews": {
                    "description": "Vues du tour photo déclarées non photographiées.",
                    "maxItems": 32,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "FRONT",
                        "FRONT_LEFT",
                        "REAR_LEFT",
                        "REAR",
                        "REAR_RIGHT",
                        "FRONT_RIGHT",
                        "WINDSHIELD",
                        "INTERIOR",
                        "TRUNK",
                        "DASHBOARD",
                        "TW_FRONT",
                        "TW_COCKPIT",
                        "TW_LEFT",
                        "TW_RIGHT",
                        "TW_REAR",
                        "TW_SADDLE",
                        "WHEEL_FRONT_LEFT",
                        "DOOR_FRONT_LEFT",
                        "DOOR_REAR_LEFT",
                        "WHEEL_REAR_LEFT",
                        "WHEEL_REAR_RIGHT",
                        "DOOR_REAR_RIGHT",
                        "DOOR_FRONT_RIGHT",
                        "WHEEL_FRONT_RIGHT",
                        "REAR_SEATS"
                      ]
                    }
                  }
                },
                "required": [
                  "interiorClean",
                  "exteriorClean",
                  "vehiclePapers",
                  "safetyKit",
                  "levels",
                  "skippedViews"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "damages": {
            "description": "DEPARTURE : dommages constatés au départ. RETURN : nouveaux dommages.",
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "À citer dans confirmedDepartureDamageIds au retour ; null = dommage historique non identifié, qui ne peut pas être confirmé.",
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 64
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": {
                  "description": "Nature du dommage.",
                  "type": "string",
                  "enum": [
                    "SCRATCH",
                    "DENT",
                    "CRACK",
                    "BROKEN",
                    "STAIN",
                    "OTHER"
                  ]
                },
                "view": {
                  "description": "null = dommage historique en texte libre ; type vaut alors OTHER.",
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "FRONT",
                        "FRONT_LEFT",
                        "REAR_LEFT",
                        "REAR",
                        "REAR_RIGHT",
                        "FRONT_RIGHT",
                        "WINDSHIELD",
                        "INTERIOR",
                        "TRUNK",
                        "DASHBOARD",
                        "TW_FRONT",
                        "TW_COCKPIT",
                        "TW_LEFT",
                        "TW_RIGHT",
                        "TW_REAR",
                        "TW_SADDLE",
                        "WHEEL_FRONT_LEFT",
                        "DOOR_FRONT_LEFT",
                        "DOOR_REAR_LEFT",
                        "WHEEL_REAR_LEFT",
                        "WHEEL_REAR_RIGHT",
                        "DOOR_REAR_RIGHT",
                        "DOOR_FRONT_RIGHT",
                        "WHEEL_FRONT_RIGHT",
                        "REAR_SEATS"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "description": {
                  "description": "Description libre ; null si absente.",
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 500
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "type",
                "view",
                "description"
              ]
            }
          },
          "confirmedDepartureDamageIds": {
            "description": "RETURN : dommages du départ confirmés. Toujours [] en DEPARTURE.",
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          },
          "notes": {
            "description": "Remarques libres ; null si absentes.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ]
          },
          "isSigned": {
            "description": "true : signé par le client ; l’image de la signature n’est jamais exposée.",
            "type": "boolean"
          },
          "signatureWaivedReason": {
            "description": "RETURN sans le client : motif de la levée de signature.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "phase",
          "inspectedAt",
          "odometerKm",
          "fuelLevelPercent",
          "checklist",
          "damages",
          "confirmedDepartureDamageIds",
          "notes",
          "isSigned",
          "signatureWaivedReason"
        ]
      },
      "Invoice": {
        "examples": [
          {
            "id": "d2f4a6c8-0b1d-4e3f-9a5c-7e9b1d3f5a7c",
            "rentalId": "a1c3e5f7-2b4d-4f6a-8c0e-1d3f5b7d9e2a",
            "number": "FAC-2026.11-0042",
            "type": "INVOICE",
            "status": "PAID",
            "creditedInvoiceId": null,
            "creditNoteReason": null,
            "issueDate": "2026-11-12",
            "dueDate": "2026-11-12",
            "totalHT": 175,
            "vatAmount": 35,
            "totalTTC": 210,
            "paidAmount": 210,
            "dueAmount": 0,
            "vatPercent": 20,
            "isVatReverseCharge": false,
            "currency": "EUR",
            "createdAt": "2026-11-12T10:04:33+01:00",
            "document": {
              "url": "https://storage.lexio.rent/d/d2f4a6c8?sig=4b1e",
              "expiresAt": "2026-11-12T11:04:33+01:00"
            }
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant de la pièce.",
            "type": "string",
            "format": "uuid"
          },
          "rentalId": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Location concernée (`GET /rentals/{rentalId}`).",
            "type": "string",
            "format": "uuid"
          },
          "number": {
            "description": "Numéro légal de la pièce, unique et séquentiel.",
            "type": "string"
          },
          "type": {
            "description": "`INVOICE` : facture ; `CREDIT_NOTE` : avoir.",
            "type": "string",
            "enum": [
              "INVOICE",
              "CREDIT_NOTE"
            ]
          },
          "status": {
            "description": "État de paiement : `ISSUED` émise, `PARTIALLY_PAID`, `PAID`, `CANCELLED` annulée par un avoir. Un brouillon (`DRAFT`) n’est jamais renvoyé.",
            "type": "string",
            "enum": [
              "DRAFT",
              "ISSUED",
              "PAID",
              "PARTIALLY_PAID",
              "CANCELLED"
            ]
          },
          "creditedInvoiceId": {
            "description": "Avoir : facture créditée. Facture : null.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "creditNoteReason": {
            "description": "Motif de l’avoir ; null pour une facture.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "CANCELLATION",
                  "ERROR",
                  "COMMERCIAL"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "issueDate": {
            "description": "Jour d’émission, fuseau de l’agence ; null pour une pièce ancienne non datée.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10"
                ],
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ]
          },
          "dueDate": {
            "description": "Jour d’échéance du paiement ; null si aucun.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10"
                ],
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ]
          },
          "totalHT": {
            "description": "Total HT ; négatif pour un avoir.",
            "type": "number"
          },
          "vatAmount": {
            "description": "Montant de TVA : `totalTTC` − `totalHT`.",
            "type": "number"
          },
          "totalTTC": {
            "description": "Total TTC ; négatif pour un avoir.",
            "type": "number"
          },
          "paidAmount": {
            "description": "Montant TTC déjà réglé.",
            "type": "number",
            "minimum": 0
          },
          "dueAmount": {
            "description": "Montant TTC restant à régler.",
            "type": "number",
            "minimum": 0
          },
          "vatPercent": {
            "description": "Taux de TVA de la pièce, en %.",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "isVatReverseCharge": {
            "description": "true : facturée en autoliquidation, la TVA est due par le client.",
            "type": "boolean"
          },
          "currency": {
            "description": "Devise de la pièce (ISO 4217).",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Création, heure de l’agence avec décalage.",
            "type": "string",
            "format": "date-time"
          },
          "document": {
            "description": "PDF Factur-X, URL signée valable une heure, à ne pas stocker ; null tant que le PDF n’est pas généré.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SignedDocument"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "rentalId",
          "number",
          "type",
          "status",
          "creditedInvoiceId",
          "creditNoteReason",
          "issueDate",
          "dueDate",
          "totalHT",
          "vatAmount",
          "totalTTC",
          "paidAmount",
          "dueAmount",
          "vatPercent",
          "isVatReverseCharge",
          "currency",
          "createdAt",
          "document"
        ]
      },
      "Payment": {
        "description": "Encaissement, caution ou remboursement d’une location.",
        "examples": [
          {
            "id": "e8a1b2c3-d4e5-4f60-9a7b-8c9d0e1f2a3b",
            "rentalId": "9c2d7e4a-5b1f-4d3c-8a6e-0f1b2c3d4e5f",
            "number": "PAY-2026.11-0042",
            "type": "PAYMENT",
            "amount": 308.4,
            "currency": "EUR",
            "method": "TRANSFER",
            "status": "VALIDATED",
            "isPreAuthorization": false,
            "paidAt": "2026-11-05T14:20:00+01:00",
            "createdAt": "2026-11-05T14:20:03+01:00",
            "providerReference": null,
            "stripePaymentIntentId": null,
            "notes": null
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant du paiement.",
            "type": "string",
            "format": "uuid"
          },
          "rentalId": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Location du paiement.",
            "type": "string",
            "format": "uuid"
          },
          "number": {
            "description": "Numéro comptable : séquence `PAY` (encaissement), `CAU` (caution) ou `REM` (remboursement) de l’organisation.",
            "examples": [
              "PAY-2026.11-0042"
            ],
            "type": "string"
          },
          "type": {
            "description": "`PAYMENT` : encaissement ; `DEPOSIT` : caution ; `REFUND` : remboursement.",
            "type": "string",
            "enum": [
              "PAYMENT",
              "DEPOSIT",
              "REFUND"
            ]
          },
          "amount": {
            "description": "Montant réellement encaissé, bloqué ou remboursé, dans `currency` ; positif, le sens est porté par `type`. Seul un mouvement de caution enregistré dans Lexio au retour (restitution ou retenue) est négatif.",
            "type": "number"
          },
          "currency": {
            "description": "Devise de la location.",
            "examples": [
              "EUR"
            ],
            "type": "string",
            "enum": [
              "EUR",
              "XPF",
              "CHF",
              "CAD",
              "GBP",
              "USD",
              "XOF"
            ]
          },
          "method": {
            "description": "Moyen de paiement.",
            "type": "string",
            "enum": [
              "CASH",
              "CREDIT_CARD",
              "TRANSFER",
              "CHECK",
              "PAYPAL",
              "SWIKLY",
              "STRIPE",
              "TYLLT",
              "MOBILE_MONEY",
              "OTHER",
              "SEPA_DEBIT"
            ]
          },
          "status": {
            "description": "Statut de la transaction : seules les lignes `VALIDATED` comptent dans le solde de la location. `PENDING` : en attente (prélèvement SEPA en cours, remboursement à exécuter).",
            "type": "string",
            "enum": [
              "PENDING",
              "VALIDATED",
              "REFUSED",
              "CANCELLED"
            ]
          },
          "isPreAuthorization": {
            "description": "true : empreinte de caution, montant bloqué sans être débité ; toujours false hors `DEPOSIT`.",
            "type": "boolean"
          },
          "paidAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Date de l’opération ; pour un paiement Stripe, celle du PaymentIntent.",
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "description": "Instant d’enregistrement ; null pour une ligne antérieure à cette information.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10T10:00:00+01:00"
                ],
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "providerReference": {
            "description": "Référence de l’opérateur Mobile Money ; null pour les autres moyens.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          },
          "stripePaymentIntentId": {
            "description": "PaymentIntent Stripe qui a réglé ce paiement ; null sinon.",
            "anyOf": [
              {
                "type": "string",
                "pattern": "^pi_[A-Za-z0-9]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "notes": {
            "description": "Libellé libre, de longueur non bornée : une ligne saisie dans Lexio ou écrite par le serveur peut dépasser la limite d’entrée de l’API. Toujours null pour une clé partenaire.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "rentalId",
          "number",
          "type",
          "amount",
          "currency",
          "method",
          "status",
          "isPreAuthorization",
          "paidAt",
          "createdAt",
          "providerReference",
          "stripePaymentIntentId",
          "notes"
        ]
      },
      "PaymentExceedsDueProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/payment-exceeds-due"
          },
          "title": {
            "type": "string",
            "const": "Encaissement supérieur au dû"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "PAYMENT_EXCEEDS_DUE"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "dueAmount": {
            "type": "number"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "dueAmount"
        ]
      },
      "PaymentNotVerifiedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/payment-not-verified"
          },
          "title": {
            "type": "string",
            "const": "Paiement non vérifié"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "PAYMENT_NOT_VERIFIED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "reason": {
            "type": "string",
            "enum": [
              "PI_NOT_FOUND",
              "PI_NOT_SUCCEEDED",
              "PI_ALREADY_USED",
              "PI_RENTAL_MISMATCH",
              "CURRENCY_MISMATCH",
              "AMOUNT_MISMATCH",
              "CONNECT_NOT_CONFIGURED"
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "reason"
        ]
      },
      "RefundExceedsPaidProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/refund-exceeds-paid"
          },
          "title": {
            "type": "string",
            "const": "Remboursement supérieur à l’encaissé"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "REFUND_EXCEEDS_PAID"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          },
          "maxRefundableAmount": {
            "type": "number"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "maxRefundableAmount"
        ]
      },
      "PaymentProviderManagedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/payment-provider-managed"
          },
          "title": {
            "type": "string",
            "const": "Paiement géré par le prestataire"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "PAYMENT_PROVIDER_MANAGED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "Photo": {
        "examples": [
          {
            "id": "b1c2d3e4-f5a6-4b7c-8d9e-0f1a2b3c4d5e",
            "phase": "DEPARTURE",
            "view": "FRONT_LEFT",
            "takenAt": "2026-11-07T09:58:12+01:00",
            "uploadId": "3f6b1c2a-7d8e-4f90-a1b2-c3d4e5f60718",
            "annotations": [
              {
                "x": 0.42,
                "y": 0.61,
                "width": 0.12,
                "height": 0.08,
                "label": "Rayure",
                "comment": "Jante avant gauche"
              }
            ],
            "processingStatus": "READY",
            "original": {
              "url": "https://storage.lexio.rent/p/b1c2d3e4?sig=1a7f",
              "expiresAt": "2026-11-07T11:00:05+01:00"
            },
            "annotated": {
              "url": "https://storage.lexio.rent/p/b1c2d3e4-a?sig=5c2e",
              "expiresAt": "2026-11-07T11:00:05+01:00"
            }
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant de la photo.",
            "type": "string",
            "format": "uuid"
          },
          "phase": {
            "description": "Moment de la prise : départ, retour, ou sinistre (`INCIDENT`).",
            "type": "string",
            "enum": [
              "DEPARTURE",
              "RETURN",
              "INCIDENT"
            ]
          },
          "view": {
            "description": "null = photo libre, hors vue du tour.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "FRONT",
                  "FRONT_LEFT",
                  "REAR_LEFT",
                  "REAR",
                  "REAR_RIGHT",
                  "FRONT_RIGHT",
                  "WINDSHIELD",
                  "INTERIOR",
                  "TRUNK",
                  "DASHBOARD",
                  "TW_FRONT",
                  "TW_COCKPIT",
                  "TW_LEFT",
                  "TW_RIGHT",
                  "TW_REAR",
                  "TW_SADDLE",
                  "WHEEL_FRONT_LEFT",
                  "DOOR_FRONT_LEFT",
                  "DOOR_REAR_LEFT",
                  "WHEEL_REAR_LEFT",
                  "WHEEL_REAR_RIGHT",
                  "DOOR_REAR_RIGHT",
                  "DOOR_FRONT_RIGHT",
                  "WHEEL_FRONT_RIGHT",
                  "REAR_SEATS"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "takenAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Instant de prise de vue (`takenAt` envoyé à l’enregistrement, sinon instant de l’enregistrement), décalage de l’agence ; sert à l’horodatage incrusté.",
            "type": "string",
            "format": "date-time"
          },
          "uploadId": {
            "description": "Téléversement d’origine ; null pour une photo déposée depuis Lexio.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "annotations": {
            "description": "Zones signalées sur la photo, telles qu’enregistrées après bornage à l’image.",
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "description": "Bord gauche, fraction de la largeur.",
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "y": {
                  "description": "Bord haut, fraction de la hauteur.",
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "width": {
                  "description": "Largeur, fraction de la largeur.",
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "maximum": 1
                },
                "height": {
                  "description": "Hauteur, fraction de la hauteur.",
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "maximum": 1
                },
                "label": {
                  "description": "Classification saisie (ex. « Rayure »), non contractuelle.",
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 50
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "comment": {
                  "description": "Commentaire libre ; null si absent.",
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "x",
                "y",
                "width",
                "height",
                "label",
                "comment"
              ]
            }
          },
          "processingStatus": {
            "description": "PENDING : horodatage, conversion HEIC ou image annotée en cours ; READY : terminé. Interroger avec un délai croissant et un plafond de quelques minutes : une photo dont l’image annotée n’a pas pu être produite peut rester PENDING.",
            "type": "string",
            "enum": [
              "PENDING",
              "READY"
            ]
          },
          "original": {
            "description": "Original (preuve), URL signée valable une heure. Son contenu peut encore changer tant que processingStatus vaut PENDING.",
            "examples": [
              {
                "url": "https://storage.example.com/contrats/LOC-2026.11-0042.pdf?signature=9b2e41c7",
                "expiresAt": "2026-11-10T11:12:00+01:00"
              }
            ],
            "$ref": "#/components/schemas/SignedDocument"
          },
          "annotated": {
            "description": "Image aux annotations incrustées, URL signée valable une heure ; null si `annotations` est vide ou tant que `processingStatus` vaut `PENDING`.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SignedDocument"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "phase",
          "view",
          "takenAt",
          "uploadId",
          "annotations",
          "processingStatus",
          "original",
          "annotated"
        ]
      },
      "UploadInvalidProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/upload-invalid"
          },
          "title": {
            "type": "string",
            "const": "Téléversement invalide"
          },
          "status": {
            "type": "number",
            "const": 422
          },
          "code": {
            "type": "string",
            "const": "UPLOAD_INVALID"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "errors": {
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pointer": {
                  "type": "string"
                },
                "code": {
                  "type": "string",
                  "enum": [
                    "required",
                    "invalid_type",
                    "invalid_format",
                    "invalid_value",
                    "too_small",
                    "too_big",
                    "too_many_decimals",
                    "out_of_range",
                    "unknown_field",
                    "null_not_allowed",
                    "empty_string",
                    "empty_patch",
                    "mutually_exclusive",
                    "not_applicable",
                    "duplicate",
                    "end_before_start",
                    "date_in_past",
                    "nonexistent_local_time",
                    "offset_not_allowed",
                    "offset_required",
                    "upload_expired",
                    "upload_incomplete",
                    "upload_conflict"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "pointer",
                "code",
                "detail"
              ]
            }
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "errors"
        ]
      },
      "SeasonCalendarMonth": {
        "examples": [
          {
            "month": 11,
            "dayAssignments": [
              {
                "day": 1,
                "seasonSlug": "moyenne"
              },
              {
                "day": 2,
                "seasonSlug": "moyenne"
              },
              {
                "day": 3,
                "seasonSlug": "moyenne"
              },
              {
                "day": 4,
                "seasonSlug": "moyenne"
              },
              {
                "day": 5,
                "seasonSlug": "basse"
              },
              {
                "day": 6,
                "seasonSlug": "basse"
              },
              {
                "day": 7,
                "seasonSlug": "basse"
              },
              {
                "day": 8,
                "seasonSlug": "basse"
              },
              {
                "day": 9,
                "seasonSlug": "basse"
              },
              {
                "day": 10,
                "seasonSlug": "basse"
              },
              {
                "day": 11,
                "seasonSlug": "basse"
              },
              {
                "day": 12,
                "seasonSlug": "basse"
              },
              {
                "day": 13,
                "seasonSlug": "basse"
              },
              {
                "day": 14,
                "seasonSlug": "basse"
              },
              {
                "day": 15,
                "seasonSlug": "basse"
              },
              {
                "day": 16,
                "seasonSlug": "basse"
              },
              {
                "day": 17,
                "seasonSlug": "basse"
              },
              {
                "day": 18,
                "seasonSlug": "basse"
              },
              {
                "day": 19,
                "seasonSlug": "basse"
              },
              {
                "day": 20,
                "seasonSlug": "basse"
              },
              {
                "day": 21,
                "seasonSlug": "basse"
              },
              {
                "day": 22,
                "seasonSlug": "basse"
              },
              {
                "day": 23,
                "seasonSlug": "basse"
              },
              {
                "day": 24,
                "seasonSlug": "basse"
              },
              {
                "day": 25,
                "seasonSlug": "basse"
              },
              {
                "day": 26,
                "seasonSlug": "basse"
              },
              {
                "day": 27,
                "seasonSlug": "basse"
              },
              {
                "day": 28,
                "seasonSlug": "basse"
              },
              {
                "day": 29,
                "seasonSlug": "basse"
              },
              {
                "day": 30,
                "seasonSlug": "basse"
              }
            ],
            "updatedAt": "2026-09-18T10:05:40+02:00"
          }
        ],
        "type": "object",
        "properties": {
          "month": {
            "description": "Mois, 1 = janvier.",
            "type": "integer",
            "minimum": 1,
            "maximum": 12
          },
          "dayAssignments": {
            "description": "Saison de chaque jour du mois, une entrée par jour ; février compte 29 jours. Le gabarit vaut pour toutes les années.",
            "minItems": 29,
            "maxItems": 31,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "day": {
                  "description": "Jour du mois.",
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 31
                },
                "seasonSlug": {
                  "description": "Saison de ce jour (`GET /seasons`).",
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 50,
                  "pattern": "^[a-z0-9_]+$"
                }
              },
              "required": [
                "day",
                "seasonSlug"
              ]
            }
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "month",
          "dayAssignments",
          "updatedAt"
        ]
      },
      "Season": {
        "examples": [
          {
            "slug": "haute",
            "name": "Haute saison",
            "description": "Vacances scolaires d’été et de Noël",
            "priceFactor": 1.35,
            "displayOrder": 2,
            "updatedAt": "2026-09-18T10:02:14+02:00"
          }
        ],
        "type": "object",
        "properties": {
          "slug": {
            "description": "Identifiant de la saison (minuscules, chiffres, `_`), immuable.",
            "type": "string",
            "minLength": 1,
            "maxLength": 50,
            "pattern": "^[a-z0-9_]+$"
          },
          "name": {
            "description": "Nom de la saison.",
            "type": "string",
            "maxLength": 100
          },
          "description": {
            "description": "Description libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "priceFactor": {
            "description": "Coefficient du prix de base des catégories pendant la saison : 1 = prix de base, 1,2 = +20 %. Au plus 4 décimales.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "displayOrder": {
            "description": "Rang d’affichage ; ordre de la liste.",
            "type": "integer",
            "minimum": 0
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "slug",
          "name",
          "description",
          "priceFactor",
          "displayOrder",
          "updatedAt"
        ]
      },
      "VehicleBlock": {
        "examples": [
          {
            "id": "4b7e9c2d-1a3f-4e5b-8c6d-7f9a0b1c2d3e",
            "vehicleId": "8d2f4c1e-6a3b-4f7d-9e2c-1b5a7c9d3e4f",
            "type": "REPAIR",
            "title": "Remplacement du pare-brise",
            "startAt": "2026-11-16T08:00:00+01:00",
            "endAt": "2026-11-17T12:00:00+01:00",
            "timezone": "Europe/Paris",
            "maintenanceRecordId": null,
            "createdAt": "2026-11-09T15:42:10+01:00",
            "updatedAt": "2026-11-09T15:42:10+01:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant du blocage.",
            "type": "string",
            "format": "uuid"
          },
          "vehicleId": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Véhicule bloqué (`GET /vehicles/{vehicleId}`).",
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "description": "Motif du blocage.",
            "type": "string",
            "enum": [
              "MAINTENANCE",
              "REPAIR",
              "ACCIDENT",
              "INSPECTION",
              "CLEANING",
              "PERSONAL_USE",
              "LOAN",
              "EXTERNAL_BOOKING",
              "OTHER"
            ]
          },
          "title": {
            "description": "Libellé saisi dans Lexio.",
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "startAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Début du blocage, heure de l’agence avec décalage.",
            "type": "string",
            "format": "date-time"
          },
          "endAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Fin du blocage, exclue.",
            "type": "string",
            "format": "date-time"
          },
          "timezone": {
            "description": "Fuseau de l’agence.",
            "examples": [
              "Europe/Paris"
            ],
            "type": "string",
            "minLength": 1
          },
          "maintenanceRecordId": {
            "description": "Entretien auquel le blocage est rattaché dans Lexio ; le blocage est supprimé avec lui. null pour un blocage sans entretien.",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Création.",
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "vehicleId",
          "type",
          "title",
          "startAt",
          "endAt",
          "timezone",
          "maintenanceRecordId",
          "createdAt",
          "updatedAt"
        ]
      },
      "Vehicle": {
        "examples": [
          {
            "id": "8d2f4c1e-6a3b-4f7d-9e2c-1b5a7c9d3e4f",
            "plate": "AB-123-CD",
            "serialNumber": null,
            "vin": "VF3UPHNS8NS012345",
            "name": null,
            "brand": "Peugeot",
            "model": "208",
            "description": null,
            "color": "Blanc nacré",
            "vehicleType": "CITY",
            "family": "CAR",
            "energy": "FUEL",
            "fuelType": "PETROL",
            "transmission": "MANUAL",
            "seats": 5,
            "doors": 5,
            "modelYear": 2024,
            "registrationDate": "2024-03-15",
            "odometerKm": 18450,
            "powerKw": 74,
            "fuelCapacityLiters": 44,
            "batteryCapacityKwh": null,
            "rangeKm": null,
            "chargePortType": null,
            "equipment": [
              "AIR_CONDITIONING",
              "BLUETOOTH",
              "GPS",
              "CARPLAY"
            ],
            "categoryId": "1f6b2d3c-7a8e-4c2b-9d1e-5a4f3b2c1d0e",
            "status": "OPERATIONAL",
            "isActive": true,
            "isArchived": false,
            "isBookable": true,
            "notBookableReasons": [],
            "isMaintenanceTracked": true,
            "maintenanceTrackingMode": "FROM_ZERO",
            "displayOrder": 1,
            "imageUrls": [
              "https://cdn.lexio.rent/vehicles/8d2f4c1e/front.webp"
            ],
            "createdAt": "2026-03-02T09:14:27+01:00",
            "updatedAt": "2026-11-04T18:02:51+01:00"
          }
        ],
        "type": "object",
        "properties": {
          "id": {
            "examples": [
              "7c9e6679-7425-40de-944b-e07fc1f90ae7"
            ],
            "description": "Identifiant du véhicule.",
            "type": "string",
            "format": "uuid"
          },
          "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.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "serialNumber": {
            "description": "Numéro de série (deux-roues non immatriculé, par exemple) ; null si absent.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "vin": {
            "description": "Numéro d’identification du véhicule (VIN, 17 caractères au plus) ; null si absent.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 17
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "description": "Nom d’usage donné par l’agence (ex. « 208 blanche ») ; null si absent.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "brand": {
            "description": "Marque (ex. Peugeot).",
            "type": "string",
            "maxLength": 50
          },
          "model": {
            "description": "Modèle (ex. 208).",
            "type": "string",
            "maxLength": 50
          },
          "description": {
            "description": "Description libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ]
          },
          "color": {
            "description": "Couleur, en texte libre ; null si absente.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "vehicleType": {
            "description": "Type de véhicule : il fixe la famille et les champs applicables.",
            "type": "string",
            "enum": [
              "CITY",
              "COMPACT",
              "CROSSOVER",
              "SEDAN",
              "BREAK",
              "SUV",
              "OFF_ROAD",
              "PICKUP",
              "MINIVAN",
              "VAN",
              "UTILITY",
              "COUPE",
              "CONVERTIBLE",
              "SPORT",
              "LUXURY",
              "MOTORCYCLE",
              "SCOOTER"
            ]
          },
          "family": {
            "description": "Famille, déduite de `vehicleType`.",
            "type": "string",
            "enum": [
              "CAR",
              "TWO_WHEELER"
            ]
          },
          "energy": {
            "description": "Énergie, déduite de `fuelType`.",
            "type": "string",
            "enum": [
              "FUEL",
              "ELECTRIC"
            ]
          },
          "fuelType": {
            "description": "Carburant ou motorisation : il fixe l’énergie et les champs applicables.",
            "type": "string",
            "enum": [
              "PETROL",
              "DIESEL",
              "LPG",
              "HYBRID",
              "PLUGIN_HYBRID",
              "ELECTRIC"
            ]
          },
          "transmission": {
            "description": "Boîte de vitesses ; null si non applicable au profil (deux-roues électrique).",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "MANUAL",
                  "AUTOMATIC"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "seats": {
            "description": "Nombre de places : 1 à 50 pour une voiture, 1 à 3 pour un deux-roues.",
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "doors": {
            "description": "Nombre de portes ; null pour un deux-roues.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 2,
                "maximum": 10
              },
              {
                "type": "null"
              }
            ]
          },
          "modelYear": {
            "description": "Année modèle ; null si inconnue.",
            "anyOf": [
              {
                "minimum": 1900,
                "maximum": 2100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "registrationDate": {
            "description": "Date de première immatriculation (`YYYY-MM-DD`), jamais dans le futur ; null si inconnue.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10"
                ],
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ]
          },
          "odometerKm": {
            "minimum": 0,
            "maximum": 10000000,
            "description": "Kilométrage au compteur, en km.",
            "type": "integer"
          },
          "powerKw": {
            "description": "Puissance en kW ; null si inconnue. Un thermique va jusqu’à 1471 kW (2000 ch), un électrique jusqu’à 2000 kW.",
            "anyOf": [
              {
                "minimum": 0,
                "maximum": 2000,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "fuelCapacityLiters": {
            "description": "Capacité du réservoir, en litres ; null pour un électrique ou si inconnue.",
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 500,
                "description": "Au plus 1 décimale."
              },
              {
                "type": "null"
              }
            ]
          },
          "batteryCapacityKwh": {
            "description": "Capacité de la batterie de traction, en kWh ; null si non applicable ou inconnue.",
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 300,
                "description": "Au plus 2 décimales."
              },
              {
                "type": "null"
              }
            ]
          },
          "rangeKm": {
            "description": "Autonomie électrique, en km ; null si non applicable ou inconnue.",
            "anyOf": [
              {
                "minimum": 0,
                "maximum": 2000,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "chargePortType": {
            "description": "Prise de recharge ; null si non applicable ou inconnue.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "TYPE_1",
                  "TYPE_2",
                  "CCS",
                  "CHADEMO",
                  "DC",
                  "DOMESTIC"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "equipment": {
            "description": "Équipements présents, parmi ceux de la famille et de l’énergie du véhicule.",
            "maxItems": 40,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "AIR_CONDITIONING",
                "HEATED_SEATS",
                "LEATHER_SEATS",
                "KEYLESS_START",
                "ELECTRIC_TRUNK",
                "CONVERTIBLE_ROOF",
                "SUNROOF",
                "PANORAMIC_ROOF",
                "GPS",
                "BLUETOOTH",
                "CARPLAY",
                "ANDROID_AUTO",
                "WIRELESS_CHARGING",
                "ABS",
                "ESP",
                "CRUISE_CONTROL",
                "ADAPTIVE_CRUISE_CONTROL",
                "BLIND_SPOT_MONITOR",
                "PARKING_SENSORS",
                "REAR_CAMERA",
                "PARKING_ASSIST",
                "DASHCAM",
                "TURBO",
                "POWER_STEERING",
                "START_STOP",
                "ADBLUE",
                "TOW_BAR",
                "TOP_CASE",
                "WINDSHIELD",
                "HEATED_GRIPS",
                "USB_PORT",
                "TRACTION_CONTROL",
                "ANTI_THEFT_ALARM",
                "REMOVABLE_BATTERY",
                "SPARE_BATTERY"
              ]
            }
          },
          "categoryId": {
            "description": "Catégorie tarifaire (`GET /categories/{categoryId}`) ; null : véhicule sans prix, non réservable (`NO_PRICING_CATEGORY`).",
            "anyOf": [
              {
                "examples": [
                  "7c9e6679-7425-40de-944b-e07fc1f90ae7"
                ],
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "description": "`BREAKDOWN` : véhicule en panne, non réservable. `OPERATIONAL` sinon, location en cours comprise.",
            "type": "string",
            "enum": [
              "OPERATIONAL",
              "BREAKDOWN"
            ]
          },
          "isActive": {
            "description": "false : véhicule mis hors service par l’agence, non réservable (`INACTIVE`).",
            "type": "boolean"
          },
          "isArchived": {
            "description": "true : véhicule archivé, sorti de la flotte et non modifiable.",
            "type": "boolean"
          },
          "isBookable": {
            "description": "true si `notBookableReasons` est vide. Ne dit rien de l’occupation sur une période : voir `GET /availability`.",
            "type": "boolean"
          },
          "notBookableReasons": {
            "description": "Raisons durables qui empêchent toute réservation ; `MAINTENANCE_OVERDUE` : entretien ou contrôle technique en retard, quand l’agence bloque les réservations sur ce retard.",
            "maxItems": 5,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "INACTIVE",
                "ARCHIVED",
                "BREAKDOWN",
                "MAINTENANCE_OVERDUE",
                "NO_PRICING_CATEGORY"
              ]
            }
          },
          "isMaintenanceTracked": {
            "description": "true une fois le suivi d’entretien démarré (`maintenanceTrackingMode`) ; il ne s’arrête plus.",
            "type": "boolean"
          },
          "maintenanceTrackingMode": {
            "description": "Mode de démarrage du suivi d’entretien, définitif une fois posé ; null : suivi non démarré. `FROM_ZERO` (véhicule neuf ou sans historique fiable) et `MANUAL_HISTORY` (historique saisi par `POST /maintenance-records`) comptent les échéances depuis 0 km et la première immatriculation ; `ASSUME_UP_TO_DATE` tient le véhicule pour à jour à son entrée en flotte (kilométrage et date de ce jour).",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "FROM_ZERO",
                  "ASSUME_UP_TO_DATE",
                  "MANUAL_HISTORY"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "displayOrder": {
            "description": "Rang d’affichage choisi dans Lexio ; ordre de la liste.",
            "type": "integer"
          },
          "imageUrls": {
            "description": "Photos de présentation, URL publiques stables, dans l’ordre choisi dans Lexio.",
            "maxItems": 30,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "createdAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Création, heure de l’agence avec décalage.",
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "examples": [
              "2026-11-10T10:00:00+01:00"
            ],
            "description": "Dernière modification.",
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "plate",
          "serialNumber",
          "vin",
          "name",
          "brand",
          "model",
          "description",
          "color",
          "vehicleType",
          "family",
          "energy",
          "fuelType",
          "transmission",
          "seats",
          "doors",
          "modelYear",
          "registrationDate",
          "odometerKm",
          "powerKw",
          "fuelCapacityLiters",
          "batteryCapacityKwh",
          "rangeKm",
          "chargePortType",
          "equipment",
          "categoryId",
          "status",
          "isActive",
          "isArchived",
          "isBookable",
          "notBookableReasons",
          "isMaintenanceTracked",
          "maintenanceTrackingMode",
          "displayOrder",
          "imageUrls",
          "createdAt",
          "updatedAt"
        ]
      },
      "MaintenanceTrackingAlreadyStartedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/maintenance-tracking-already-started"
          },
          "title": {
            "type": "string",
            "const": "Suivi d’entretien déjà démarré"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "MAINTENANCE_TRACKING_ALREADY_STARTED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          },
          "maintenanceTrackingMode": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "FROM_ZERO",
                  "ASSUME_UP_TO_DATE",
                  "MANUAL_HISTORY"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId",
          "maintenanceTrackingMode"
        ]
      },
      "VehicleArchivedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/vehicle-archived"
          },
          "title": {
            "type": "string",
            "const": "Véhicule archivé"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "VEHICLE_ARCHIVED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      },
      "MaintenanceAlert": {
        "examples": [
          {
            "operationCode": "OIL_CHANGE",
            "status": "OK",
            "isBlockingRentals": false,
            "kmInterval": 15000,
            "monthInterval": 12,
            "hasHistory": true,
            "lastServiceDate": "2026-11-05",
            "lastServiceOdometerKm": 18450,
            "dueOdometerKm": 33450,
            "dueDate": "2027-11-05",
            "remainingKm": 15000,
            "remainingDays": 364
          }
        ],
        "type": "object",
        "properties": {
          "operationCode": {
            "description": "Opération concernée (`GET /maintenance-operations`).",
            "type": "string",
            "minLength": 1
          },
          "status": {
            "description": "`OVERDUE` : `remainingKm` ou `remainingDays` négatif. `UPCOMING` : moins de 1000 km ou de 30 jours restants. `OK` sinon.",
            "type": "string",
            "enum": [
              "OVERDUE",
              "UPCOMING",
              "OK"
            ]
          },
          "isBlockingRentals": {
            "description": "true si cette opération, en retard, rend le véhicule non réservable (selon le réglage de blocage de l’agence) ; aussi sur `CT_INSPECTION` quand un contrôle technique échoué attend sa contre-visite.",
            "type": "boolean"
          },
          "kmInterval": {
            "description": "Intervalle effectif pour ce véhicule, en km ; null : pas d’échéance kilométrique.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "monthInterval": {
            "description": "Intervalle effectif pour ce véhicule, en mois ; null : pas d’échéance de date.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "hasHistory": {
            "description": "false : aucune intervention enregistrée, l’échéance part du début du suivi.",
            "type": "boolean"
          },
          "lastServiceDate": {
            "description": "Jour de la dernière intervention enregistrée ; null sans historique.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10"
                ],
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ]
          },
          "lastServiceOdometerKm": {
            "description": "Kilométrage de la dernière intervention ; null sans historique.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "dueOdometerKm": {
            "description": "Kilométrage d’échéance ; null sans intervalle en km.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "dueDate": {
            "description": "Jour d’échéance ; null sans intervalle en mois.",
            "anyOf": [
              {
                "examples": [
                  "2026-11-10"
                ],
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ]
          },
          "remainingKm": {
            "description": "Kilomètres restants depuis le compteur actuel ; négatif : échéance dépassée.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "remainingDays": {
            "description": "Jours restants ; négatif : échéance dépassée.",
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "operationCode",
          "status",
          "isBlockingRentals",
          "kmInterval",
          "monthInterval",
          "hasHistory",
          "lastServiceDate",
          "lastServiceOdometerKm",
          "dueOdometerKm",
          "dueDate",
          "remainingKm",
          "remainingDays"
        ]
      },
      "MaintenanceTrackingNotStartedProblem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "https://api.lexio.rent/errors/maintenance-tracking-not-started"
          },
          "title": {
            "type": "string",
            "const": "Suivi d’entretien non démarré"
          },
          "status": {
            "type": "number",
            "const": 409
          },
          "code": {
            "type": "string",
            "const": "MAINTENANCE_TRACKING_NOT_STARTED"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "requestId"
        ]
      }
    },
    "parameters": {
      "IdempotencyKey": {
        "name": "Idempotency-Key",
        "in": "header",
        "required": false,
        "example": "8b3e1d2c-4a5f-4c6b-9e7d-1f2a3b4c5d6e",
        "description": "Clé unique de l’opération, réutilisée à chaque nouvel essai : un rejeu avec la même clé et le même corps renvoie la réponse initiale sans rien réécrire. Voir [Idempotence](https://docs.lexio.rent/idempotence).",
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "pattern": "^[\\x20-\\x7E]+$",
          "examples": [
            "8b3e1d2c-4a5f-4c6b-9e7d-1f2a3b4c5d6e"
          ]
        }
      },
      "IdempotencyKeyRequired": {
        "name": "Idempotency-Key",
        "in": "header",
        "required": true,
        "example": "8b3e1d2c-4a5f-4c6b-9e7d-1f2a3b4c5d6e",
        "description": "Clé unique de l’opération, réutilisée à chaque nouvel essai : un rejeu avec la même clé et le même corps renvoie la réponse initiale sans rien réécrire. Voir [Idempotence](https://docs.lexio.rent/idempotence). Facultative avec `?dryRun=true` sur les opérations qui l’acceptent.",
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "pattern": "^[\\x20-\\x7E]+$",
          "examples": [
            "8b3e1d2c-4a5f-4c6b-9e7d-1f2a3b4c5d6e"
          ]
        }
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "lck_…",
        "description": "Clé API `lck_…` créée dans Lexio (Paramètres → Développeur), envoyée en `Authorization: Bearer`. Voir [Authentification](https://docs.lexio.rent/authentification)."
      }
    },
    "headers": {
      "XRequestId": {
        "description": "Identifiant de la requête, à communiquer au support.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimitLimit": {
        "description": "Plafond du seau de débit qui s’applique à la requête.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "RateLimitRemaining": {
        "description": "Requêtes encore permises dans la fenêtre en cours.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "RateLimitReset": {
        "description": "Secondes avant la remise à zéro de la fenêtre.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "RetryAfter": {
        "description": "Secondes à attendre avant de rejouer la requête.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "Location": {
        "description": "Chemin absolu de la ressource créée sur l’hôte de l’API, préfixe `/api/external/v1` compris.",
        "schema": {
          "type": "string"
        }
      },
      "IdempotentReplayed": {
        "description": "`true` quand la réponse est le rejeu d’une requête déjà traitée avec la même `Idempotency-Key`.",
        "schema": {
          "type": "string",
          "enum": [
            "true"
          ]
        }
      },
      "WwwAuthenticate": {
        "description": "Schéma d’authentification attendu (`Bearer`), avec `error=\"invalid_token\"` pour une clé refusée.",
        "schema": {
          "type": "string"
        }
      }
    }
  }
}
