Skip to content

Liste MED

Liste les processus MED (Mécanisme Spécial de Restitution) associés au compte.

Le MED est un mécanisme de la Banque Centrale pour la récupération de valeurs en cas de fraude ou de défaillance opérationnelle sur le système PIX.

Endpoint

GET /api/external/med

Headers

HeaderTypeObligatoireDescription
AuthorizationStringOuiApiKey {client_id}:{client_secret}
X-Key-CaseStringNonDéfinissez à camelCase pour recevoir les champs de la réponse en camelCase (par défaut snake_case)

Permissions

Cet endpoint exige la permission payment:read sur l'API Key. Les clés sans cette permission reçoivent HTTP 403.

Exemple

bash
curl -X GET https://api.owem.com.br/api/external/med \
  -H "Authorization: ApiKey $CLIENT_ID:$CLIENT_SECRET"

Pas de pagination native

Cet endpoint consulte le provider OnZ/BACEN en temps réel et n'accepte pas de paramètres de pagination (page/per_page/limit). Tous les MED liés à l'entité sont retournés dans une seule réponse. Pour de grands volumes, filtrez localement dans votre système après réception du tableau.

Réponse de succès (200)

json
{
  "worked": true,
  "meds": [
    {
      "id": "MED20260307001",
      "type": "REFUND_REQUEST",
      "status": "ACKNOWLEDGED",
      "amount": 50000,
      "original_end_to_end_id": "E37839059202603071530000001",
      "created_at": "2026-03-07T18:00:00Z"
    },
    {
      "id": "MED20260305002",
      "type": "REFUND_CANCELLED",
      "status": "CLOSED",
      "amount": 15000,
      "original_end_to_end_id": "E37839059202603051200000003",
      "created_at": "2026-03-05T14:30:00Z"
    }
  ]
}
ChampTypeDescription
workedBooleantrue indique le succès de l'opération
medsArrayListe des processus MED
meds[].idStringIdentifiant unique du MED
meds[].typeStringType du MED (voir tableau ci-dessous)
meds[].statusStringStatus actuel du processus
meds[].amountIntegerValeur en unités de base (÷ 10 000 pour reais). 50000 = R$ 5,00
meds[].original_end_to_end_idStringE2E de la transaction PIX originale
meds[].created_atStringDate d'ouverture (ISO 8601)

Types de MED

TypeDescription
REFUND_REQUESTDemande de remboursement (fraude, escroquerie ou accord)
REFUND_CANCELLEDAnnulation d'une demande de remboursement précédente

Status du MED

Valeurs retournées par le provider PIX (OnZ/BACEN) en MAJUSCULES. L'API transmet la valeur telle que reçue — il n'y a pas de normalisation.

StatusDescriptionDécision finale
ACKNOWLEDGEDMED reçu et reconnu par le participant, en analyseNon — en attente de défense ou du délai
CLOSEDMED finalisé par le participantOui — voir analysisResult dans med-detail pour distinguer AGREED (remboursement exécuté) de DISAGREED (défense acceptée, sans remboursement)
CANCELLEDMED annulé par le demandeur avant analyseOui — aucune valeur n'a été bloquée ni remboursée

Status en uppercase

Les status MED sont toujours retournés en MAJUSCULES. Si votre filtre attend des minuscules (pending/accepted/closed), il ne trouvera aucune ligne. C'est une différence consciente par rapport aux status de transaction PIX (lowercase) — MED suit la convention BACEN originale.

Corrélation avec transaction originale

Utilisez le champ original_end_to_end_id pour localiser la transaction PIX originale qui a motivé le MED. Consultez via GET /api/external/transactions/:id ou GET /api/external/transactions/ref/:external_id si vous avez stocké l'external_id.

Retour dans les environnements dev/homologation

Cet endpoint consulte le provider OnZ directement — il ne lit pas depuis une table locale. En dev/homologation il peut retourner un tableau vide si le provider OnZ n'a pas de MEDs de test pour l'entité configurée. En production, il retourne la liste réelle des processus MED de votre compte telle que transmise par OnZ/BACEN.

Les défaillances du provider retournent un tableau vide

En cas d'indisponibilité temporaire du provider OnZ, l'endpoint retourne {"worked": true, "meds": []} (silencieusement, sans 5xx). Si vous recevez un tableau vide de façon persistante alors que vous attendez des MEDs, consultez le support pour vérifier s'il y a indisponibilité du provider.

Réponse de succès -- sans MEDs (200)

json
{
  "worked": true,
  "meds": []
}

Réponse d'erreur (401)

json
{
  "worked": false,
  "errors": {
    "unauthorized": "Missing API key credentials. Use Authorization: ApiKey <client_id>:<client_secret>"
  }
}

Blocage de valeurs en dispute

Quand une infraction REFUND_REQUEST est enregistrée en ACKNOWLEDGED avec une valeur >R$ 1 000,00 (seuil configurable par compte ou merchant via med_configurations.min_threshold_amount), le backend crée un blocage conservatoire dans TigerBeetle (med_cautelar_blocks row + phantom hold TB code 1032). La valeur contestée :

  • Est déduite de l'available retourné par Solde
  • S'ajoute à pending
  • Est préservée dans le balance (solde sécurisé) jusqu'à la décision finale

Les infractions avec valeur ≤R$ 1 000,00 ou avec e2e_id inexistant dans vos transactions reçoivent un auto-deny automatique (fermeture avec AnalysisResult=DISAGREED) sans créer de blocage conservatoire.

Quand le MED est résolu (CLOSED), le blocage est libéré :

  • AnalysisResult=AGREED → valeur transférée au demandeur (remboursement PIX via PACS.004, E2E préfixe D)
  • AnalysisResult=DISAGREED → valeur retourne dans l'available du merchant

Abonnez-vous aux webhooks pix.infraction.created, pix.refund.requested et pix.infraction.resolved pour une notification en temps réel de chaque étape. Voir Infractions (flux complet) pour comprendre le cycle end-to-end.

Auto-expiration : le worker Fluxiq.Workers.MedDefenseExpiration (cron */5 * * * *) auto-accepte les blocages dont la deadline est dans les 30 prochaines minutes et dont la défense n'a pas encore été soumise — cela évite une amende réglementaire BACEN pour non-réponse dans les délais. Voir section « Délais » dans Infractions.

Owem Pay Instituição de Pagamento — ISPB 37839059