Idempotency-Key
Une écriture peut réussir alors que sa réponse se perd en route. Envoyez uneIdempotency-Key pour pouvoir la renvoyer sans risque de doublon.
- Obligatoire sur les écritures d’une location : création, modification, suppression, actions (annulation, départ, retour, report, changements, options) et paiements. Absente, la requête répond
400. Facultative sur toutes les autres écritures, photos comprises. - Sur une opération qui accepte
?dryRun=true, l’aperçu n’exige pas de clé : il n’écrit rien. - Valeur : 1 à 255 caractères imprimables, unique par opération (un UUID, par exemple), réutilisée à l’identique pour chaque renvoi de cette opération. Portée : votre clé API, la méthode et le chemin. Durée : 24 h.
- Même clé, même corps : la réponse d’origine est renvoyée à l’identique, avec l’en-tête
Idempotent-Replayed: true. - Même clé, corps différent :
422 IDEMPOTENCY_KEY_REUSED. - Même clé, requête encore en cours :
409 IDEMPOTENCY_IN_FLIGHTavecRetry-After; renvoyez après le délai. - Seul un succès (
2xx) est mémorisé. Après un refus survenu avant toute écriture, la même clé exécute de nouveau l’opération. - Écriture faite, réponse perdue : sur les opérations qui déclarent
IDEMPOTENCY_ALREADY_APPLIED(création de devis et de location, actions sur une location, paiements, enregistrement d’un entretien, suppression d’une photo), une écriture enregistrée dont la réponse a échoué (5xx) garde sa clé. Un renvoi répond409 IDEMPOTENCY_ALREADY_APPLIEDavecresourceId, et l’en-têteLocationquand la ressource se relit par unGET. Ne renvoyez pas : relisez la ressource. Sur les autres écritures, relisez la ressource avant de renvoyer après un5xx.
POST /rentals/{rentalId}/photo-uploads) et l’enregistrement des photos déposées (POST /rentals/{rentalId}/photos) ne sont pas mémorisés par l’Idempotency-Key : un renvoi exécute de nouveau l’opération, et l’enregistrement se reconnaît par son uploadId.
Que renvoyer
Numéro de commande
partnerReference est votre numéro de commande : unique par code partenaire, ce n’est pas un mécanisme de renvoi. Un doublon répond 409 ALREADY_EXISTS (field, conflictingId). N’y mettez jamais un identifiant de paiement : une réservation a sa propre identité, indépendante de son paiement.
Aperçu avant écriture
?dryRun=true exécute l’action jusqu’au bout puis l’annule : la réponse est celle de l’appel réel, y compris effects.priceChange et effects.overpayment, et rien n’est enregistré. Les actions qui l’acceptent sont marquées dans la référence.
- Une action qui modifie le prix accepte
expectedTotalTTC. Passez-yeffects.priceChange.newTotalTTCde l’aperçu (outotalTTCde la location sipriceChangeest nul) : si le total recalculé s’en écarte d’une unité mineure ou plus, l’action répond409 PRICE_CHANGEDsans rien écrire. SansexpectedTotalTTC, elle s’applique au prix du moment. - Une modification qui ferait passer le total sous le montant déjà encaissé exige
overpaymentResolution(REFUND_PENDINGouNO_REFUND, scopepayments.refund) ; sinon409 OVERPAYMENT_RESOLUTION_REQUIRED. Une clé partenaire reçoitresolvableByKey: false: le loueur traite la baisse dans Lexio.