{
  "info": {
    "name": "FAYGAW — Refund",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nVérifiez la transaction originale et son environnement avant envoi.\nVerify the original transaction and its environment before sending.\n\nLes reprises automatiques durent au maximum 72 heures après la demande initiale. Un refus de tentative ne rend pas le paiement définitivement non remboursable. Après cette limite, relancez le même Refund avec POST /v1/refunds/{refund_id}/retry et une nouvelle Idempotency-Key : une seule tentative, sans nouveau cycle automatique de 72 heures. Réutilisez la même clé et le même corps après une réponse perdue. HTTP 202 confirme la prise en charge, pas le remboursement ; consultez GET. Un Refund déjà SUCCEEDED ne déclenche aucun nouvel envoi. Aucun nouveau frais FAYGAW ; restitution des montants confirmée seulement par SUCCEEDED. Les montants indiqués ne sont restitués que si status=SUCCEEDED.\nAutomatic retries run for at most 72 hours from the original request. A refused attempt does not make the payment permanently non-refundable. After that limit, retry the same Refund with POST /v1/refunds/{refund_id}/retry and a new Idempotency-Key: one attempt, without opening another automatic 72-hour cycle. Reuse the same key and body after a lost response. HTTP 202 acknowledges acceptance, not completion; use GET. An already SUCCEEDED Refund triggers no new provider send. No new FAYGAW fee; amounts are confirmed returned only at SUCCEEDED. Amounts are returned only when status=SUCCEEDED.\n\nUne indisponibilité ou un délai dépassé pendant la vérification du remboursement ne constitue pas un échec du Refund et ne produit pas refund.failed. Le résultat reste UNKNOWN et les réservations sont conservées tant que la restitution n’est pas confirmée. Les vérifications reprennent automatiquement dans la fenêtre de 72 heures. À son terme, utilisez la relance manuelle du même Refund ; ne créez pas une demande de remplacement. Continuez le suivi par GET et traitez refund.succeeded dès sa confirmation.\nAn unavailable or timed-out refund verification is not a failed Refund and does not emit refund.failed. The result stays UNKNOWN and reservations are retained while restitution remains unconfirmed. Verification resumes automatically within the 72-hour window. After that window, use the same Refund’s manual retry; do not create a replacement request. Keep tracking with GET and process refund.succeeded when confirmed."
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.faygaw.org/v1"
    },
    {
      "key": "api_key",
      "value": "",
      "description": "Clé API à renseigner localement ; ne pas la partager dans un export."
    },
    {
      "key": "expected_environment",
      "value": "SANDBOX",
      "description": "Contrôle de la réponse uniquement ; l’environnement est déterminé par la clé API."
    }
  ],
  "item": [
    {
      "name": "Créer un Refund — refund:write",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/refunds",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{api_key}}"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "example-refund-order-001"
          }
        ],
        "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      },
      "response": [
        {
          "name": "Refund created — processing",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Created",
          "code": 201,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"id\": \"ref_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n  \"object\": \"refund\",\n  \"transaction_id\": \"txn_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n  \"original_transaction_id\": \"txn_cccccccccccccccccccccccccccccccc\",\n  \"checkout_id\": \"co_dddddddddddddddddddddddddddddddd\",\n  \"environment\": \"SANDBOX\",\n  \"livemode\": true,\n  \"status\": \"PROCESSING\",\n  \"refunded_amount\": \"100\",\n  \"refunded_faygaw_partner_fee\": \"1\",\n  \"currency\": \"XOF\",\n  \"provider\": \"WAVE\",\n  \"provider_transaction_id\": null,\n  \"client_reference\": \"REFUND-001\",\n  \"reason\": \"Customer request\",\n  \"created_at\": \"2026-10-31T12:00:00Z\",\n  \"updated_at\": \"2026-10-31T12:00:00Z\",\n  \"completed_at\": null,\n  \"failure_code\": null\n}"
        },
        {
          "name": "invalid-field",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Bad Request",
          "code": 400,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"invalid-field\",\n    \"message\": \"Invalid Refund fields.\",\n    \"request_id\": \"req_refund_example\",\n    \"details\": [\n      {\n        \"field\": \"body\"\n      }\n    ]\n  }\n}"
        },
        {
          "name": "idempotency-key-required",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Bad Request",
          "code": 400,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"idempotency-key-required\",\n    \"message\": \"The request is invalid.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "refund-original-not-found",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Not Found",
          "code": 404,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-original-not-found\",\n    \"message\": \"Refund not found.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "idempotency-conflict",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Conflict",
          "code": 409,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"idempotency-conflict\",\n    \"message\": \"The request conflicts with an existing operation.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "refund-already-exists",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Conflict",
          "code": 409,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-already-exists\",\n    \"message\": \"The request conflicts with an existing operation.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "refund-reference-conflict",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Conflict",
          "code": 409,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-reference-conflict\",\n    \"message\": \"The request conflicts with an existing operation.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "refund-original-not-paid",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Unprocessable Entity",
          "code": 422,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-original-not-paid\",\n    \"message\": \"The payment request was declined.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "refund-insufficient-partner-funds",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Unprocessable Entity",
          "code": 422,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-insufficient-partner-funds\",\n    \"message\": \"The payment request was declined.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "refund-provider-unavailable",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Unprocessable Entity",
          "code": 422,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-provider-unavailable\",\n    \"message\": \"The payment request was declined.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "rate-limit-exceeded",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Too Many Requests",
          "code": 429,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"rate-limit-exceeded\",\n    \"message\": \"The request limit has been reached.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "SERVICE_UNAVAILABLE",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "example-refund-order-001"
              }
            ],
            "description": "Full refund uniquement. Fournissez le transaction_id FAYGAW du Checkout payé, une client_reference unique et une Idempotency-Key. Le montant et le provider sont déterminés par FAYGAW. Après une réponse perdue, réutilisez exactement la même clé et le même corps ; consultez GET pour le statut actuel. UNKNOWN ne signifie pas échec. Les frais FAYGAW d’origine sont restitués au Partner ; aucun nouveau frais Refund.\n\nFull refund only. Send the paid Checkout FAYGAW transaction_id, a unique client_reference and an Idempotency-Key. FAYGAW determines the amount and provider. After a lost response, reuse the exact key and body; use GET for the current status. UNKNOWN is not a failure. Original FAYGAW fees are returned to the Partner.\n\nHTTP 201 confirms creation, not completion. Reuse the same Idempotency-Key and body after a lost response; use GET for the current status. UNKNOWN requires continued tracking. Error responses contain error.code, error.message and error.request_id; keep request_id for support. Main creation errors: 400 idempotency-key-required / invalid-field, 404 refund-original-not-found, 409 idempotency-conflict / refund-already-exists / refund-reference-conflict, 422 refund-original-not-paid / refund-insufficient-partner-funds / refund-provider-unavailable. Both methods may return 401, 403, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"txn_REPLACE_WITH_PAID_CHECKOUT_TRANSACTION_ID\",\n  \"client_reference\": \"refund-order-001\",\n  \"reason\": \"Customer request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Service Unavailable",
          "code": 503,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"The service is temporarily unavailable.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        }
      ]
    },
    {
      "name": "Consulter un Refund — refund:read",
      "request": {
        "method": "GET",
        "url": "{{base_url}}/refunds/ref_REPLACE_WITH_REFUND_ID",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{api_key}}"
          }
        ],
        "description": "Statut actuel : PROCESSING, UNKNOWN, SUCCEEDED ou FAILED. / Current status: PROCESSING, UNKNOWN, SUCCEEDED or FAILED.\n\nHTTP 200 confirms a successful read, not a successful refund. GET may return 400 invalid-request, 401 authentication-required / invalid-api-key, 403 forbidden-scope / ip-not-allowed, 404 refund-not-found, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE. Inspect error.code, error.message and error.request_id."
      },
      "response": [
        {
          "name": "Current Refund",
          "originalRequest": {
            "method": "GET",
            "url": "{{base_url}}/refunds/ref_REPLACE_WITH_REFUND_ID",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              }
            ],
            "description": "Statut actuel : PROCESSING, UNKNOWN, SUCCEEDED ou FAILED. / Current status: PROCESSING, UNKNOWN, SUCCEEDED or FAILED.\n\nHTTP 200 confirms a successful read, not a successful refund. GET may return 400 invalid-request, 401 authentication-required / invalid-api-key, 403 forbidden-scope / ip-not-allowed, 404 refund-not-found, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE. Inspect error.code, error.message and error.request_id."
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"id\": \"ref_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n  \"object\": \"refund\",\n  \"transaction_id\": \"txn_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n  \"original_transaction_id\": \"txn_cccccccccccccccccccccccccccccccc\",\n  \"checkout_id\": \"co_dddddddddddddddddddddddddddddddd\",\n  \"environment\": \"SANDBOX\",\n  \"livemode\": true,\n  \"status\": \"SUCCEEDED\",\n  \"refunded_amount\": \"100\",\n  \"refunded_faygaw_partner_fee\": \"1\",\n  \"currency\": \"XOF\",\n  \"provider\": \"WAVE\",\n  \"provider_transaction_id\": null,\n  \"client_reference\": \"REFUND-001\",\n  \"reason\": \"Customer request\",\n  \"created_at\": \"2026-10-31T12:00:00Z\",\n  \"updated_at\": \"2026-10-31T12:00:10Z\",\n  \"completed_at\": \"2026-10-31T12:00:10Z\",\n  \"failure_code\": null\n}"
        },
        {
          "name": "refund-not-found",
          "originalRequest": {
            "method": "GET",
            "url": "{{base_url}}/refunds/ref_REPLACE_WITH_REFUND_ID",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              }
            ],
            "description": "Statut actuel : PROCESSING, UNKNOWN, SUCCEEDED ou FAILED. / Current status: PROCESSING, UNKNOWN, SUCCEEDED or FAILED.\n\nHTTP 200 confirms a successful read, not a successful refund. GET may return 400 invalid-request, 401 authentication-required / invalid-api-key, 403 forbidden-scope / ip-not-allowed, 404 refund-not-found, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE. Inspect error.code, error.message and error.request_id."
          },
          "status": "Not Found",
          "code": 404,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-not-found\",\n    \"message\": \"Refund not found.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "rate-limit-exceeded",
          "originalRequest": {
            "method": "GET",
            "url": "{{base_url}}/refunds/ref_REPLACE_WITH_REFUND_ID",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              }
            ],
            "description": "Statut actuel : PROCESSING, UNKNOWN, SUCCEEDED ou FAILED. / Current status: PROCESSING, UNKNOWN, SUCCEEDED or FAILED.\n\nHTTP 200 confirms a successful read, not a successful refund. GET may return 400 invalid-request, 401 authentication-required / invalid-api-key, 403 forbidden-scope / ip-not-allowed, 404 refund-not-found, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE. Inspect error.code, error.message and error.request_id."
          },
          "status": "Too Many Requests",
          "code": 429,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"rate-limit-exceeded\",\n    \"message\": \"The request limit has been reached.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        },
        {
          "name": "SERVICE_UNAVAILABLE",
          "originalRequest": {
            "method": "GET",
            "url": "{{base_url}}/refunds/ref_REPLACE_WITH_REFUND_ID",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              }
            ],
            "description": "Statut actuel : PROCESSING, UNKNOWN, SUCCEEDED ou FAILED. / Current status: PROCESSING, UNKNOWN, SUCCEEDED or FAILED.\n\nHTTP 200 confirms a successful read, not a successful refund. GET may return 400 invalid-request, 401 authentication-required / invalid-api-key, 403 forbidden-scope / ip-not-allowed, 404 refund-not-found, 429 rate-limit-exceeded and 503 SERVICE_UNAVAILABLE. Inspect error.code, error.message and error.request_id."
          },
          "status": "Service Unavailable",
          "code": 503,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            },
            {
              "key": "X-Request-Id",
              "value": "req_refund_example"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"The service is temporarily unavailable.\",\n    \"request_id\": \"req_refund_example\"\n  }\n}"
        }
      ]
    },
    {
      "name": "Relancer un Refund après 72 h — refund:write",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/refunds/ref_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/retry",
        "header": [
          {
            "key": "Authorization",
            "value": "Bearer {{api_key}}"
          },
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "manual-refund-retry-001"
          }
        ],
        "description": "Les reprises automatiques durent au maximum 72 heures après la demande initiale. Un refus de tentative ne rend pas le paiement définitivement non remboursable. Après cette limite, relancez le même Refund avec POST /v1/refunds/{refund_id}/retry et une nouvelle Idempotency-Key : une seule tentative, sans nouveau cycle automatique de 72 heures. Réutilisez la même clé et le même corps après une réponse perdue. HTTP 202 confirme la prise en charge, pas le remboursement ; consultez GET. Un Refund déjà SUCCEEDED ne déclenche aucun nouvel envoi. Aucun nouveau frais FAYGAW ; restitution des montants confirmée seulement par SUCCEEDED.\n\nAutomatic retries run for at most 72 hours from the original request. A refused attempt does not make the payment permanently non-refundable. After that limit, retry the same Refund with POST /v1/refunds/{refund_id}/retry and a new Idempotency-Key: one attempt, without opening another automatic 72-hour cycle. Reuse the same key and body after a lost response. HTTP 202 acknowledges acceptance, not completion; use GET. An already SUCCEEDED Refund triggers no new provider send. No new FAYGAW fee; amounts are confirmed returned only at SUCCEEDED.\n\nErrors: 400 idempotency-key-required / refund-retry-body-invalid; 404 refund-not-found; 409 refund-retry-not-due / refund-retry-in-progress / idempotency-conflict. Common 401/403/429/503 responses include error.code, error.message and error.request_id.",
        "body": {
          "mode": "raw",
          "raw": "{}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      },
      "response": [
        {
          "name": "Manual retry accepted",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds/ref_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/retry",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "manual-refund-retry-001"
              }
            ],
            "description": "Les reprises automatiques durent au maximum 72 heures après la demande initiale. Un refus de tentative ne rend pas le paiement définitivement non remboursable. Après cette limite, relancez le même Refund avec POST /v1/refunds/{refund_id}/retry et une nouvelle Idempotency-Key : une seule tentative, sans nouveau cycle automatique de 72 heures. Réutilisez la même clé et le même corps après une réponse perdue. HTTP 202 confirme la prise en charge, pas le remboursement ; consultez GET. Un Refund déjà SUCCEEDED ne déclenche aucun nouvel envoi. Aucun nouveau frais FAYGAW ; restitution des montants confirmée seulement par SUCCEEDED.\n\nAutomatic retries run for at most 72 hours from the original request. A refused attempt does not make the payment permanently non-refundable. After that limit, retry the same Refund with POST /v1/refunds/{refund_id}/retry and a new Idempotency-Key: one attempt, without opening another automatic 72-hour cycle. Reuse the same key and body after a lost response. HTTP 202 acknowledges acceptance, not completion; use GET. An already SUCCEEDED Refund triggers no new provider send. No new FAYGAW fee; amounts are confirmed returned only at SUCCEEDED.\n\nErrors: 400 idempotency-key-required / refund-retry-body-invalid; 404 refund-not-found; 409 refund-retry-not-due / refund-retry-in-progress / idempotency-conflict. Common 401/403/429/503 responses include error.code, error.message and error.request_id.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Accepted",
          "code": 202,
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "body": "{\n  \"id\": \"ref_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n  \"object\": \"refund\",\n  \"transaction_id\": \"txn_bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\",\n  \"original_transaction_id\": \"txn_cccccccccccccccccccccccccccccccc\",\n  \"checkout_id\": \"co_dddddddddddddddddddddddddddddddd\",\n  \"environment\": \"SANDBOX\",\n  \"livemode\": true,\n  \"status\": \"UNKNOWN\",\n  \"refunded_amount\": \"100\",\n  \"refunded_faygaw_partner_fee\": \"1\",\n  \"currency\": \"XOF\",\n  \"provider\": \"WAVE\",\n  \"provider_transaction_id\": null,\n  \"client_reference\": \"REFUND-001\",\n  \"reason\": \"Customer request\",\n  \"created_at\": \"2026-10-31T12:00:00Z\",\n  \"updated_at\": \"2026-11-03T12:01:00Z\",\n  \"completed_at\": null,\n  \"failure_code\": null\n}"
        },
        {
          "name": "Automatic window still active",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds/ref_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/retry",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "manual-refund-retry-001"
              }
            ],
            "description": "Les reprises automatiques durent au maximum 72 heures après la demande initiale. Un refus de tentative ne rend pas le paiement définitivement non remboursable. Après cette limite, relancez le même Refund avec POST /v1/refunds/{refund_id}/retry et une nouvelle Idempotency-Key : une seule tentative, sans nouveau cycle automatique de 72 heures. Réutilisez la même clé et le même corps après une réponse perdue. HTTP 202 confirme la prise en charge, pas le remboursement ; consultez GET. Un Refund déjà SUCCEEDED ne déclenche aucun nouvel envoi. Aucun nouveau frais FAYGAW ; restitution des montants confirmée seulement par SUCCEEDED.\n\nAutomatic retries run for at most 72 hours from the original request. A refused attempt does not make the payment permanently non-refundable. After that limit, retry the same Refund with POST /v1/refunds/{refund_id}/retry and a new Idempotency-Key: one attempt, without opening another automatic 72-hour cycle. Reuse the same key and body after a lost response. HTTP 202 acknowledges acceptance, not completion; use GET. An already SUCCEEDED Refund triggers no new provider send. No new FAYGAW fee; amounts are confirmed returned only at SUCCEEDED.\n\nErrors: 400 idempotency-key-required / refund-retry-body-invalid; 404 refund-not-found; 409 refund-retry-not-due / refund-retry-in-progress / idempotency-conflict. Common 401/403/429/503 responses include error.code, error.message and error.request_id.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Conflict",
          "code": 409,
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-retry-not-due\",\n    \"message\": \"The request conflicts with an existing operation.\",\n    \"request_id\": \"req_refund_retry_example\"\n  }\n}"
        },
        {
          "name": "Invalid retry body",
          "originalRequest": {
            "method": "POST",
            "url": "{{base_url}}/refunds/ref_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/retry",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "manual-refund-retry-001"
              }
            ],
            "description": "Les reprises automatiques durent au maximum 72 heures après la demande initiale. Un refus de tentative ne rend pas le paiement définitivement non remboursable. Après cette limite, relancez le même Refund avec POST /v1/refunds/{refund_id}/retry et une nouvelle Idempotency-Key : une seule tentative, sans nouveau cycle automatique de 72 heures. Réutilisez la même clé et le même corps après une réponse perdue. HTTP 202 confirme la prise en charge, pas le remboursement ; consultez GET. Un Refund déjà SUCCEEDED ne déclenche aucun nouvel envoi. Aucun nouveau frais FAYGAW ; restitution des montants confirmée seulement par SUCCEEDED.\n\nAutomatic retries run for at most 72 hours from the original request. A refused attempt does not make the payment permanently non-refundable. After that limit, retry the same Refund with POST /v1/refunds/{refund_id}/retry and a new Idempotency-Key: one attempt, without opening another automatic 72-hour cycle. Reuse the same key and body after a lost response. HTTP 202 acknowledges acceptance, not completion; use GET. An already SUCCEEDED Refund triggers no new provider send. No new FAYGAW fee; amounts are confirmed returned only at SUCCEEDED.\n\nErrors: 400 idempotency-key-required / refund-retry-body-invalid; 404 refund-not-found; 409 refund-retry-not-due / refund-retry-in-progress / idempotency-conflict. Common 401/403/429/503 responses include error.code, error.message and error.request_id.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "status": "Bad Request",
          "code": 400,
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "body": "{\n  \"error\": {\n    \"code\": \"refund-retry-body-invalid\",\n    \"message\": \"The request is invalid.\",\n    \"request_id\": \"req_refund_retry_example\"\n  }\n}"
        }
      ]
    }
  ]
}
