{
  "info": {
    "_postman_id": "f75fc487-381e-48ed-9f3f-246c9da54f11",
    "name": "FastCash API Partenaires",
    "description": "Collection officielle des huit opérations publiques FastCash. Renseignez bearerToken avec votre clé partenaire, vérifiez les variables, puis commencez par Référentiel et Vérification de compte. Les requêtes de paiement créent de vraies opérations sur l’environnement sélectionné : ne les envoyez jamais sans validation explicite.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{bearerToken}}",
        "type": "string"
      }
    ]
  },
  "event": [],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://gkpjwwtalnyrpktfngbc.supabase.co/functions/v1/partners-api",
      "type": "string"
    },
    {
      "key": "bearerToken",
      "value": "",
      "type": "secret"
    },
    {
      "key": "bookmakerPlatformId",
      "value": "1",
      "type": "string"
    },
    {
      "key": "bookmakerUserId",
      "value": "12345678",
      "type": "string"
    },
    {
      "key": "amount",
      "value": "5000",
      "type": "string"
    },
    {
      "key": "phoneNumber",
      "value": "+22670000000",
      "type": "string"
    },
    {
      "key": "userExternalId",
      "value": "customer-demo-42",
      "type": "string"
    },
    {
      "key": "partnerExternalId",
      "value": "remplacez-par-une-reference-unique",
      "type": "string"
    },
    {
      "key": "transactionId",
      "value": "1",
      "type": "string"
    },
    {
      "key": "withdrawalCode",
      "value": "REMPLACEZ_PAR_LE_CODE_BOOKMAKER",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "1. Référentiel",
      "description": "Chargez les bookmakers et les moyens de paiement Mobile Money. Les codes et capacités de cette réponse sont la source de vérité.",
      "item": [
        {
          "name": "Lister les bookmakers et moyens de paiement",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/bookmakers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "bookmakers"
              ]
            },
            "description": "Retourne bookmakers et operators. Pour un dépôt, utilisez deposit_code. Pour un retrait, utilisez withdrawal_code. Respectez les indicateurs supports_deposit et supports_withdrawal."
          },
          "response": []
        },
        {
          "name": "Consulter le solde bookmaker",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/bookmakers/{{bookmakerPlatformId}}/balance",
              "host": ["{{baseUrl}}"],
              "path": ["bookmakers", "{{bookmakerPlatformId}}", "balance"]
            },
            "description": "Solde de caisse lu en direct. balance est le solde réel, withdrawable le montant disponible pour les retraits ; les deux sont en XOF."
          },
          "response": []
        }
      ]
    },
    {
      "name": "2. Vérification de compte",
      "description": "Étape recommandée avant toute opération financière.",
      "item": [
        {
          "name": "Vérifier l’existence du compte bookmaker",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"bookmaker_platform_id\": {{bookmakerPlatformId}},\n  \"bookmaker_user_id\": {{bookmakerUserId}}\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/accounts/lookup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "accounts",
                "lookup"
              ]
            },
            "description": "Traitez d’abord supports_lookup. S’il vaut false, la pré-vérification est indisponible et le parcours peut continuer après confirmation des données. S’il vaut true, continuez seulement si exists vaut true ; sinon bloquez et corrigez l’identifiant."
          },
          "response": []
        }
      ]
    },
    {
      "name": "3. Paiements",
      "description": "Attention : ces requêtes initient des opérations réelles sur l’environnement configuré. Une réponse 202 confirme uniquement l’acceptation.",
      "item": [
        {
          "name": "Créer un dépôt",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"bookmaker_platform_id\": {{bookmakerPlatformId}},\n  \"bookmaker_user_id\": {{bookmakerUserId}},\n  \"amount\": {{amount}},\n  \"operator_code\": \"ORANGE_BFA_MARCHAND\",\n  \"phone_number\": \"{{phoneNumber}}\",\n  \"partner_external_id\": \"{{partnerExternalId}}\",\n  \"user_external_id\": \"{{userExternalId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/deposits",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "deposits"
              ]
            },
            "description": "Remplacez operator_code par le deposit_code renvoyé par GET /bookmakers et utilisez un partner_external_id nouveau pour chaque opération. N’envoyez pas cette requête sans validation explicite."
          },
          "response": []
        },
        {
          "name": "Créer un retrait",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"bookmaker_platform_id\": {{bookmakerPlatformId}},\n  \"bookmaker_user_id\": {{bookmakerUserId}},\n  \"amount\": {{amount}},\n  \"withdrawal_code\": \"{{withdrawalCode}}\",\n  \"operator_code\": \"ORANGE_BFA_CASHIN\",\n  \"phone_number\": \"{{phoneNumber}}\",\n  \"partner_external_id\": \"{{partnerExternalId}}\",\n  \"user_external_id\": \"{{userExternalId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/withdrawals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "withdrawals"
              ]
            },
            "description": "Renseignez le code de retrait fourni par le bookmaker, utilisez le withdrawal_code Mobile Money renvoyé par GET /bookmakers et générez une référence externe unique. Ne relancez jamais automatiquement un retrait en échec ou ambigu : conservez requestId et contactez le support."
          },
          "response": []
        }
      ]
    },
    {
      "name": "4. Transactions",
      "description": "Consultez l’état sans créer de nouvelle opération.",
      "item": [
        {
          "name": "Consulter une transaction",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/transactions/{{transactionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "transactions",
                "{{transactionId}}"
              ]
            },
            "description": "Retourne uniquement une transaction appartenant au partenaire authentifié."
          },
          "response": []
        },
        {
          "name": "Lister les transactions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/transactions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "transactions"
              ],
              "query": [
                {
                  "key": "user_external_id",
                  "value": "{{userExternalId}}",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "2026-07-01T00:00:00Z",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "2026-07-31T23:59:59Z",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true
                }
              ]
            },
            "description": "Activez uniquement les filtres nécessaires. La liste est triée de la plus récente à la plus ancienne."
          },
          "response": []
        }
      ]
    },
    {
      "name": "5. Commissions",
      "description": "Génère idempotemment le mois UTC courant puis retourne tout l’historique du partenaire authentifié.",
      "item": [
        {
          "name": "Lister les commissions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/commissions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "commissions"
              ]
            },
            "description": "Actualise la commission non versée du mois UTC courant, puis retourne le mois courant, les totaux et l’historique. Les versements en cours ou terminés restent figés."
          },
          "response": []
        }
      ]
    }
  ]
}
