{
  "item": [
    {
      "id": "c95c5528-dcf8-44ad-88aa-e0650586deee",
      "name": "Users",
      "description": {
        "content": "Create, fetch, and manage the end users your partners onboard to BlendFi.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ffd1f566-1c6d-48ae-829b-c49bc4124f5e",
          "name": "Create a user",
          "request": {
            "name": "Create a user",
            "url": {
              "path": [
                "v1",
                "users"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"external_id\": \"partner-user-001\",\n  \"name\": \"Jane Doe\",\n  \"document_type\": \"cpf\",\n  \"document_number\": \"52998224725\",\n  \"email\": \"jane@example.com\",\n  \"date_of_birth\": \"1990-01-01\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "451a1b15-52ed-4f27-adb9-1027ea3b81d2",
          "name": "List users (cursor-paginated)",
          "request": {
            "name": "List users (cursor-paginated)",
            "url": {
              "path": [
                "v1",
                "users"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "50"
                },
                {
                  "disabled": true,
                  "key": "cursor",
                  "value": "string"
                },
                {
                  "disabled": false,
                  "key": "kyc_status",
                  "value": "expired"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "fef0c069-9cc2-41cb-856b-e2a51c5b562b",
          "name": "Fetch a user",
          "request": {
            "name": "Fetch a user",
            "url": {
              "path": [
                "v1",
                "users",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<user_id from create user response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "58b29f01-aae3-464c-9937-4d54a091547d",
          "name": "Update a user",
          "request": {
            "name": "Update a user",
            "url": {
              "path": [
                "v1",
                "users",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<user_id from create user response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"string\",\n  \"email\": \"VqMo@JGjvVPCLFbeQxrAcqhnF.wvwc\",\n  \"date_of_birth\": \"1971-07-31\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "9fa59a50-1fcc-4e3f-9645-eee40ad23966",
          "name": "Soft-delete a user",
          "request": {
            "name": "Soft-delete a user",
            "url": {
              "path": [
                "v1",
                "users",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<user_id from create user response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "e7880794-9e30-47e5-951d-38e535618ec0",
          "name": "Request a transfer-limit upgrade for a user",
          "request": {
            "name": "Request a transfer-limit upgrade for a user",
            "description": {
              "content": "Submit a request to raise the user transfer-limit tier. Each user has a daily and monthly BRL ceiling resolved from a server-managed tier; this endpoint is the partner-facing channel to request a review.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "users",
                ":user_id",
                "limit-upgrade-requests"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<user_id from create user response>",
                  "key": "user_id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        }
      ],
      "event": []
    },
    {
      "id": "4c687e03-eef9-4bb9-bfcc-d5273fc04d70",
      "name": "KYC",
      "description": {
        "content": "Identity verification flows: submit a KYC link, sync provider results, react to webhook updates.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "07e08190-398d-4f99-b923-a87a98691766",
          "name": "Start a KYC submission for a user",
          "request": {
            "name": "Start a KYC submission for a user",
            "url": {
              "path": [
                "v1",
                "users",
                ":id",
                "kyc"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<user_id from create user response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"success_url\": \"https://www.google.com/search?q=kyc+approved\",\n  \"reject_url\": \"https://www.google.com/search?q=kyc+rejected\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "f66da101-b832-4823-9b04-57b1c2e10946",
          "name": "Fetch a user's KYC status",
          "request": {
            "name": "Fetch a user's KYC status",
            "url": {
              "path": [
                "v1",
                "users",
                ":id",
                "kyc"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<user_id from create user response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        }
      ],
      "event": []
    },
    {
      "id": "9e11c85c-d90a-4a58-b265-126646335e97",
      "name": "Test Helpers",
      "description": {
        "content": "Sandbox-only endpoints for driving the full transaction state machine without real PIX or blockchain activity. Each helper maps to exactly one production state transition.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "cd1dafd7-ea8f-4134-89c5-e7086b9a08f6",
          "name": "Force a KYC outcome for sandbox testing",
          "request": {
            "name": "Force a KYC outcome for sandbox testing",
            "description": {
              "content": "Sandbox-only. Forces a KYC review outcome with the provided status. Requires an existing KYC submission for the user.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "test_helpers",
                "users",
                ":id",
                "kyc"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<user_id from create user response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"in_review\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "bb8e2e76-1e6c-4afe-9fd8-211593500b6a",
          "name": "Simulate deposit window expiration",
          "request": {
            "name": "Simulate deposit window expiration",
            "description": {
              "content": "Sandbox-only. Expires an awaiting-deposit conversion.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "test_helpers",
                "conversions",
                ":id",
                "expire"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<conversion_id from accept quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"occurred_at\": \"1948-10-01T13:43:28.501Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "69ad8c44-df21-4673-bb84-b7b4ce526e99",
          "name": "Simulate conversion failure",
          "request": {
            "name": "Simulate conversion failure",
            "description": {
              "content": "Sandbox-only. Fails a conversion using a public scenario reason such as `pix_rejected`, `crypto_deposit_rejected`, `settlement_failed`, or `compliance_rejected`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "test_helpers",
                "conversions",
                ":id",
                "fail"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<conversion_id from accept quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"crypto_deposit_rejected\",\n  \"occurred_at\": \"1980-01-09T23:34:13.982Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "03ff24fc-7287-4eff-a567-8dea360d9761",
          "name": "Simulate onramp PIX payment received",
          "request": {
            "name": "Simulate onramp PIX payment received",
            "description": {
              "content": "Sandbox-only. Simulates the PIX payment arriving for an onramp conversion, marking it `funded` and creating the transaction record. Partners should listen for downstream events or poll `GET /v1/conversions/{id}`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "test_helpers",
                "conversions",
                ":id",
                "simulate-onramp-pix-paid"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<conversion_id from accept quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": \"748289.26648469063\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "2ad5b115-3231-4948-987e-8808ae1cbad3",
          "name": "Simulate offramp crypto deposit",
          "request": {
            "name": "Simulate offramp crypto deposit",
            "description": {
              "content": "Sandbox-only. Simulates the USDT deposit for an offramp conversion. A full deposit drives the conversion to `funded` and starts the Pix payout; an underpaid or overpaid `amount` routes it to `standby`. Partners should listen for the resulting webhook events or poll `GET /v1/conversions/{id}`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "test_helpers",
                "conversions",
                ":id",
                "simulate-offramp-deposit"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<conversion_id from accept quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": \"748289.26648469063\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        }
      ],
      "event": []
    },
    {
      "id": "c0925b13-8343-4103-a3ca-aead40ae9791",
      "name": "Quotes",
      "description": {
        "content": "Price discovery for PIX-to-USDT conversions. Quotes are short-lived and consumed by transactions.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "08e235bb-9b2d-4ada-83de-ac46e7a07659",
          "name": "Create a quote",
          "request": {
            "name": "Create a quote",
            "url": {
              "path": [
                "v1",
                "quotes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"user_id\": \"<user_id from create user response>\",\n  \"source_amount\": \"100.00\",\n  \"source_currency\": \"BRL\",\n  \"target_currency\": \"USDT\",\n  \"destination_wallet_address\": \"0x1234567890abcdef1234567890abcdef12345678\",\n  \"destination_wallet_network\": \"polygon\",\n  \"pix_key\": {},\n  \"pix_key_type\": {},\n  \"deposit_network\": {}\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "940099c1-d82c-44b5-9539-0b8e6014f8a3",
          "name": "List quotes (cursor-paginated)",
          "request": {
            "name": "List quotes (cursor-paginated)",
            "url": {
              "path": [
                "v1",
                "quotes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "50"
                },
                {
                  "disabled": true,
                  "key": "cursor",
                  "value": "string"
                },
                {
                  "disabled": false,
                  "key": "user_id",
                  "value": "<user_id from create user response>"
                },
                {
                  "disabled": false,
                  "key": "status",
                  "value": "consumed"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "d4c21181-8c27-4d22-8f68-6d79fccc9727",
          "name": "Fetch a quote",
          "request": {
            "name": "Fetch a quote",
            "url": {
              "path": [
                "v1",
                "quotes",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<quote_id from create quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "c4a82e29-73ae-4299-8de1-359a96ff0156",
          "name": "Cancel an active quote",
          "request": {
            "name": "Cancel an active quote",
            "description": {
              "content": "Transitions an active quote to `cancelled`. Valid only while the quote is still `active` and has not expired. Once cancelled, the quote cannot be accepted.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "quotes",
                ":id",
                "cancel"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<quote_id from create quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "6baf16ab-63db-459f-ac12-9986f5471e00",
          "name": "Accept a quote and start a conversion",
          "request": {
            "name": "Accept a quote and start a conversion",
            "description": {
              "content": "Consumes an active quote and creates a conversion in `awaiting_deposit`. The response includes the deposit address (offramp) or Pix QR code (onramp) plus the deposit window deadline. Only one open conversion is permitted per user per direction.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "quotes",
                ":id",
                "accept"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<quote_id from create quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        }
      ],
      "event": []
    },
    {
      "id": "dd1db6e5-8465-42cd-b22f-9ea5f366f5d9",
      "name": "Conversions",
      "description": {
        "content": "",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "c2e9666b-1bdf-42d7-9d24-0fa38a3b09f0",
          "name": "Cancel a conversion before any deposit arrives",
          "request": {
            "name": "Cancel a conversion before any deposit arrives",
            "description": {
              "content": "Releases the reserved limit and transitions the conversion to `canceled`. Valid only on `awaiting_deposit`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "conversions",
                ":id",
                "cancel"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<conversion_id from accept quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "e72e7ded-ee10-40ee-a2c9-7f630c99408e",
          "name": "Liquidate a standby conversion at a fresh rate",
          "request": {
            "name": "Liquidate a standby conversion at a fresh rate",
            "description": {
              "content": "Quotes a new rate over the actually-received amount, adjusts the limit reservation, and dispatches the conversion to settlement. Valid only on `standby`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "conversions",
                ":id",
                "liquidate"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<conversion_id from accept quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "da380e2d-a3b8-40e1-ba15-0fe6fb224fdf",
          "name": "Fetch a conversion",
          "request": {
            "name": "Fetch a conversion",
            "url": {
              "path": [
                "v1",
                "conversions",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<conversion_id from accept quote response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "5301a25e-66e5-4210-8dd6-cc8c514047c5",
          "name": "List conversions (cursor-paginated)",
          "request": {
            "name": "List conversions (cursor-paginated)",
            "url": {
              "path": [
                "v1",
                "conversions"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "50"
                },
                {
                  "disabled": true,
                  "key": "cursor",
                  "value": "string"
                },
                {
                  "disabled": false,
                  "key": "user_id",
                  "value": "<user_id from create user response>"
                },
                {
                  "disabled": false,
                  "key": "status",
                  "value": "failed"
                },
                {
                  "disabled": false,
                  "key": "transaction_type",
                  "value": "pix_onramp"
                },
                {
                  "disabled": false,
                  "key": "created_at_from",
                  "value": "1965-11-10T13:42:46.653Z"
                },
                {
                  "disabled": false,
                  "key": "created_at_to",
                  "value": "1965-11-10T13:42:46.653Z"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        }
      ],
      "event": []
    },
    {
      "id": "372236a4-b5d4-4929-9ec4-2ce61ec0cae2",
      "name": "API Keys",
      "description": {
        "content": "",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "efa58321-b3a4-45f8-8c58-0b1bc8905bfc",
          "name": "List active API keys",
          "request": {
            "name": "List active API keys",
            "description": {
              "content": "Returns all active (non-revoked, non-expired) API keys for the authenticated organization.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "api-keys"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "53bc1881-8651-4f68-84ed-ccb88df01fa3",
          "name": "Rotate an API key",
          "request": {
            "name": "Rotate an API key",
            "description": {
              "content": "Issues a new API key with the same capabilities and name, then immediately revokes the old key. The new secret is returned once and cannot be retrieved again.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "api-keys",
                ":id",
                "rotate"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<id from previous response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        }
      ],
      "event": []
    },
    {
      "id": "7a62c694-144b-4c46-a02f-39fc94a36a83",
      "name": "Webhooks",
      "description": {
        "content": "Register endpoint URLs, inspect deliveries, and manually redeliver partner webhook events.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "61adfc3a-e682-4187-891c-0a69ada91e0e",
          "name": "Register a webhook endpoint",
          "request": {
            "name": "Register a webhook endpoint",
            "url": {
              "path": [
                "v1",
                "webhook_endpoints"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://partner.example.com/webhooks/blendfi\",\n  \"event_types\": [\n    \"transaction.pending_payment\",\n    \"transaction.payment_received\",\n    \"transaction.pending_deposit\",\n    \"transaction.deposit_received\",\n    \"transaction.sending_pix\",\n    \"transaction.completed\",\n    \"transaction.failed\",\n    \"transaction.expired\",\n    \"transaction.cancelled\",\n    \"transaction.refunded\",\n    \"conversion.created\",\n    \"conversion.standby\",\n    \"conversion.completed\",\n    \"conversion.failed\",\n    \"conversion.canceled\",\n    \"conversion.expired\",\n    \"conversion.abandoned\",\n    \"user.kyc_pending\",\n    \"user.kyc_approved\",\n    \"user.kyc_rejected\",\n    \"user.kyc_expired\"\n  ],\n  \"description\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "558059f3-2574-4323-97f4-244cfb34424b",
          "name": "List webhook endpoints (cursor-paginated)",
          "request": {
            "name": "List webhook endpoints (cursor-paginated)",
            "url": {
              "path": [
                "v1",
                "webhook_endpoints"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "key": "cursor",
                  "value": "string"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "c50c61f9-0d32-411e-a35a-c25aaf0834a2",
          "name": "Fetch a webhook endpoint by id",
          "request": {
            "name": "Fetch a webhook endpoint by id",
            "url": {
              "path": [
                "v1",
                "webhook_endpoints",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<webhook_endpoint_id from create webhook endpoint response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "a2a4f5bc-edea-4dac-a377-7bf4e2047bdd",
          "name": "Update a webhook endpoint",
          "request": {
            "name": "Update a webhook endpoint",
            "url": {
              "path": [
                "v1",
                "webhook_endpoints",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<webhook_endpoint_id from create webhook endpoint response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"http://pnTACokqVmafkiIzueowhxcTwJfvYwFF.iaJ3DsrbfAw5sNvXV53W0R+\",\n  \"event_types\": [\n    \"transaction.pending_payment\",\n    \"transaction.payment_received\",\n    \"transaction.pending_deposit\",\n    \"transaction.deposit_received\",\n    \"transaction.sending_pix\",\n    \"transaction.completed\",\n    \"transaction.failed\",\n    \"transaction.expired\",\n    \"transaction.cancelled\",\n    \"transaction.refunded\",\n    \"conversion.created\",\n    \"conversion.standby\",\n    \"conversion.completed\",\n    \"conversion.failed\",\n    \"conversion.canceled\",\n    \"conversion.expired\",\n    \"conversion.abandoned\",\n    \"user.kyc_pending\",\n    \"user.kyc_approved\",\n    \"user.kyc_rejected\",\n    \"user.kyc_expired\"\n  ],\n  \"status\": \"active\",\n  \"description\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "f45e6816-c793-4196-ac03-57f66f1d9012",
          "name": "Soft-delete a webhook endpoint",
          "request": {
            "name": "Soft-delete a webhook endpoint",
            "url": {
              "path": [
                "v1",
                "webhook_endpoints",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<webhook_endpoint_id from create webhook endpoint response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "d02f31d1-5dc7-4ba6-abc9-abd3f071ddb0",
          "name": "Rotate a webhook endpoint secret",
          "request": {
            "name": "Rotate a webhook endpoint secret",
            "url": {
              "path": [
                "v1",
                "webhook_endpoints",
                ":id",
                "rotate_secret"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<webhook_endpoint_id from create webhook endpoint response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "key": "idempotency-key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "f9e69f44-0918-4660-86ac-006f3a30f155",
          "name": "List webhook deliveries for an endpoint (cursor-paginated)",
          "request": {
            "name": "List webhook deliveries for an endpoint (cursor-paginated)",
            "url": {
              "path": [
                "v1",
                "webhook_endpoints",
                ":id",
                "deliveries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "key": "cursor",
                  "value": "string"
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<webhook_endpoint_id from create webhook endpoint response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "3414df46-fbc3-4cfb-9721-29ab112f2d8e",
          "name": "Fetch a webhook delivery and its source event payload",
          "request": {
            "name": "Fetch a webhook delivery and its source event payload",
            "url": {
              "path": [
                "v1",
                "webhook_deliveries",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<webhook_delivery_id from webhook delivery response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        },
        {
          "id": "2cda6d35-60d6-491c-bcb2-7d9b84b5fbd5",
          "name": "Manually redeliver a webhook",
          "request": {
            "name": "Manually redeliver a webhook",
            "url": {
              "path": [
                "v1",
                "webhook_deliveries",
                ":id",
                "redeliver"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<webhook_delivery_id from webhook delivery response>",
                  "key": "id"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{api_key}}"
                }
              ]
            }
          },
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          },
          "response": []
        }
      ],
      "event": []
    }
  ],
  "event": [],
  "variable": [
    {
      "type": "string",
      "value": "https://api.sandbox.blendfi.com.br",
      "key": "baseUrl"
    }
  ],
  "info": {
    "_postman_id": "45207d5f-3617-4e38-b1ef-c4fc8be5a9b9",
    "name": "BlendFi API — Partner",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "Programmatic PIX-to-USDT onramp for Brazilian users. Accept BRL via Pix, settle USDT to a wallet you control.\n\n## Base URL\n\n`https://api.sandbox.blendfi.com.br` is the sandbox URL (test mode; state resets periodically, no real money moves).\n\n## Authentication\n\nEvery `/v1/*` request requires an API key in the `Authorization` header as a Bearer token:\n\n```\nAuthorization: Bearer sk_test_<your-key>\n```\n\nSandbox keys are prefixed `sk_test_`. They cannot touch production. Contact BlendFi to get your sandbox key.\n\n| Response | Meaning |\n|---|---|\n| `401 authentication_required` | `Authorization` header missing or malformed |\n| `401 authentication_failed` | Key unknown, revoked, or expired |\n| `403 missing_capability` | Key is valid but does not grant the required capability for this endpoint |\n\n## Idempotency\n\nEvery `POST` and `PATCH` request requires an `Idempotency-Key` header: a unique string (UUID recommended) per logical operation. Replaying the same key with the same body returns the original response, so you can safely retry on network failures.\n\n```\nIdempotency-Key: 01HX7T8Z3V...\n```\n\nKeys expire 24 hours after first use.\n\n## Test mode & test helpers\n\nIn sandbox, the `/v1/test_helpers/*` namespace lets you drive the full PIX-to-USDT lifecycle deterministically, without waiting for real Pix payments or blockchain confirmations. Each helper maps to exactly one real state transition, so your integration sees the same event sequence it would in production.\n\nHappy path:\n\n```bash\nBASE=https://api.sandbox.blendfi.com.br\nKEY=sk_test_...\n\n# 1. Create user\ncurl -X POST $BASE/v1/users \\\n  -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: u-1\" \\\n  -H \"content-type: application/json\" \\\n  -d '{\"external_id\":\"u-1\",\"name\":\"Ada\",\"cpf\":\"52998224725\"}'\n# → { \"id\": \"<user_id>\", \"kyc_status\": \"not_started\", ... }\n\n# 2. Start KYC, then force approval via test helper\ncurl -X POST $BASE/v1/users/<user_id>/kyc \\\n  -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: k-1\"\n\ncurl -X POST $BASE/v1/test_helpers/users/<user_id>/kyc \\\n  -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: th-k-1\" \\\n  -H \"content-type: application/json\" -d '{\"status\":\"approved\"}'\n\n# 3. Quote → transaction\ncurl -X POST $BASE/v1/quotes \\\n  -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: q-1\" \\\n  -H \"content-type: application/json\" \\\n  -d '{\"user_id\":\"<user_id>\",\"source_amount\":\"100.00\",\"source_currency\":\"BRL\",\"target_currency\":\"USDT\",\"destination_wallet_address\":\"0x...\",\"destination_wallet_network\":\"polygon\"}'\n\ncurl -X POST $BASE/v1/transactions \\\n  -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: t-1\" \\\n  -H \"content-type: application/json\" -d '{\"quote_id\":\"<quote_id>\"}'\n\n# 4. Drive the state machine\ncurl -X POST $BASE/v1/test_helpers/transactions/<tx_id>/pay            -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: th-pay-1\"\ncurl -X POST $BASE/v1/test_helpers/transactions/<tx_id>/fill-hedge     -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: th-hedge-1\"\ncurl -X POST $BASE/v1/test_helpers/transactions/<tx_id>/send-crypto    -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: th-send-1\"\ncurl -X POST $BASE/v1/test_helpers/transactions/<tx_id>/confirm-crypto -H \"Authorization: Bearer $KEY\" -H \"Idempotency-Key: th-done-1\"\n# → { \"status\": \"completed\", \"usdt_tx_hash\": \"0x...\", ... }\n```\n\nFailure variants: `/expire` (PIX timeout), `/fail-hedge` (FX hedge order rejected), `/fail-crypto` (on-chain revert). See the **Test Helpers** section below for the full list.\n\n## Error response shape\n\nEvery error response is JSON with this shape:\n\n```json\n{\n  \"code\": \"invalid_transaction_state\",\n  \"message\": \"Transaction cannot transition from 'buying_crypto' to 'completed'.\",\n  \"request_id\": \"01KPR9F6MM8G147177J7ZQPJHG\"\n}\n```\n\n`code` is stable, key off it in your integration. `message` may change. When opening a support ticket, include `request_id`.\n\nCommon codes:\n\n| Code | HTTP | Meaning |\n|---|---|---|\n| `validation_error` | 400 | Request body, query, or params failed schema validation (see the `details.issues` array for per-field messages) |\n| `invalid_json` | 400 | Body was not valid JSON |\n| `idempotency_key_required` | 400 | `Idempotency-Key` missing on a POST or PATCH |\n| `authentication_required` / `authentication_failed` | 401 | Missing/invalid API key |\n| `missing_capability` | 403 | Key lacks the capability required for this endpoint |\n| `user_not_found` / `quote_not_found` / `transaction_not_found` | 404 | Resource not found or out of your tenant's scope |\n| `invalid_transaction_state` | 409 | Tried to advance a transaction through a disallowed state transition |\n| `quote_already_consumed` / `quote_expired` | 409 | Quote is no longer usable; create a new one |\n| `duplicate_cpf` / `duplicate_external_id` | 409 | User uniqueness constraint violated for this partner |\n\n## Rate limits\n\nDocumented at launch. In the meantime, please be reasonable: sub-10 req/s per key in sandbox.",
      "type": "text/plain"
    }
  }
}
