{"openapi":"3.1.0","info":{"title":"FedCheckout API","version":"1.0.0","description":"L'infrastructure de paiement de Fed Digital. Crée un Payment Intent depuis ton serveur, envoie le client sur le Hosted Checkout, et laisse le webhook signé débloquer la commande. La clé secrète ne quitte jamais ton backend.","contact":{"name":"FedCheckout","url":"https://checkout.fedtopup.com/docs"}},"servers":[{"url":"https://checkout.fedtopup.com/api/v1"}],"components":{"securitySchemes":{"cleSecrete":{"type":"http","scheme":"bearer","description":"Authorization: Bearer fco_live_… (ou fco_test_… en mode test). Serveur uniquement."}},"schemas":{"PaymentIntent":{"type":"object","properties":{"id":{"type":"string","example":"fpay_pi_8K2M0V7QWZ3R5T1Y9X2B4N6M"},"object":{"type":"string","example":"payment_intent"},"mode":{"type":"string","enum":["test","live"]},"status":{"type":"string","enum":["requires_payment_method","requires_action","processing","provider_pending","provider_unknown","succeeded","failed","cancelled","expired","refunding","partially_refunded","refunded","disputed"]},"amount":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_captured":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_refunded":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"currency":{"type":"string","enum":["GDS","USD"]},"description":{"type":"string","nullable":true},"external_reference":{"type":"string","nullable":true},"payment_method":{"type":"string","nullable":true},"checkout_url":{"type":"string","nullable":true},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"succeeded_at":{"type":"string","format":"date-time","nullable":true}}},"Erreur":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}},"security":[{"cleSecrete":[]}],"paths":{"/payment_intents":{"post":{"summary":"Créer un paiement","parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string","minLength":8,"maxLength":64},"description":"Rejouer la même requête avec la même clé rend le même objet, sans second débit."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"currency":{"type":"string","enum":["GDS","USD"]},"description":{"type":"string","maxLength":300},"external_reference":{"type":"string"},"customer_reference":{"type":"string"},"customer_email":{"type":"string","format":"email"},"return_url":{"type":"string","format":"uri"},"cancel_url":{"type":"string","format":"uri"},"capture_method":{"type":"string","enum":["automatic","manual"]},"allowed_payment_methods":{"type":"array","items":{"type":"string"}},"expires_in_minutes":{"type":"integer","minimum":5,"maximum":10080},"metadata":{"type":"object","additionalProperties":true}}}}}},"responses":{"201":{"description":"Paiement créé.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"fpay_pi_8K2M0V7QWZ3R5T1Y9X2B4N6M"},"object":{"type":"string","example":"payment_intent"},"mode":{"type":"string","enum":["test","live"]},"status":{"type":"string","enum":["requires_payment_method","requires_action","processing","provider_pending","provider_unknown","succeeded","failed","cancelled","expired","refunding","partially_refunded","refunded","disputed"]},"amount":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_captured":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_refunded":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"currency":{"type":"string","enum":["GDS","USD"]},"description":{"type":"string","nullable":true},"external_reference":{"type":"string","nullable":true},"payment_method":{"type":"string","nullable":true},"checkout_url":{"type":"string","nullable":true},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"succeeded_at":{"type":"string","format":"date-time","nullable":true}}}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}},"get":{"summary":"Lister les paiements","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Les derniers paiements.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"fpay_pi_8K2M0V7QWZ3R5T1Y9X2B4N6M"},"object":{"type":"string","example":"payment_intent"},"mode":{"type":"string","enum":["test","live"]},"status":{"type":"string","enum":["requires_payment_method","requires_action","processing","provider_pending","provider_unknown","succeeded","failed","cancelled","expired","refunding","partially_refunded","refunded","disputed"]},"amount":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_captured":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_refunded":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"currency":{"type":"string","enum":["GDS","USD"]},"description":{"type":"string","nullable":true},"external_reference":{"type":"string","nullable":true},"payment_method":{"type":"string","nullable":true},"checkout_url":{"type":"string","nullable":true},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"succeeded_at":{"type":"string","format":"date-time","nullable":true}}}}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/payment_intents/{id}":{"get":{"summary":"Lire l'état autoritatif d'un paiement","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Le paiement.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"fpay_pi_8K2M0V7QWZ3R5T1Y9X2B4N6M"},"object":{"type":"string","example":"payment_intent"},"mode":{"type":"string","enum":["test","live"]},"status":{"type":"string","enum":["requires_payment_method","requires_action","processing","provider_pending","provider_unknown","succeeded","failed","cancelled","expired","refunding","partially_refunded","refunded","disputed"]},"amount":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_captured":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_refunded":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"currency":{"type":"string","enum":["GDS","USD"]},"description":{"type":"string","nullable":true},"external_reference":{"type":"string","nullable":true},"payment_method":{"type":"string","nullable":true},"checkout_url":{"type":"string","nullable":true},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"succeeded_at":{"type":"string","format":"date-time","nullable":true}}}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/payment_intents/{id}/cancel":{"post":{"summary":"Annuler un paiement encore annulable","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paiement annulé.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"fpay_pi_8K2M0V7QWZ3R5T1Y9X2B4N6M"},"object":{"type":"string","example":"payment_intent"},"mode":{"type":"string","enum":["test","live"]},"status":{"type":"string","enum":["requires_payment_method","requires_action","processing","provider_pending","provider_unknown","succeeded","failed","cancelled","expired","refunding","partially_refunded","refunded","disputed"]},"amount":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_captured":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_refunded":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"currency":{"type":"string","enum":["GDS","USD"]},"description":{"type":"string","nullable":true},"external_reference":{"type":"string","nullable":true},"payment_method":{"type":"string","nullable":true},"checkout_url":{"type":"string","nullable":true},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"succeeded_at":{"type":"string","format":"date-time","nullable":true}}}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/payment_intents/{id}/capture":{"post":{"summary":"Capturer un paiement réservé (capture manuelle)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paiement capturé.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"fpay_pi_8K2M0V7QWZ3R5T1Y9X2B4N6M"},"object":{"type":"string","example":"payment_intent"},"mode":{"type":"string","enum":["test","live"]},"status":{"type":"string","enum":["requires_payment_method","requires_action","processing","provider_pending","provider_unknown","succeeded","failed","cancelled","expired","refunding","partially_refunded","refunded","disputed"]},"amount":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_captured":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"amount_refunded":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"currency":{"type":"string","enum":["GDS","USD"]},"description":{"type":"string","nullable":true},"external_reference":{"type":"string","nullable":true},"payment_method":{"type":"string","nullable":true},"checkout_url":{"type":"string","nullable":true},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"succeeded_at":{"type":"string","format":"date-time","nullable":true}}}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/refunds":{"post":{"summary":"Rembourser tout ou partie d'un paiement","parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string","minLength":8,"maxLength":64},"description":"Rejouer la même requête avec la même clé rend le même objet, sans second débit.","required":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["payment_intent"],"properties":{"payment_intent":{"type":"string"},"amount":{"type":"string","description":"Absent = le reste remboursable.","example":"500.00"},"reason":{"type":"string","maxLength":200}}}}}},"responses":{"201":{"description":"Remboursement enregistré.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}},"get":{"summary":"Lister les remboursements","responses":{"200":{"description":"Remboursements.","content":{"application/json":{"schema":{"type":"array"}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/refunds/{id}":{"get":{"summary":"Lire un remboursement","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Le remboursement.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/payment_links":{"post":{"summary":"Créer un lien de paiement","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["titre","currency"],"properties":{"titre":{"type":"string","maxLength":80},"description":{"type":"string","maxLength":300},"amount":{"type":"string","description":"Montant décimal en chaîne. Jamais un nombre flottant : deux décimales en GDS, six en USD.","example":"500.00"},"currency":{"type":"string","enum":["GDS","USD"]},"montant_libre":{"type":"boolean"},"max_uses":{"type":"integer","minimum":1},"expires_at":{"type":"string","format":"date-time"},"redirect_url":{"type":"string","format":"uri"}}}}}},"responses":{"201":{"description":"Lien créé.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/payment_methods":{"get":{"summary":"Les moyens réellement disponibles pour ce montant et cette devise","parameters":[{"name":"currency","in":"query","schema":{"type":"string","enum":["GDS","USD"]}},{"name":"amount","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Moyens disponibles.","content":{"application/json":{"schema":{"type":"array"}}}},"400":{"description":"Requête invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"401":{"description":"Clé absente, invalide, révoquée ou expirée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Périmètre insuffisant, application ou marchand fermé.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Objet introuvable.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"409":{"description":"État incompatible avec l'action demandée.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Trop de requêtes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Service momentanément indisponible.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"INSUFFICIENT_FUNDS"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}}}}