Pix funds recovery [beta]

This guide details the process for recovering funds in Pix. There is one flow you can use.

  • AUTOMATIC—The Diretório de Identificadores de Contas Transacionais (DICT)—a national Pix key registry and database—automatically manages tracking and blocking using a standard algorithm.

Flow example

AUTOMATIC flow example

Scenario

Case: Wrong PIX scam (high volume, standard case)

  • Victim: Maria Santos (CPF: 987.654.321-00)
  • Amount: R$ 800.00
  • Fraud date: 11/10/2025 at 9:15 AM
  • Situation: Scammer convinced victim to send PIX "by mistake"
  • Objective: PSP wants to process quickly using DICT's standard algorithm

Timeline

Day 1 - 11/10/2025

9:15 AM - Fraudulent transaction occurs
Victim (PSP A) → Scammer (PSP B)
EndToEndId: E98765432109876543210987654321001
Amount: R$ 800.00
9:30 AM - Victim reports to PSP

Maria calls PSP A reporting that she was a victim of a scam.

9:45 AM - STEP 1: Funds recovery creation (AUTOMATIC)

PSP A Request:

Create funds recovery

POST /v1/pix/funds-recoveries

{
  "flow_type": "AUTOMATED",
  "root_transaction_id": "E98765432109876543210987654321001",
  "situation_type": "SCAM",
  "contact_information": {
    "email": "[email protected]",
    "phone": "+5511987654321"
  },
  "report_details": "Client reports wrong PIX scam. Scammer claimed to have sent PIX by mistake and requested refund.",
  "tracking_graph_parameters": {
    "min_transaction_amount": 50.00,
    "max_transactions": 100,
    "hop_window": "PT1H",
    "max_hops": 4
  }
}

Response (202 Accepted):

{
  "code": "EPDA0000",
  "message": "Funds recovery flow will continue asynchronously"
}
9:46 AM - Automatic processing initiated

Note: DICT processes automatically:

  • Creates funds recovery
  • Sends root transaction infraction notification (PSP B blocks funds)
  • Builds tracking graph (8 transactions, 3 hops)
  • Calculates automatic prioritization
  • Sends infraction notifications to 5 PSPs
9:50 AM - Event: CREATED

Event published:

Pix funds recovery status changed

{
  "domain": "pix-dict",
  "event_type": "funds_recoveries_status_changed",
  "data": {
    "funds_recovery_id": "650e8400-e29b-41d4-a716-446655440001",
    "status": "CREATED",
    "flow_type": "AUTOMATED",
    "changed_at": "2025-11-10T09:50:00Z"
  }
}
9:55 AM - Event: AWAITING_ANALYSIS

After complete automatic processing, status changes directly to AWAITING_ANALYSIS:

{
  "domain": "pix-dict",
  "event_type": "funds_recoveries_status_changed",
  "data": {
    "funds_recovery_id": "650e8400-e29b-41d4-a716-446655440001",
    "status": "AWAITING_ANALYSIS",
    "flow_type": "AUTOMATED",
    "changed_at": "2025-11-10T09:55:00Z"
  }
}

Important note: In AUTOMATIC flow, the status never goes through TRACKED, as the graph is created internally by DICT without exposure to the PSP.

10:00 AM - PSP A Receives Confirmation

PSP A queries the recovery:

Get funds recovery

GET /v1/pix/funds-recoveries/650e8400-e29b-41d4-a716-446655440001

Response:

{
  "id": "650e8400-e29b-41d4-a716-446655440001",
  "status": "AWAITING_ANALYSIS",
  "flow_type": "AUTOMATED",
  "root_transaction_id": "E98765432109876543210987654321001",
  "situation_type": "SCAM",
  "reporter_participant": "12345678",
  "created_at": "2025-11-10T09:45:00Z",
  "updated_at": "2025-11-10T09:55:00Z"
}

Days 2-8 - 11/11/2025 to 11/17/2025

STEP 2: Analysis by receiving PSPs (7 days)

11/11 - PSP B analyzes (root transaction):

- Blocked balance: R$ 300 (of R$ 800)
- Client has complaint history
- Account with atypical movement
- Decision: ACCEPT

11/11 - PSP C analyzes:

- Mule account (opened 1 day ago)
- Blocked balance: R$ 200
- Decision: ACCEPT

11/12 - PSP D analyzes:

- Old account with clean history
- Client claims legitimate product sale
- Decision: REJECT

11/13 - PSP E analyzes:

- Mule account (opened 3 days ago)
- Multiple suspicious transfers
- Decision: ACCEPT

