API standard
Vos cautions, pilotées depuis votre logiciel
PMS, channel manager, outil de conciergerie : l'API Kauti crée la caution au moment de la réservation, suit le locataire jusqu'à l'enregistrement de sa carte, et vous laisse encaisser ou libérer sans ouvrir l'interface Kauti.
Créer une caution
Montant, dates, locataire : Kauti renvoie le lien sécurisé où il enregistre sa carte.
Envoyer le lien vous-même
Kauti envoie l'e-mail au locataire, ou vous le laisse : le lien est dans la réponse.
Bloquer le montant
En option, à la création : Kauti réserve le montant sur la carte au début de la location.
Encaisser en cas de dommage
Déclarez l'incident et son montant, puis encaissez tout ou partie de la caution.
Annuler ou libérer
Annulez une caution, ou libérez le montant bloqué avant la date prévue.
Demander un paiement
Solde, ménage, frais : le locataire paie par carte, vous remboursez si besoin.
Être prévenu
Une notification signée à chaque changement de statut, vers votre serveur.
Comment ça marche
- 1
Créez une clé
Depuis Compte › API. Une clé par logiciel connecté.
- 2
Créez la caution
À la réservation, votre logiciel appelle POST /deposits. Le locataire reçoit le lien et enregistre sa carte, sans être débité.
- 3
Suivez-la
Kauti prévient votre serveur à chaque étape. Vous encaissez ou libérez par un appel, ou laissez la libération automatique faire.
Une caution créée par l'API suit exactement les mêmes règles qu'une caution créée dans l'interface : même page pour le locataire, mêmes e-mails, même libération automatique, même facturation. Elle apparaît aussi dans votre tableau de bord.
Démarrage rapide
Toutes les requêtes passent par https://www.kauti.fr/api/v1, en HTTPS, avec la clé dans l'en-tête Authorization. Les montants sont en centimes, les dates au format AAAA-MM-JJ, les heures en HH:MM, à l'heure locale du compte. Une location couvre 90 jours au plus entre start_date et end_date, et start_date tombe entre hier et 365 jours après aujourd'hui.
curl https://www.kauti.fr/api/v1/deposits \
-H "Authorization: Bearer kauti_sk_..." \
-H "Content-Type: application/json" \
-d '{
"amount": 50000,
"guest": { "email": "locataire@exemple.fr", "phone": "+33612345678" },
"rental": {
"start_date": "2026-11-12", "start_time": "16:00",
"end_date": "2026-11-19", "end_time": "10:00",
"reference": "BOOKING-4123456789"
},
"external_id": "resa-8812",
"send_email": true
}'La réponse décrit la caution. Avec "send_email": false, Kauti n'écrit pas au locataire : envoyez-lui vous-même checkout_url, par SMS ou dans votre propre message de confirmation. external_id, facultatif, est votre identifiant de réservation : une seconde création avec le même renvoie une erreur au lieu d'une caution en double.
{
"object": "deposit",
"id": "5b0d9c3e-8f1a-4b8e-9d3a-2f6c1e7a4b90",
"external_id": "resa-8812",
"status": "pending_guest",
"amount": 50000,
"currency": "eur",
"guest": { "email": "locataire@exemple.fr", "phone": "+33612345678", "email_bounced": false },
"rental": {
"reference": "BOOKING-4123456789",
"start_date": "2026-11-12", "start_time": "16:00",
"end_date": "2026-11-19", "end_time": "10:00"
},
"checkout_url": "https://www.kauti.fr/c/…",
"card_saved": false,
"terms_accepted_at": null,
"authorized_amount": 0,
"authorized_at": null,
"authorization_expires_at": null,
"automatic_release_at": "2026-11-21T09:00:00.000Z",
"incident": null,
"captured_amount": 0,
"captured_at": null,
"released_at": null,
"source": "api",
"created_at": "2026-10-02T09:12:44.381Z",
"updated_at": "2026-10-02T09:12:44.381Z"
}Pour essayer sans rien engager : une caution annulée avant que le locataire ait enregistré sa carte ne compte pas dans votre forfait.
Points d’accès
| Méthode | Chemin | Rôle |
|---|---|---|
| GET | /account | Le compte auquel la clé donne accès. |
| POST | /deposits | Crée une caution et, par défaut, envoie la demande de carte au locataire. |
| GET | /deposits | Liste les cautions, les plus récentes d'abord. Filtres : status, external_id, limit, page. |
| GET | /deposits/{id} | Une caution. |
| POST | /deposits/{id}/resend | Renvoie la demande de carte, à une adresse corrigée si guest_email est fourni. |
| POST | /deposits/{id}/incident | Déclare un dommage : amount (centimes) et description. |
| POST | /deposits/{id}/capture | Encaisse le montant de l'incident déclaré. |
| POST | /deposits/{id}/cancel | Annule la caution, ou libère le montant bloqué. |
| POST | /payments | Demande un paiement : amount (centimes), description, guest.email. Envoie le lien par défaut. |
| GET | /payments | Liste les paiements, les plus récents d'abord. Filtres : status, external_id, limit, page. |
| GET | /payments/{id} | Un paiement. |
| POST | /payments/{id}/resend | Renvoie la demande de paiement, à une adresse corrigée si guest_email est fourni. |
| POST | /payments/{id}/cancel | Annule une demande pas encore payée. |
| POST | /payments/{id}/refund | Rembourse le paiement : amount (centimes) pour une partie, sans amount pour le reste. |
Les opérations sur une caution renvoient la caution telle qu'elle est après coup : c'est son statut qui dit si un encaissement a abouti. L'encaissement d'un incident se fait dans les 48 heures qui suivent sa déclaration. Le blocage se choisit à la création, avec "hold": true : Kauti le pose de lui-même au début de la location, ou dès l'enregistrement de la carte si elle a déjà commencé. Il ne peut pas être ajouté ensuite à une caution créée sans. La banque fixe son échéance, renvoyée dans authorization_expires_at (sept jours en général) ; si elle tombe avant la libération, le montant n'est garanti que jusque-là, et la carte reste enregistrée jusqu'à la libération.
Statuts d’une caution
| Statut | Signification |
|---|---|
| pending_guest | En attente du locataire : il n'a pas encore enregistré sa carte. |
| card_saved | Carte enregistrée, rien n'est bloqué. |
| authorization_processing | Blocage en cours chez Stripe. |
| authorized | Montant bloqué sur la carte. |
| authorization_failed | La banque a refusé le blocage. |
| incident_reported | Incident déclaré : à encaisser dans les 48 heures. |
| captured | Montant encaissé. Caution close. |
| released | Montant libéré. Caution close. |
| cancelled | Caution annulée. Caution close. |
Paiements
Un paiement est une somme que votre locataire règle une fois, par carte, sur votre compte Stripe : solde du séjour, ménage, frais. Les notifications portent data.payment au lieu de data.deposit. Commission Kauti : 0,5 % + 0,50 € HT par paiement réglé, 2,00 € HT minimum, sur votre facture Kauti ; les frais Stripe sont déduits du paiement. Un remboursement ne rend ni l'une ni les autres.
| Statut | Signification |
|---|---|
| pending | En attente : le locataire n'a pas encore payé. payment_url est le lien de paiement. |
| paid | Payé. kauti_fee est la commission hors taxes portée sur votre facture Kauti. |
| partially_refunded | Remboursé en partie : refunded_amount dit combien. |
| refunded | Remboursé en totalité. |
| cancelled | Demande annulée avant paiement. |
Notifications
Renseignez une adresse HTTPS dans Compte › API. À chaque changement de statut, Kauti y envoie un POST JSON : { id, object: "event", type, created_at, data: { deposit } }. Le journal des derniers envois, avec la réponse de votre serveur, est visible au même endroit.
| Événement | Quand |
|---|---|
| deposit.created | Caution créée. |
| deposit.card_saved | Le locataire a enregistré sa carte. |
| deposit.authorized | Le montant est bloqué. |
| deposit.authorization_failed | Le blocage a été refusé. |
| deposit.incident_reported | Un incident a été déclaré. |
| deposit.captured | Le montant de l'incident a été encaissé. |
| deposit.released | Le montant a été libéré. |
| deposit.cancelled | La caution a été annulée. |
| payment.created | Paiement demandé. |
| payment.paid | Le locataire a payé. |
| payment.refunded | Un remboursement a été fait, depuis Kauti ou depuis Stripe. |
| payment.cancelled | La demande de paiement a été annulée. |
Chaque envoi est signé. L'en-tête Kauti-Signature vaut t=<horodatage>,v1=<signature>, où la signature est le HMAC-SHA256, en hexadécimal, de <horodatage>.<corps brut> avec le secret affiché dans Compte › API. Rejetez tout envoi dont la signature ne correspond pas ou dont l'horodatage a plus de cinq minutes.
import crypto from "node:crypto";
// rawBody : le corps de la requête tel que reçu, sans le reformater.
function verifyKautiSignature(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((part) => part.split("=")));
const expected = crypto
.createHmac("sha256", secret)
.update(`${parts.t}.${rawBody}`)
.digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}Erreurs
Une erreur répond { "error": { "code", "message" } } : le code est stable, à utiliser dans votre programme ; le message, en français, s'adresse à un humain.
| HTTP | Code | Cause |
|---|---|---|
| 401 | unauthorized | Clé absente, mal formée, inconnue ou révoquée. |
| 402 | account_suspended | Une facture Kauti est impayée : la création de cautions est suspendue. |
| 403 | plan_required | Le compte n'a pas de forfait payant. |
| 403 | forbidden | Opération indisponible avec cette clé : les paiements demandent une clé de compte. |
| 404 | not_found | La caution n'existe pas, ou appartient à un autre compte. |
| 409 | invalid_state | L'opération est impossible dans le statut actuel de la caution. |
| 409 | duplicate_external_id | Une caution existe déjà avec cet external_id. |
| 422 | invalid_request | Corps ou paramètres invalides ; details indique le champ en cause. |
| 500 | server_error | Erreur de notre côté. Réessayez, ou écrivez au support. |
Sécurité
Des clés révocables
Kauti ne conserve que l'empreinte de chaque clé : elle n'est affichée qu'une fois, à sa création. Une clé se révoque d'un clic.
Réservées au propriétaire
Seul le propriétaire du compte crée et révoque les clés et règle les notifications.
Aucune carte dans l'API
L'API ne voit jamais une carte bancaire : le locataire la saisit chez Stripe, sur la page de caution.
Vous éditez un logiciel ?
L'API en marque blanche
PMS, outil de conciergerie, channel manager : proposez la caution à tous vos clients, sous votre marque, avec une seule clé pour votre logiciel. Chaque client vous autorise depuis son compte Kauti.
Découvrir la marque blanche