Une clé par loueur
Il n’existe pas de clé multi-loueurs : chaque loueur crée la vôtre dans Lexio, avec votre code partenaire (partnerCode), et vous la transmet. Vérifiez-la par GET /organization : devise, fuseau, TVA, horaires d’ouverture, règles de réservation et scopes de la clé.
Le code partenaire délimite votre espace chez le loueur :
- vos locations, devis, fiches clients et événements portent ce code ; ceux du loueur ou d’un autre partenaire vous restent invisibles. Hors de votre espace, une location répond
404, comme un identifiant inconnu ; - les créneaux des autres locations n’apparaissent que comme des plages anonymes ;
partnerReferenceest unique dans votre espace : deux partenaires peuvent utiliser la même référence ;- un devis ne se consomme que par une clé du même code partenaire.
Réserver
GET /availability: véhicules réservables et prix sur la période, dans les horaires et règles de réservation du loueur (422 BOOKING_RULE_VIOLATION). Rien n’est garanti.POST /quotes: prix garanti 24 h (expiresAt), consommable une fois. Le véhicule n’est pas bloqué.POST /rentalsavecquoteId,partnerReference(votre numéro de commande),customer(le titulaire) et uneIdempotency-Key. Disponibilité et prix sont revérifiés :409 VEHICLE_UNAVAILABLEou409 PRICE_CHANGED, et rien n’est créé.- Lisez le total dans
totalTTCet le reste à payer dansbalance.dueAmount.
effects.customerResolution: MATCHED), sa fiche est reprise telle quelle : seuls ses champs vides sont complétés (nom, téléphone ou date de naissance déjà renseignés ne sont jamais remplacés) et l’âge du conducteur se juge sur la date de la fiche ; relisez data.customer. Sinon, une fiche est créée (CREATED). Un client bloqué par le loueur donne 409 BOOKING_REFUSED, sans cause.
Pour retrouver une location : GET /rentals?partnerReference=… ou GET /rentals?number=… (numéro Lexio).
Une clé partenaire n’envoie jamais d’email de confirmation au client final ; le loueur est prévenu de chaque création.
Encaisser le paiement
Le paiement en ligne s’encaisse sur le compte Stripe du loueur, connecté à Lexio. Lexio ne crée aucun paiement pour vous et ne publie pas l’identifiant de ce compte : une clé partenaire ne fait qu’enregistrer un paiement déjà encaissé. Qui crée le PaymentIntent. Lexio ne le lit que sur le compte Stripe du loueur (créé sur le vôtre :PI_NOT_FOUND). Il est donc créé par le loueur, via sa propre intégration Stripe, ou par votre plateforme si Stripe vous donne accès à ce compte (par exemple si le loueur le connecte aussi à votre plateforme Stripe Connect, en-tête Stripe-Account) : une voie qui relève de Stripe et d’un accord avec le loueur, que Lexio n’organise pas et n’a pas validée. Sans cet accès, le loueur encaisse et enregistre le paiement dans Lexio ; vous suivez balance par les événements.
Pour être enregistré, le PaymentIntent doit être :
succeeded, dans la devise de la location (currency) ;- d’un montant encaissé au plus égal au reste à payer (
balance.dueAmount, prélèvement SEPA en cours déduit). Au-delà,422 PAYMENT_EXCEEDS_DUEet rien n’est enregistré, alors que l’argent est encaissé chez Stripe : créez-le pour le reste à payer, pas plus. Un montant inférieur est enregistré, le reste demeure dû ; - rattaché à la location par sa metadata :
rentalIdégal à l’idde la location, à défautpartnerCodeégal au vôtre ; une metadata qui désigne une autre organisation est refusée ; - utilisé pour une seule location.
amount est le montant encaissé exact (amount_received), en unités majeures. La date du paiement est celle de création du PaymentIntent (paidAt refusé) ; notes est réservé à l’équipe du loueur. Lexio relit le PaymentIntent chez Stripe avant d’écrire :
- déjà enregistré sur la même location :
409 ALREADY_EXISTS; - Stripe indisponible :
503 SERVICE_UNAVAILABLE, à renvoyer avec la mêmeIdempotency-Key; - refusé :
422 PAYMENT_NOT_VERIFIED, dontreasondonne la cause :
Modifier, annuler, rembourser
- Suivez les changements par
GET /events, puis relisez la location (Synchronisation par événements). - Période :
reschedule; véhicule :change-vehicle. Aperçu par?dryRun=true, puis appel réel ancré parexpectedTotalTTC(Idempotence et reprise). Un total qui passe sous l’encaissé répond409 OVERPAYMENT_RESOLUTION_REQUIRED(resolvableByKey: false) : le loueur traite la baisse dans Lexio. PATCH /rentals/{rentalId}ne modifie que les notes et les lieux.- Annulez par
POST /rentals/{rentalId}/cancelavec unreason.effects.cancellation.refundDueAmountdonne la somme à rendre au client (l’API ne retient aucun frais) ;nullsi la location a été annulée hors de l’API, le loueur fixant alors le remboursement. - Remboursement. Une clé partenaire ne rembourse pas. Un paiement Stripe se rembourse chez Stripe, sur le compte du loueur ; Lexio l’enregistre à réception de l’événement Stripe (sauf saisie manuelle préalable par l’équipe du loueur) et la location émet un
rental.updated: suivezbalance.paidAmount.
Tester
Pas de bac à sable : demandez une organisation de test à contact@lexio.rent et prévisualisez les actions par?dryRun=true. Une location de test se termine par une annulation ; elle et sa fiche client restent visibles chez le loueur.