11/14 - PSP F analyzes:

- Account with fast dispersion pattern
- Blocked balance: R$ 80
- Decision: ACCEPT
11/17 9:55 AM - Status Changes to ANALYSED

After 7 days or all responses, status automatically changes:

Event published:

Pix funds recovery status changed

{
  "domain": "pix-dict",
  "event_type": "funds_recoveries_status_changed",
  "data": {
    "funds_recovery_id": "650e8400-e29b-41d4-a716-446655440001",
    "status": "ANALYSED",
    "changed_at": "2025-11-17T09:55:00Z"
  }
}

Day 9 - 11/18/2025

8:00 AM - PSP A queries results

Get infraction report

GET /v2/pix/infraction-reports?fundsRecoveryId=650e8400-e29b-41d4-a716-446655440001

Analysis summary:

  • ✅ Accepted: 4 transactions (R$ 680 potential)
  • ❌ Rejected: 1 transaction (R$ 150 lost)
8:30 AM - STEP 3: Refund Request

Request:

Initiate refund funds recovery

POST /v1/pix/funds-recoveries/650e8400-e29b-41d4-a716-446655440001/refund

Response (202 Accepted):

{
  "code": "EPDA0000",
  "message": "Refund funds recovery flow will continue asynchronously"
}
8:35 AM - Status Changes to REFUNDING

Event published:

Pix funds recovery status changed

{
  "domain": "pix-dict",
  "event_type": "funds_recoveries_status_changed",
  "data": {
    "funds_recovery_id": "650e8400-e29b-41d4-a716-446655440001",
    "status": "REFUNDING",
    "changed_at": "2025-11-18T08:35:00Z"
  }
}
8:40 AM - Sequential refunds

DICT builds refund graph (accepted transactions only) and processes refunds sequentially:

Refund order:
1. E9...001 (PSP B) → R$ 300
2. E9...002 (PSP C) → R$ 200
3. E9...005 (PSP E) → R$ 100
4. E9...007 (PSP F) → R$ 80

Result: All refunds processed successfully
9:00 AM - Status changes to COMPLETED

Event published:

Pix funds recovery status changed

{
  "domain": "pix-dict",
  "event_type": "funds_recoveries_status_changed",
  "data": {
    "funds_recovery_id": "650e8400-e29b-41d4-a716-446655440001",
    "status": "COMPLETED",
    "changed_at": "2025-11-18T09:00:00Z"
  }
}
9:15 AM - PSP A Notifies Client
SMS to Maria Santos:

Hello Maria,

Your funds recovery has been completed!

Fraud amount: R$ 800.00
Recovered amount: R$ 680.00
Recovery rate: 85%

The funds are already in your account.

PSP A - Anti-Fraud Team

AUTOMATIC flow summary

Timeline:
- Day 1 (9:45 AM): Creation + Automatic processing
- Day 1 (9:55 AM): Blocks sent (AWAITING_ANALYSIS)
- Day 9 (9:55 AM): Analysis completed (ANALYSED)
- Day 10 (8:35 AM): Refund initiated (REFUNDING)
- Day 10 (9:00 AM): Process completed (COMPLETED)

Result:
✅ R$ 680 recovered (85%)
❌ R$ 120 not recovered (15%)

AUTOMATIC flow advantages:
- Fast and automatic processing
- No need for human intervention
- Optimized DICT algorithm
- Ideal for high volume cases
- Shorter total processing time

Flow aspects

AspectAUTOMATIC
PSP controlLimited
Setup time~10 min (automatic)
TRACKED status❌ No (skips directly)
Multiple graphs❌ Only 1 (internal)
PrioritizationAlgorithm only
Graph visibility❌ Not exposed
Experimentation❌ No
Total time9-10 days
ComplexityLow
Ideal forStandard cases
Recommended volumeHigh

State flow

AUTOMATIC:

CREATED → AWAITING_ANALYSIS → ANALYSED → REFUNDING → COMPLETED
   ↓
CANCELLED

Endpoints called

AUTOMATIC:

NameURL
Create funds recoveryPOST /funds-recoveries (with graph parameters)
Initiate refund funds recoveryPOST /funds-recoveries/{id}/refund

Events generated

Pix funds recovery status changed

AUTOMATIC:

1. funds_recoveries_status_changed (CREATED)
2. funds_recoveries_status_changed (AWAITING_ANALYSIS)
3. funds_recoveries_status_changed (ANALYSED)
4. funds_recoveries_status_changed (REFUNDING)
5. funds_recoveries_status_changed (COMPLETED)