{"info":{"_postman_id":"5f0c2b7e-9a41-4d8e-b6f3-1c2d3e4f5a60","name":"Bifrost Crypto API v1","description":"Every /v1 endpoint, with example bodies, example responses and authentication already set up. The requests are split in two folders: Read, with no side effects, and Write, which creates payouts, payins and fixed addresses or changes configuration.\n\n> There is no public sandbox: the collection talks to the real account of the key, and Create Payout sends real funds. payoutAddress and webhookUrl start empty, so a payout sent by accident is refused with invalid_parameters. reference_id comes from payoutReference and payinReference: sending the same request twice is refused as a duplicate instead of paying twice, so change the variable for each new operation. Start with small amounts.\n\nIf the key requires request signing, fill in signingSecret: a script of the collection adds X-Bifrost-Timestamp, X-Bifrost-Nonce and X-Bifrost-Signature to every request. Keys without signing ignore it.\n\nContract last changed on 2026-10-10. Full documentation: https://bifrostcrypto.com/en/docs · Markdown for AI agents: https://bifrostcrypto.com/ai.md","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"auth":{"type":"apikey","apikey":[{"key":"key","value":"X-Bifrost-Invoke","type":"string"},{"key":"value","value":"{{apiKey}}","type":"string"},{"key":"in","value":"header","type":"string"}]},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["// Request signing (Authentication › Request Signature). Runs only when signingSecret is set.","const secret = pm.variables.get(\"signingSecret\");","if (secret) {","  const CryptoJS = require(\"crypto-js\");","  const url = pm.variables.replaceIn(pm.request.url.toString());","  const afterHost = url.replace(/^[a-z]+:\\/\\/[^/]+/i, \"\");","  const q = afterHost.indexOf(\"?\");","  const path = q === -1 ? afterHost : afterHost.slice(0, q);","  const query = q === -1 ? \"\" : afterHost.slice(q + 1);","  const raw = pm.request.body && pm.request.body.mode === \"raw\" ? pm.request.body.raw || \"\" : \"\";","  const body = pm.variables.replaceIn(raw);","  const timestamp = Math.floor(Date.now() / 1000).toString();","  const nonce = CryptoJS.lib.WordArray.random(16).toString(CryptoJS.enc.Hex);","  const bodyHash = CryptoJS.SHA256(body).toString(CryptoJS.enc.Hex);","  const canonical = [pm.request.method.toUpperCase(), path, query, timestamp, nonce, bodyHash].join(\"\\n\");","  const signature = CryptoJS.HmacSHA256(canonical, secret).toString(CryptoJS.enc.Hex);","  pm.request.headers.upsert({ key: \"X-Bifrost-Timestamp\", value: timestamp });","  pm.request.headers.upsert({ key: \"X-Bifrost-Nonce\", value: nonce });","  pm.request.headers.upsert({ key: \"X-Bifrost-Signature\", value: signature });","}"]}}],"variable":[{"key":"baseUrl","value":"https://bridge.bifrostcrypto.com","type":"string"},{"key":"apiKey","value":"","type":"string"},{"key":"signingSecret","value":"","type":"string"},{"key":"webhookUrl","value":"","type":"string"},{"key":"payoutAddress","value":"","type":"string"},{"key":"payoutReference","value":"postman-payout-001","type":"string"},{"key":"payinReference","value":"postman-payin-001","type":"string"},{"key":"customerInfo","value":"postman-customer-001","type":"string"},{"key":"payoutInternalReference","value":"","type":"string"},{"key":"payinInternalReference","value":"","type":"string"}],"item":[{"name":"Read","description":"Queries with no side effects: listings, checks, balances, statements, prices and configuration.","item":[{"name":"Payments Payout","description":"Endpoints for creating and tracking payouts (withdrawals). POST /v1/payout takes one payout object or a list of up to 50, and always answers with a summary and one result per item.","item":[{"name":"List Payouts","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/list-payout","host":["{{baseUrl}}"],"path":["v1","list-payout"],"query":[{"key":"page","value":"1","description":"Page number, default 1. 0 or a non-numeric value is treated as 1; a negative number returns invalid_page_number.","disabled":true},{"key":"per_page","value":"50","description":"Items per page, 1 to 100, default 50. 0 or a non-numeric value is treated as 50; above 100 or negative returns invalid_per_page_limit.","disabled":true},{"key":"status","value":"pending","description":"pending, completed or failed (case-insensitive). Any other value returns invalid_status_filter. Refunded payouts are listed only without this filter.","disabled":true},{"key":"crypto_currency","value":"USDT","description":"Filter by token symbol","disabled":true},{"key":"network","value":"Ethereum","description":"Filter by a network name from the catalog, exact and case-sensitive (e.g. Ethereum, BinanceSmartChain, Tron). An unknown name returns invalid_network_filter.","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD), inclusive from 00:00:00. An unreadable date returns invalid_date_from. Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD), inclusive until 23:59:59. An unreadable date returns invalid_date_to. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"order_12345","description":"Filter by your reference_id (exact match)","disabled":true}]},"description":"Lists the payouts created through the API (payouts made in the panel are not included), newest first (created_at descending), with filters and pagination. Each payout carries the same fields as Check Specific Payout; crypto_amount is the net amount sent to the wallet and status is pending, completed, failed or refunded. summary counts pending, completed and failed payouts matching the same filters, across all pages. meta.filters echoes the filters applied, with status in its public value; dates are not echoed.\n\nRequired scope: `payout:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-payouts"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/list-payout","host":["{{baseUrl}}"],"path":["v1","list-payout"],"query":[{"key":"page","value":"1","description":"Page number, default 1. 0 or a non-numeric value is treated as 1; a negative number returns invalid_page_number.","disabled":true},{"key":"per_page","value":"50","description":"Items per page, 1 to 100, default 50. 0 or a non-numeric value is treated as 50; above 100 or negative returns invalid_per_page_limit.","disabled":true},{"key":"status","value":"pending","description":"pending, completed or failed (case-insensitive). Any other value returns invalid_status_filter. Refunded payouts are listed only without this filter.","disabled":true},{"key":"crypto_currency","value":"USDT","description":"Filter by token symbol","disabled":true},{"key":"network","value":"Ethereum","description":"Filter by a network name from the catalog, exact and case-sensitive (e.g. Ethereum, BinanceSmartChain, Tron). An unknown name returns invalid_network_filter.","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD), inclusive from 00:00:00. An unreadable date returns invalid_date_from. Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD), inclusive until 23:59:59. An unreadable date returns invalid_date_to. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"order_12345","description":"Filter by your reference_id (exact match)","disabled":true}]},"description":"Lists the payouts created through the API (payouts made in the panel are not included), newest first (created_at descending), with filters and pagination. Each payout carries the same fields as Check Specific Payout; crypto_amount is the net amount sent to the wallet and status is pending, completed, failed or refunded. summary counts pending, completed and failed payouts matching the same filters, across all pages. meta.filters echoes the filters applied, with status in its public value; dates are not echoed.\n\nRequired scope: `payout:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-payouts"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"payments_retrieved_success\",\n  \"payments\": [\n    {\n      \"internal_reference\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n      \"reference_id\": \"order_12345\",\n      \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n      \"crypto_currency\": \"USDT\",\n      \"fiat_currency\": \"USD\",\n      \"crypto_amount\": \"100.500000000000000000\",\n      \"fiat_amount\": \"100.50\",\n      \"process_by\": \"crypto_amount\",\n      \"percent_rate\": \"1.50\",\n      \"network_fee\": \"0.00100000\",\n      \"network\": \"Ethereum\",\n      \"status\": \"pending\",\n      \"txid\": null,\n      \"webhook_url\": \"https://your-site.com/webhook\",\n      \"feetakenfromamount\": \"0\",\n      \"created_at\": \"2026-01-16 10:00:00\",\n      \"updated_at\": \"2026-01-16 10:00:00\"\n    }\n  ],\n  \"summary\": {\n    \"total_pending\": 1,\n    \"total_completed\": 0,\n    \"total_failed\": 0\n  },\n  \"meta\": {\n    \"current_page\": 1,\n    \"per_page\": 50,\n    \"total\": 1,\n    \"total_pages\": 1,\n    \"filters\": {\n      \"status\": \"pending\",\n      \"crypto_currency\": \"USDT\"\n    }\n  }\n}"},{"name":"400 · Invalid query parameter","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/list-payout","host":["{{baseUrl}}"],"path":["v1","list-payout"],"query":[{"key":"page","value":"1","description":"Page number, default 1. 0 or a non-numeric value is treated as 1; a negative number returns invalid_page_number.","disabled":true},{"key":"per_page","value":"50","description":"Items per page, 1 to 100, default 50. 0 or a non-numeric value is treated as 50; above 100 or negative returns invalid_per_page_limit.","disabled":true},{"key":"status","value":"pending","description":"pending, completed or failed (case-insensitive). Any other value returns invalid_status_filter. Refunded payouts are listed only without this filter.","disabled":true},{"key":"crypto_currency","value":"USDT","description":"Filter by token symbol","disabled":true},{"key":"network","value":"Ethereum","description":"Filter by a network name from the catalog, exact and case-sensitive (e.g. Ethereum, BinanceSmartChain, Tron). An unknown name returns invalid_network_filter.","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD), inclusive from 00:00:00. An unreadable date returns invalid_date_from. Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD), inclusive until 23:59:59. An unreadable date returns invalid_date_to. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"order_12345","description":"Filter by your reference_id (exact match)","disabled":true}]},"description":"Lists the payouts created through the API (payouts made in the panel are not included), newest first (created_at descending), with filters and pagination. Each payout carries the same fields as Check Specific Payout; crypto_amount is the net amount sent to the wallet and status is pending, completed, failed or refunded. summary counts pending, completed and failed payouts matching the same filters, across all pages. meta.filters echoes the filters applied, with status in its public value; dates are not echoed.\n\nRequired scope: `payout:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-payouts"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_per_page_limit\",\n    \"message\": \"Invalid per_page value\"\n  }\n}"}]},{"name":"Check Specific Payout","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payout/{{payoutInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payout","{{payoutInternalReference}}"]},"description":"Returns one payout created through the API, by the internal_reference returned when it was created. status is pending, completed, failed or refunded, and txid is null while there is no transaction hash. crypto_amount is the net amount sent to the wallet. A payout made in the panel, or belonging to another account, returns 404.\n\nRequired scope: `payout:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payout"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payout/{{payoutInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payout","{{payoutInternalReference}}"]},"description":"Returns one payout created through the API, by the internal_reference returned when it was created. status is pending, completed, failed or refunded, and txid is null while there is no transaction hash. crypto_amount is the net amount sent to the wallet. A payout made in the panel, or belonging to another account, returns 404.\n\nRequired scope: `payout:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payout"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"payment_retrieved_success\",\n  \"payment\": {\n    \"internal_reference\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n    \"reference_id\": \"order_12345\",\n    \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.500000000000000000\",\n    \"fiat_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"percent_rate\": \"1.50\",\n    \"network_fee\": \"0.00100000\",\n    \"network\": \"Ethereum\",\n    \"status\": \"completed\",\n    \"txid\": \"0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060\",\n    \"webhook_url\": \"https://your-site.com/webhook\",\n    \"feetakenfromamount\": \"0\",\n    \"created_at\": \"2026-01-16 10:00:00\",\n    \"updated_at\": \"2026-01-16 10:05:00\"\n  }\n}"},{"name":"404 · Payout not found","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payout/{{payoutInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payout","{{payoutInternalReference}}"]},"description":"Returns one payout created through the API, by the internal_reference returned when it was created. status is pending, completed, failed or refunded, and txid is null while there is no transaction hash. crypto_amount is the net amount sent to the wallet. A payout made in the panel, or belonging to another account, returns 404.\n\nRequired scope: `payout:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payout"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"record_not_found\",\n    \"message\": \"Record not found\",\n    \"details\": {\n      \"resource\": \"payment\"\n    }\n  }\n}"},{"name":"400 · Invalid reference","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payout/{{payoutInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payout","{{payoutInternalReference}}"]},"description":"Returns one payout created through the API, by the internal_reference returned when it was created. status is pending, completed, failed or refunded, and txid is null while there is no transaction hash. crypto_amount is the net amount sent to the wallet. A payout made in the panel, or belonging to another account, returns 404.\n\nRequired scope: `payout:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payout"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_reference_id\",\n    \"message\": \"Invalid reference ID provided\"\n  }\n}"}]}]},{"name":"Deposits Payin","description":"Endpoints for managing deposits and receipts. POST /v1/payin accepts one object, or an array with a single item, and rejects a batch with 400 invalid_parameters (details.reason batch_not_allowed_use_single_object). List and check only return payins created through the API. Response status values are lowercase: pending, completed, failed, reversed (a completed deposit the network later undid; the credit was removed). A payin is marked completed once the amount received reaches minimum_payment percent of crypto_amount, so a completed payin can still be partially paid: before delivering, compare received_amount with crypto_amount (both in crypto_currency).","item":[{"name":"List Payins","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/list-payin","host":["{{baseUrl}}"],"path":["v1","list-payin"],"query":[{"key":"page","value":"1","description":"Page number (default: 1). 0 or a non-numeric value falls back to 1; a negative value returns invalid_page_number.","disabled":true},{"key":"per_page","value":"50","description":"Items per page, 1-100 (default: 50). 0 or a non-numeric value falls back to 50; above 100 or negative returns invalid_per_page_limit.","disabled":true},{"key":"status","value":"completed","description":"Filter by status: pending, completed, failed or reversed (any case). completed excludes reversed deposits. Anything else returns invalid_status_filter.","disabled":true},{"key":"crypto_currency","value":"USDT","description":"Filter by crypto currency symbol (exact match)","disabled":true},{"key":"network","value":"BinanceSmartChain","description":"Filter by a network name from the catalog, exact and case-sensitive (BinanceSmartChain, not binancesmartchain). An unknown name returns invalid_network_filter.","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD), inclusive from 00:00:00. An unparseable date returns invalid_date_from. No maximum range. Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD), inclusive until 23:59:59. An unparseable date returns invalid_date_to. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"invoice_67890","description":"Filter by reference_id (exact match)","disabled":true}]},"description":"Lists deposits created through the API (not those created in the panel), newest first (created_at descending), with filters and pagination. Answers 200 OK. summary counts pending, completed, failed and reversed deposits matching the same filters. minimum_payment is the percentage of crypto_amount that marks the payin completed; received_amount is what actually arrived, and payment_status says partial, exact or overpaid (null before any payment). A reversed deposit carries reversal with reversed_at, partial (true when part of the payin is still credited) and amounts (balance key and amount removed); reversal is null otherwise. meta.filters echoes the filters applied, with status in its public value. Fields that need explanation are described below.\n\nRequired scope: `payin:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-payins"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/list-payin","host":["{{baseUrl}}"],"path":["v1","list-payin"],"query":[{"key":"page","value":"1","description":"Page number (default: 1). 0 or a non-numeric value falls back to 1; a negative value returns invalid_page_number.","disabled":true},{"key":"per_page","value":"50","description":"Items per page, 1-100 (default: 50). 0 or a non-numeric value falls back to 50; above 100 or negative returns invalid_per_page_limit.","disabled":true},{"key":"status","value":"completed","description":"Filter by status: pending, completed, failed or reversed (any case). completed excludes reversed deposits. Anything else returns invalid_status_filter.","disabled":true},{"key":"crypto_currency","value":"USDT","description":"Filter by crypto currency symbol (exact match)","disabled":true},{"key":"network","value":"BinanceSmartChain","description":"Filter by a network name from the catalog, exact and case-sensitive (BinanceSmartChain, not binancesmartchain). An unknown name returns invalid_network_filter.","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD), inclusive from 00:00:00. An unparseable date returns invalid_date_from. No maximum range. Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD), inclusive until 23:59:59. An unparseable date returns invalid_date_to. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"invoice_67890","description":"Filter by reference_id (exact match)","disabled":true}]},"description":"Lists deposits created through the API (not those created in the panel), newest first (created_at descending), with filters and pagination. Answers 200 OK. summary counts pending, completed, failed and reversed deposits matching the same filters. minimum_payment is the percentage of crypto_amount that marks the payin completed; received_amount is what actually arrived, and payment_status says partial, exact or overpaid (null before any payment). A reversed deposit carries reversal with reversed_at, partial (true when part of the payin is still credited) and amounts (balance key and amount removed); reversal is null otherwise. meta.filters echoes the filters applied, with status in its public value. Fields that need explanation are described below.\n\nRequired scope: `payin:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-payins"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"deposits_retrieved_success\",\n  \"deposits\": [\n    {\n      \"internal_reference\": \"f531c319-6957-45c6-a154-d4944ca3eee3\",\n      \"reference_id\": \"invoice_67890\",\n      \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n      \"crypto_currency\": \"USDT\",\n      \"invoice_currency\": \"USDT\",\n      \"invoice_amount\": \"50.00\",\n      \"fiat_currency\": \"USD\",\n      \"crypto_amount\": \"50.00\",\n      \"received_amount\": \"0.00000000\",\n      \"fiat_amount\": \"50.00\",\n      \"process_by\": \"crypto_amount\",\n      \"percent_rate\": \"2.50\",\n      \"network_fee\": \"0.00000000\",\n      \"minimum_payment\": \"10.00\",\n      \"network\": \"BinanceSmartChain\",\n      \"status\": \"pending\",\n      \"payment_status\": null,\n      \"txid\": null,\n      \"payments\": [],\n      \"webhook_url\": \"https://your-site.com/webhook-deposit\",\n      \"is_wallet_fixed\": false,\n      \"reversal\": null,\n      \"created_at\": \"2026-01-16 10:00:00\",\n      \"updated_at\": \"2026-01-16 10:00:00\",\n      \"expires_at\": \"2026-01-16 14:00:00\"\n    }\n  ],\n  \"summary\": {\n    \"total_pending\": 1,\n    \"total_completed\": 0,\n    \"total_failed\": 0,\n    \"total_reversed\": 0\n  },\n  \"meta\": {\n    \"current_page\": 1,\n    \"per_page\": 50,\n    \"total\": 1,\n    \"total_pages\": 1,\n    \"filters\": {\n      \"status\": \"pending\",\n      \"crypto_currency\": \"USDT\"\n    }\n  }\n}"},{"name":"400 · Invalid filter","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/list-payin","host":["{{baseUrl}}"],"path":["v1","list-payin"],"query":[{"key":"page","value":"1","description":"Page number (default: 1). 0 or a non-numeric value falls back to 1; a negative value returns invalid_page_number.","disabled":true},{"key":"per_page","value":"50","description":"Items per page, 1-100 (default: 50). 0 or a non-numeric value falls back to 50; above 100 or negative returns invalid_per_page_limit.","disabled":true},{"key":"status","value":"completed","description":"Filter by status: pending, completed, failed or reversed (any case). completed excludes reversed deposits. Anything else returns invalid_status_filter.","disabled":true},{"key":"crypto_currency","value":"USDT","description":"Filter by crypto currency symbol (exact match)","disabled":true},{"key":"network","value":"BinanceSmartChain","description":"Filter by a network name from the catalog, exact and case-sensitive (BinanceSmartChain, not binancesmartchain). An unknown name returns invalid_network_filter.","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD), inclusive from 00:00:00. An unparseable date returns invalid_date_from. No maximum range. Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD), inclusive until 23:59:59. An unparseable date returns invalid_date_to. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"invoice_67890","description":"Filter by reference_id (exact match)","disabled":true}]},"description":"Lists deposits created through the API (not those created in the panel), newest first (created_at descending), with filters and pagination. Answers 200 OK. summary counts pending, completed, failed and reversed deposits matching the same filters. minimum_payment is the percentage of crypto_amount that marks the payin completed; received_amount is what actually arrived, and payment_status says partial, exact or overpaid (null before any payment). A reversed deposit carries reversal with reversed_at, partial (true when part of the payin is still credited) and amounts (balance key and amount removed); reversal is null otherwise. meta.filters echoes the filters applied, with status in its public value. Fields that need explanation are described below.\n\nRequired scope: `payin:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-payins"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_network_filter\",\n    \"message\": \"Invalid network filter\"\n  }\n}"}]},{"name":"Check Specific Payin","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payin/{{payinInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payin","{{payinInternalReference}}"]},"description":"Checks the status of a specific deposit by internal_reference and answers 200 OK. Only deposits created through the API are found. status is pending, completed, failed or reversed. completed means received_amount reached minimum_payment percent of crypto_amount, not necessarily the full amount: compare received_amount with crypto_amount before delivering. reversed means the network undid a payment that had been credited; reversal then gives reversed_at, partial and the amounts removed per balance key (null when there was no reversal). Unlike the list, this object does not include payments, payment_status, invoice_currency or invoice_amount. Errors: 400 invalid_reference_id when internal_reference is shorter than 10 or longer than 756 characters; 404 record_not_found (details.resource receipt) when it does not exist on your account.\n\nRequired scope: `payin:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payin"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payin/{{payinInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payin","{{payinInternalReference}}"]},"description":"Checks the status of a specific deposit by internal_reference and answers 200 OK. Only deposits created through the API are found. status is pending, completed, failed or reversed. completed means received_amount reached minimum_payment percent of crypto_amount, not necessarily the full amount: compare received_amount with crypto_amount before delivering. reversed means the network undid a payment that had been credited; reversal then gives reversed_at, partial and the amounts removed per balance key (null when there was no reversal). Unlike the list, this object does not include payments, payment_status, invoice_currency or invoice_amount. Errors: 400 invalid_reference_id when internal_reference is shorter than 10 or longer than 756 characters; 404 record_not_found (details.resource receipt) when it does not exist on your account.\n\nRequired scope: `payin:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payin"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"receipt_retrieved_success\",\n  \"receipt\": {\n    \"internal_reference\": \"f531c319-6957-45c6-a154-d4944ca3eee3\",\n    \"reference_id\": \"invoice_67890\",\n    \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"50.00000000\",\n    \"received_amount\": \"0.00000000\",\n    \"fiat_amount\": \"50.00\",\n    \"process_by\": \"crypto_amount\",\n    \"percent_rate\": \"2.50\",\n    \"network_fee\": \"0.00000000\",\n    \"minimum_payment\": \"10.00\",\n    \"network\": \"BinanceSmartChain\",\n    \"status\": \"pending\",\n    \"txid\": null,\n    \"webhook_url\": \"https://your-site.com/webhook-deposit\",\n    \"is_wallet_fixed\": false,\n    \"reversal\": null,\n    \"created_at\": \"2026-01-16 10:00:00\",\n    \"updated_at\": \"2026-01-16 10:00:00\",\n    \"expires_at\": \"2026-01-16 14:00:00\"\n  }\n}"},{"name":"200 · Partially paid","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payin/{{payinInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payin","{{payinInternalReference}}"]},"description":"Checks the status of a specific deposit by internal_reference and answers 200 OK. Only deposits created through the API are found. status is pending, completed, failed or reversed. completed means received_amount reached minimum_payment percent of crypto_amount, not necessarily the full amount: compare received_amount with crypto_amount before delivering. reversed means the network undid a payment that had been credited; reversal then gives reversed_at, partial and the amounts removed per balance key (null when there was no reversal). Unlike the list, this object does not include payments, payment_status, invoice_currency or invoice_amount. Errors: 400 invalid_reference_id when internal_reference is shorter than 10 or longer than 756 characters; 404 record_not_found (details.resource receipt) when it does not exist on your account.\n\nRequired scope: `payin:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payin"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"receipt_retrieved_success\",\n  \"receipt\": {\n    \"internal_reference\": \"f531c319-6957-45c6-a154-d4944ca3eee3\",\n    \"reference_id\": \"invoice_67890\",\n    \"crypto_currency\": \"USDT\",\n    \"crypto_amount\": \"50.00000000\",\n    \"received_amount\": \"20.00000000\",\n    \"minimum_payment\": \"10.00\",\n    \"status\": \"completed\",\n    \"reversal\": null,\n    \"...\": \"...\"\n  }\n}"},{"name":"200 · Reversed deposit","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payin/{{payinInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payin","{{payinInternalReference}}"]},"description":"Checks the status of a specific deposit by internal_reference and answers 200 OK. Only deposits created through the API are found. status is pending, completed, failed or reversed. completed means received_amount reached minimum_payment percent of crypto_amount, not necessarily the full amount: compare received_amount with crypto_amount before delivering. reversed means the network undid a payment that had been credited; reversal then gives reversed_at, partial and the amounts removed per balance key (null when there was no reversal). Unlike the list, this object does not include payments, payment_status, invoice_currency or invoice_amount. Errors: 400 invalid_reference_id when internal_reference is shorter than 10 or longer than 756 characters; 404 record_not_found (details.resource receipt) when it does not exist on your account.\n\nRequired scope: `payin:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payin"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"receipt_retrieved_success\",\n  \"receipt\": {\n    \"internal_reference\": \"f531c319-6957-45c6-a154-d4944ca3eee3\",\n    \"reference_id\": \"invoice_67890\",\n    \"status\": \"reversed\",\n    \"reversal\": {\n      \"reversed_at\": \"2026-01-16 10:12:40\",\n      \"partial\": false,\n      \"amounts\": [\n        {\n          \"balance\": \"balance_tether\",\n          \"amount\": \"48.75000000\"\n        }\n      ]\n    },\n    \"...\": \"...\"\n  }\n}"},{"name":"404 · Payin not found","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/check-payin/{{payinInternalReference}}","host":["{{baseUrl}}"],"path":["v1","check-payin","{{payinInternalReference}}"]},"description":"Checks the status of a specific deposit by internal_reference and answers 200 OK. Only deposits created through the API are found. status is pending, completed, failed or reversed. completed means received_amount reached minimum_payment percent of crypto_amount, not necessarily the full amount: compare received_amount with crypto_amount before delivering. reversed means the network undid a payment that had been credited; reversal then gives reversed_at, partial and the amounts removed per balance key (null when there was no reversal). Unlike the list, this object does not include payments, payment_status, invoice_currency or invoice_amount. Errors: 400 invalid_reference_id when internal_reference is shorter than 10 or longer than 756 characters; 404 record_not_found (details.resource receipt) when it does not exist on your account.\n\nRequired scope: `payin:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/check-payin"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"record_not_found\",\n    \"message\": \"Record not found\",\n    \"details\": {\n      \"resource\": \"receipt\"\n    }\n  }\n}"}]}]},{"name":"Queries","description":"Endpoints for querying balances, statements, and account information.","item":[{"name":"Get Balances","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/balances","host":["{{baseUrl}}"],"path":["v1","balances"]},"description":"Returns gross balances plus amounts held by deposits that are not final yet, with 200 OK. balances has one key per supported currency (balance_<name>). Which key holds each token is returned as balance_key by GET /v1/summary/tokens: there is one balance per token, shared by every network, so USDT received on any network adds up in the same key. each a decimal string with 8 places; an account that never moved funds gets the same keys at \"0.00000000\". The key set grows when a currency is added, so iterate the keys instead of hard-coding them. available and locked are always objects and only include currencies that currently have a hold; when nothing is held both are {} and the spendable amount is balances. available is balances minus locked, never below zero. A payout is checked against available when a hold exists.\n\nRequired scope: `balances:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/get-balances"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/balances","host":["{{baseUrl}}"],"path":["v1","balances"]},"description":"Returns gross balances plus amounts held by deposits that are not final yet, with 200 OK. balances has one key per supported currency (balance_<name>). Which key holds each token is returned as balance_key by GET /v1/summary/tokens: there is one balance per token, shared by every network, so USDT received on any network adds up in the same key. each a decimal string with 8 places; an account that never moved funds gets the same keys at \"0.00000000\". The key set grows when a currency is added, so iterate the keys instead of hard-coding them. available and locked are always objects and only include currencies that currently have a hold; when nothing is held both are {} and the spendable amount is balances. available is balances minus locked, never below zero. A payout is checked against available when a hold exists.\n\nRequired scope: `balances:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/get-balances"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"balances_retrieved_success\",\n  \"balances\": {\n    \"balance_bitcoin\": \"0.00000000\",\n    \"balance_avalanche\": \"5.00000000\",\n    \"balance_ethereum\": \"0.50000000\",\n    \"balance_tether\": \"1000.00000000\",\n    \"balance_usdcoin\": \"500.00000000\",\n    \"balance_brz\": \"0.00000000\",\n    \"balance_binancecoin\": \"2.00000000\",\n    \"balance_cardano\": \"0.00000000\",\n    \"balance_solana\": \"10.00000000\",\n    \"balance_polygon\": \"100.00000000\",\n    \"balance_tron\": \"50.00000000\",\n    \"balance_brl1\": \"0.00000000\",\n    \"balance_ethenausde\": \"0.00000000\",\n    \"balance_dai\": \"0.00000000\",\n    \"balance_paypalusd\": \"0.00000000\",\n    \"balance_usdd\": \"0.00000000\",\n    \"balance_eurc\": \"0.00000000\",\n    \"balance_trueusd\": \"0.00000000\",\n    \"balance_usd1\": \"0.00000000\",\n    \"balance_tethergold\": \"0.00000000\",\n    \"balance_paxgold\": \"0.00000000\",\n    \"balance_pleasurecoin\": \"0.00000000\",\n    \"balance_dolz\": \"0.00000000\",\n    \"balance_floki\": \"0.00000000\",\n    \"balance_shibainu\": \"0.00000000\",\n    \"balance_pepe\": \"0.00000000\",\n    \"balance_dogecoin\": \"0.00000000\",\n    \"balance_ton\": \"0.00000000\",\n    \"balance_monero\": \"0.00000000\",\n    \"balance_litecoin\": \"0.00000000\",\n    \"balance_cronos\": \"0.00000000\",\n    \"balance_okb\": \"0.00000000\",\n    \"balance_usdg\": \"0.00000000\"\n  },\n  \"available\": {\n    \"balance_tether\": \"900.00000000\"\n  },\n  \"locked\": {\n    \"balance_tether\": \"100.00000000\"\n  }\n}"}]},{"name":"List Statements","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/statements","host":["{{baseUrl}}"],"path":["v1","statements"],"query":[{"key":"page","value":"1","description":"Page number (default: 1)","disabled":true},{"key":"per_page","value":"50","description":"Items per page (default: 50, max: 50). Above 50 the request is refused with invalid_pagination; it is not clamped.","disabled":true},{"key":"direction","value":"out","description":"Direction: in (incoming) or out (outgoing). Lowercase, case-sensitive.","disabled":true},{"key":"type","value":"WITHDRAWAL","description":"Type: DEPOSIT (payin credit), WITHDRAWAL (payout debit), RATE (percentage fee), FEE (network fee), WITHDRAWAL_REFUND (amount of a failed payout returned to your balance), DEPOSIT_REVERSAL (credit removed after the network undid a deposit). Uppercase, case-sensitive. Any other value returns 400 invalid_parameters.","disabled":true},{"key":"balance","value":"balance_tether","description":"Filter by balance. Accepts any key returned by Get Balances (the balance_key of each token in GET /v1/summary/tokens, e.g. balance_tether for USDT); exact, case-sensitive match. Anything else is refused with 400 invalid_parameters (details.field = \"balance\").","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD, inclusive). Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD, inclusive). Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"order_12345","description":"Exact reference ID (max 255 characters)","disabled":true},{"key":"amount_from","value":"10.00","description":"Minimum amount (numeric, >= 0)","disabled":true},{"key":"amount_to","value":"1000.00","description":"Maximum amount (numeric, >= 0, not lower than amount_from)","disabled":true},{"key":"origin_type","value":"recurring_transfer","description":"Filter by the origin of the statement line. recurring_transfer selects lines created by a recurring transfer.","disabled":true}]},"description":"Lists the balance movements caused by API operations (payins, payouts, their fees, payout refunds and deposit reversals), newest first. Movements made only in the panel are not returned. Without dates, the last 30 days are returned; the widest range accepted is 90 days (inclusive). filters echoes the window actually used and adds date_range_defaulted: true when you did not send both dates. amount is a string with 8 decimals. origin is null for manual operations; on incoming lines only origin.type is kept (reference, sequence and total are null). Data can be up to 5 minutes old.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-statements"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/statements","host":["{{baseUrl}}"],"path":["v1","statements"],"query":[{"key":"page","value":"1","description":"Page number (default: 1)","disabled":true},{"key":"per_page","value":"50","description":"Items per page (default: 50, max: 50). Above 50 the request is refused with invalid_pagination; it is not clamped.","disabled":true},{"key":"direction","value":"out","description":"Direction: in (incoming) or out (outgoing). Lowercase, case-sensitive.","disabled":true},{"key":"type","value":"WITHDRAWAL","description":"Type: DEPOSIT (payin credit), WITHDRAWAL (payout debit), RATE (percentage fee), FEE (network fee), WITHDRAWAL_REFUND (amount of a failed payout returned to your balance), DEPOSIT_REVERSAL (credit removed after the network undid a deposit). Uppercase, case-sensitive. Any other value returns 400 invalid_parameters.","disabled":true},{"key":"balance","value":"balance_tether","description":"Filter by balance. Accepts any key returned by Get Balances (the balance_key of each token in GET /v1/summary/tokens, e.g. balance_tether for USDT); exact, case-sensitive match. Anything else is refused with 400 invalid_parameters (details.field = \"balance\").","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD, inclusive). Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD, inclusive). Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"order_12345","description":"Exact reference ID (max 255 characters)","disabled":true},{"key":"amount_from","value":"10.00","description":"Minimum amount (numeric, >= 0)","disabled":true},{"key":"amount_to","value":"1000.00","description":"Maximum amount (numeric, >= 0, not lower than amount_from)","disabled":true},{"key":"origin_type","value":"recurring_transfer","description":"Filter by the origin of the statement line. recurring_transfer selects lines created by a recurring transfer.","disabled":true}]},"description":"Lists the balance movements caused by API operations (payins, payouts, their fees, payout refunds and deposit reversals), newest first. Movements made only in the panel are not returned. Without dates, the last 30 days are returned; the widest range accepted is 90 days (inclusive). filters echoes the window actually used and adds date_range_defaulted: true when you did not send both dates. amount is a string with 8 decimals. origin is null for manual operations; on incoming lines only origin.type is kept (reference, sequence and total are null). Data can be up to 5 minutes old.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-statements"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"statements_retrieved_success\",\n  \"statements\": [\n    {\n      \"direction\": \"out\",\n      \"type\": \"WITHDRAWAL\",\n      \"amount\": \"150.50000000\",\n      \"balance\": \"balance_tether\",\n      \"internal_reference\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n      \"origin\": {\n        \"type\": \"recurring_transfer\",\n        \"reference\": \"RT-1a2b3c4d\",\n        \"sequence\": 3,\n        \"total\": 12\n      },\n      \"created_at\": \"2026-01-20 14:32:10\",\n      \"updated_at\": \"2026-01-20 14:32:10\",\n      \"reference_id\": \"order_12345\"\n    },\n    {\n      \"direction\": \"in\",\n      \"type\": \"DEPOSIT\",\n      \"amount\": \"1000.00000000\",\n      \"balance\": \"balance_tether\",\n      \"internal_reference\": \"f531c319-6957-45c6-a154-d4944ca3eee3\",\n      \"origin\": null,\n      \"created_at\": \"2026-01-18 09:05:44\",\n      \"updated_at\": \"2026-01-18 09:05:44\",\n      \"reference_id\": \"invoice_998\"\n    }\n  ],\n  \"filters\": {\n    \"balance\": \"balance_tether\",\n    \"date_from\": \"2026-01-01\",\n    \"date_to\": \"2026-01-31\"\n  },\n  \"meta\": {\n    \"current_page\": 1,\n    \"per_page\": 50,\n    \"total\": 2,\n    \"total_pages\": 1\n  }\n}"},{"name":"400 · Date range too wide","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/statements","host":["{{baseUrl}}"],"path":["v1","statements"],"query":[{"key":"page","value":"1","description":"Page number (default: 1)","disabled":true},{"key":"per_page","value":"50","description":"Items per page (default: 50, max: 50). Above 50 the request is refused with invalid_pagination; it is not clamped.","disabled":true},{"key":"direction","value":"out","description":"Direction: in (incoming) or out (outgoing). Lowercase, case-sensitive.","disabled":true},{"key":"type","value":"WITHDRAWAL","description":"Type: DEPOSIT (payin credit), WITHDRAWAL (payout debit), RATE (percentage fee), FEE (network fee), WITHDRAWAL_REFUND (amount of a failed payout returned to your balance), DEPOSIT_REVERSAL (credit removed after the network undid a deposit). Uppercase, case-sensitive. Any other value returns 400 invalid_parameters.","disabled":true},{"key":"balance","value":"balance_tether","description":"Filter by balance. Accepts any key returned by Get Balances (the balance_key of each token in GET /v1/summary/tokens, e.g. balance_tether for USDT); exact, case-sensitive match. Anything else is refused with 400 invalid_parameters (details.field = \"balance\").","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD, inclusive). Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD, inclusive). Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"order_12345","description":"Exact reference ID (max 255 characters)","disabled":true},{"key":"amount_from","value":"10.00","description":"Minimum amount (numeric, >= 0)","disabled":true},{"key":"amount_to","value":"1000.00","description":"Maximum amount (numeric, >= 0, not lower than amount_from)","disabled":true},{"key":"origin_type","value":"recurring_transfer","description":"Filter by the origin of the statement line. recurring_transfer selects lines created by a recurring transfer.","disabled":true}]},"description":"Lists the balance movements caused by API operations (payins, payouts, their fees, payout refunds and deposit reversals), newest first. Movements made only in the panel are not returned. Without dates, the last 30 days are returned; the widest range accepted is 90 days (inclusive). filters echoes the window actually used and adds date_range_defaulted: true when you did not send both dates. amount is a string with 8 decimals. origin is null for manual operations; on incoming lines only origin.type is kept (reference, sequence and total are null). Data can be up to 5 minutes old.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-statements"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"date_range_too_wide\",\n    \"message\": \"The requested date range exceeds the maximum allowed\",\n    \"details\": {\n      \"max_days\": 90\n    }\n  }\n}"},{"name":"400 · Invalid filter","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/statements","host":["{{baseUrl}}"],"path":["v1","statements"],"query":[{"key":"page","value":"1","description":"Page number (default: 1)","disabled":true},{"key":"per_page","value":"50","description":"Items per page (default: 50, max: 50). Above 50 the request is refused with invalid_pagination; it is not clamped.","disabled":true},{"key":"direction","value":"out","description":"Direction: in (incoming) or out (outgoing). Lowercase, case-sensitive.","disabled":true},{"key":"type","value":"WITHDRAWAL","description":"Type: DEPOSIT (payin credit), WITHDRAWAL (payout debit), RATE (percentage fee), FEE (network fee), WITHDRAWAL_REFUND (amount of a failed payout returned to your balance), DEPOSIT_REVERSAL (credit removed after the network undid a deposit). Uppercase, case-sensitive. Any other value returns 400 invalid_parameters.","disabled":true},{"key":"balance","value":"balance_tether","description":"Filter by balance. Accepts any key returned by Get Balances (the balance_key of each token in GET /v1/summary/tokens, e.g. balance_tether for USDT); exact, case-sensitive match. Anything else is refused with 400 invalid_parameters (details.field = \"balance\").","disabled":true},{"key":"date_from","value":"2026-01-01","description":"Start date (YYYY-MM-DD, inclusive). Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-01-31","description":"End date (YYYY-MM-DD, inclusive). Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00.","disabled":true},{"key":"reference_id","value":"order_12345","description":"Exact reference ID (max 255 characters)","disabled":true},{"key":"amount_from","value":"10.00","description":"Minimum amount (numeric, >= 0)","disabled":true},{"key":"amount_to","value":"1000.00","description":"Maximum amount (numeric, >= 0, not lower than amount_from)","disabled":true},{"key":"origin_type","value":"recurring_transfer","description":"Filter by the origin of the statement line. recurring_transfer selects lines created by a recurring transfer.","disabled":true}]},"description":"Lists the balance movements caused by API operations (payins, payouts, their fees, payout refunds and deposit reversals), newest first. Movements made only in the panel are not returned. Without dates, the last 30 days are returned; the widest range accepted is 90 days (inclusive). filters echoes the window actually used and adds date_range_defaulted: true when you did not send both dates. amount is a string with 8 decimals. origin is null for manual operations; on incoming lines only origin.type is kept (reference, sequence and total are null). Data can be up to 5 minutes old.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-statements"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_parameters\",\n    \"message\": \"Invalid parameters provided\",\n    \"details\": {\n      \"field\": \"balance\"\n    }\n  }\n}"}]},{"name":"Statements Summary","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/statements/summary","host":["{{baseUrl}}"],"path":["v1","statements","summary"],"query":[{"key":"date_from","value":"2026-01-01","description":"Start date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-03-31","description":"End date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00.","disabled":true}]},"description":"Returns counts and aggregated amounts of the same movements List Statements returns, grouped by balance (currency). Only balances, directions and types with records in the period are included in the response. Without dates, the last 30 days are summarised; the widest range accepted is 90 days (inclusive). total_amount is a string with 8 decimals. With no records in the period, by_balance is an empty array ([]), not an object. Data can be up to 5 minutes old.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/statements-summary"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/statements/summary","host":["{{baseUrl}}"],"path":["v1","statements","summary"],"query":[{"key":"date_from","value":"2026-01-01","description":"Start date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-03-31","description":"End date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00.","disabled":true}]},"description":"Returns counts and aggregated amounts of the same movements List Statements returns, grouped by balance (currency). Only balances, directions and types with records in the period are included in the response. Without dates, the last 30 days are summarised; the widest range accepted is 90 days (inclusive). total_amount is a string with 8 decimals. With no records in the period, by_balance is an empty array ([]), not an object. Data can be up to 5 minutes old.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/statements-summary"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"statement_summary_retrieved_success\",\n  \"filters\": {\n    \"date_from\": \"2026-01-01\",\n    \"date_to\": \"2026-03-31\"\n  },\n  \"summary\": {\n    \"by_balance\": {\n      \"balance_bitcoin\": {\n        \"total_count\": 16,\n        \"by_direction\": {\n          \"in\": {\n            \"count\": 12,\n            \"total_amount\": \"0.05000000\"\n          },\n          \"out\": {\n            \"count\": 4,\n            \"total_amount\": \"0.02000000\"\n          }\n        },\n        \"by_type\": {\n          \"DEPOSIT\": {\n            \"count\": 10,\n            \"total_amount\": \"0.04000000\"\n          },\n          \"WITHDRAWAL\": {\n            \"count\": 4,\n            \"total_amount\": \"0.02000000\"\n          },\n          \"FEE\": {\n            \"count\": 1,\n            \"total_amount\": \"0.00100000\"\n          },\n          \"RATE\": {\n            \"count\": 1,\n            \"total_amount\": \"0.00050000\"\n          }\n        }\n      },\n      \"balance_ethereum\": {\n        \"total_count\": 8,\n        \"by_direction\": {\n          \"in\": {\n            \"count\": 5,\n            \"total_amount\": \"1.20000000\"\n          },\n          \"out\": {\n            \"count\": 3,\n            \"total_amount\": \"0.50000000\"\n          }\n        },\n        \"by_type\": {\n          \"DEPOSIT\": {\n            \"count\": 5,\n            \"total_amount\": \"1.20000000\"\n          },\n          \"WITHDRAWAL\": {\n            \"count\": 3,\n            \"total_amount\": \"0.50000000\"\n          }\n        }\n      }\n    },\n    \"totals\": {\n      \"total_statements\": 24,\n      \"balances_used\": [\n        \"balance_bitcoin\",\n        \"balance_ethereum\"\n      ]\n    }\n  }\n}"},{"name":"200 · Called without dates","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/statements/summary","host":["{{baseUrl}}"],"path":["v1","statements","summary"],"query":[{"key":"date_from","value":"2026-01-01","description":"Start date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-03-31","description":"End date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00.","disabled":true}]},"description":"Returns counts and aggregated amounts of the same movements List Statements returns, grouped by balance (currency). Only balances, directions and types with records in the period are included in the response. Without dates, the last 30 days are summarised; the widest range accepted is 90 days (inclusive). total_amount is a string with 8 decimals. With no records in the period, by_balance is an empty array ([]), not an object. Data can be up to 5 minutes old.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/statements-summary"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"statement_summary_retrieved_success\",\n  \"filters\": {\n    \"date_from\": \"2026-08-13\",\n    \"date_to\": \"2026-09-11\",\n    \"date_range_defaulted\": true\n  },\n  \"summary\": {\n    \"...\": \"...\"\n  }\n}"},{"name":"400 · Date range too wide","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/statements/summary","host":["{{baseUrl}}"],"path":["v1","statements","summary"],"query":[{"key":"date_from","value":"2026-01-01","description":"Start date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00.","disabled":true},{"key":"date_to","value":"2026-03-31","description":"End date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00.","disabled":true}]},"description":"Returns counts and aggregated amounts of the same movements List Statements returns, grouped by balance (currency). Only balances, directions and types with records in the period are included in the response. Without dates, the last 30 days are summarised; the widest range accepted is 90 days (inclusive). total_amount is a string with 8 decimals. With no records in the period, by_balance is an empty array ([]), not an object. Data can be up to 5 minutes old.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/statements-summary"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"date_range_too_wide\",\n    \"message\": \"The requested date range exceeds the maximum allowed\",\n    \"details\": {\n      \"max_days\": 90\n    }\n  }\n}"}]},{"name":"Complete Summary","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/summary","host":["{{baseUrl}}"],"path":["v1","summary"]},"description":"Returns complete summary including accepted tokens and their configurations, accepted fiats, user information (fees, settings), and user-specific network rates. user_info.minimum_payment is the percentage of a payin's crypto_amount that must arrive for it to be marked completed (100 = the full amount, also used when the account has no value set). Rates and limits are numeric strings without trailing zeros (\"1\", \"2.5\"). network_rates is keyed by network and only lists networks with an override; its user_pays_* flags are null when the network inherits the account setting. With no overrides, network_rates is an empty array ([]), not an object. Data can be up to 5 minutes old. Rates are explained below. accepted_tokens follows the same rules as Accepted Tokens: This is the platform catalogue of active tokens, one entry per token and network. It is not filtered by your account and does not say whether a token accepts deposits, payouts or both on that network. Availability is checked when you create the operation: a payin needs the token enabled on your account and deposits active on that network (otherwise invalid_parameters on crypto_currency, unsupported_token_or_deposits_disabled or token_network_mismatch); a payout needs withdrawals active on that network (otherwise invalid_parameters, unsupported_token_or_withdrawals_disabled or token_network_mismatch). balance_key is the key of the token in GET /v1/balances and in the balance filter of List Statements.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/complete-summary"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/summary","host":["{{baseUrl}}"],"path":["v1","summary"]},"description":"Returns complete summary including accepted tokens and their configurations, accepted fiats, user information (fees, settings), and user-specific network rates. user_info.minimum_payment is the percentage of a payin's crypto_amount that must arrive for it to be marked completed (100 = the full amount, also used when the account has no value set). Rates and limits are numeric strings without trailing zeros (\"1\", \"2.5\"). network_rates is keyed by network and only lists networks with an override; its user_pays_* flags are null when the network inherits the account setting. With no overrides, network_rates is an empty array ([]), not an object. Data can be up to 5 minutes old. Rates are explained below. accepted_tokens follows the same rules as Accepted Tokens: This is the platform catalogue of active tokens, one entry per token and network. It is not filtered by your account and does not say whether a token accepts deposits, payouts or both on that network. Availability is checked when you create the operation: a payin needs the token enabled on your account and deposits active on that network (otherwise invalid_parameters on crypto_currency, unsupported_token_or_deposits_disabled or token_network_mismatch); a payout needs withdrawals active on that network (otherwise invalid_parameters, unsupported_token_or_withdrawals_disabled or token_network_mismatch). balance_key is the key of the token in GET /v1/balances and in the balance filter of List Statements.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/complete-summary"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"summary_retrieved_success\",\n  \"data\": {\n    \"accepted_tokens\": [\n      {\n        \"symbol\": \"USDT\",\n        \"contract_address\": \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n        \"network\": \"Ethereum\",\n        \"variant\": null,\n        \"balance_key\": \"balance_tether\",\n        \"min_receipt\": \"10\",\n        \"max_receipt\": \"unlimited\",\n        \"min_withdrawal\": \"20\",\n        \"max_withdrawal\": \"50000\",\n        \"network_fee\": \"0.001\"\n      }\n    ],\n    \"accepted_fiats\": [\n      {\n        \"code\": \"USD\",\n        \"name\": \"US Dollar\",\n        \"symbol\": \"$\"\n      }\n    ],\n    \"user_info\": {\n      \"minimum_payment\": \"10\",\n      \"receipt_rate\": \"2.5\",\n      \"payment_rate\": \"1.5\",\n      \"deposit_rate\": \"2.5\",\n      \"withdrawal_rate\": \"1.5\",\n      \"user_pays_payment_network_fee\": true,\n      \"user_pays_receipt_network_fee\": false,\n      \"user_pays_deposit_network_fee\": false,\n      \"user_pays_withdrawal_network_fee\": true\n    },\n    \"network_rates\": {\n      \"Ethereum\": {\n        \"payment_rate\": \"1\",\n        \"receipt_rate\": \"2\",\n        \"deposit_rate\": \"2\",\n        \"withdrawal_rate\": \"1\",\n        \"user_pays_payment_network_fee\": true,\n        \"user_pays_receipt_network_fee\": null,\n        \"user_pays_deposit_network_fee\": null,\n        \"user_pays_withdrawal_network_fee\": null\n      }\n    },\n    \"summary_stats\": {\n      \"total_tokens\": 15,\n      \"total_fiats\": 5,\n      \"total_network_overrides\": 1,\n      \"generated_at\": \"2026-01-16 10:00:00\"\n    }\n  }\n}"},{"name":"503 · Token or fiat catalogue unavailable","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/summary","host":["{{baseUrl}}"],"path":["v1","summary"]},"description":"Returns complete summary including accepted tokens and their configurations, accepted fiats, user information (fees, settings), and user-specific network rates. user_info.minimum_payment is the percentage of a payin's crypto_amount that must arrive for it to be marked completed (100 = the full amount, also used when the account has no value set). Rates and limits are numeric strings without trailing zeros (\"1\", \"2.5\"). network_rates is keyed by network and only lists networks with an override; its user_pays_* flags are null when the network inherits the account setting. With no overrides, network_rates is an empty array ([]), not an object. Data can be up to 5 minutes old. Rates are explained below. accepted_tokens follows the same rules as Accepted Tokens: This is the platform catalogue of active tokens, one entry per token and network. It is not filtered by your account and does not say whether a token accepts deposits, payouts or both on that network. Availability is checked when you create the operation: a payin needs the token enabled on your account and deposits active on that network (otherwise invalid_parameters on crypto_currency, unsupported_token_or_deposits_disabled or token_network_mismatch); a payout needs withdrawals active on that network (otherwise invalid_parameters, unsupported_token_or_withdrawals_disabled or token_network_mismatch). balance_key is the key of the token in GET /v1/balances and in the balance filter of List Statements.\n\nRequired scope: `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/complete-summary"},"status":"Service Unavailable","code":503,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"service_unavailable\",\n    \"message\": \"Service temporarily unavailable\"\n  }\n}"}]},{"name":"Accepted Tokens","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/summary/tokens","host":["{{baseUrl}}"],"path":["v1","summary","tokens"]},"description":"Returns only the list of accepted tokens with their configurations. This is the platform catalogue of active tokens, one entry per token and network. It is not filtered by your account and does not say whether a token accepts deposits, payouts or both on that network. Availability is checked when you create the operation: a payin needs the token enabled on your account and deposits active on that network (otherwise invalid_parameters on crypto_currency, unsupported_token_or_deposits_disabled or token_network_mismatch); a payout needs withdrawals active on that network (otherwise invalid_parameters, unsupported_token_or_withdrawals_disabled or token_network_mismatch). balance_key is the key of the token in GET /v1/balances and in the balance filter of List Statements. variant is the on-chain contract variant (lowercase) or null. Limits and network_fee are numeric strings without trailing zeros; max_receipt and max_withdrawal mean no ceiling when they are \"unlimited\", \"0\" or null. If the catalogue cannot be loaded, the answer is 503 service_unavailable; an unexpected failure is 500 internal_error.\n\nRequired scope: `prices:read` or `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/accepted-tokens"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/summary/tokens","host":["{{baseUrl}}"],"path":["v1","summary","tokens"]},"description":"Returns only the list of accepted tokens with their configurations. This is the platform catalogue of active tokens, one entry per token and network. It is not filtered by your account and does not say whether a token accepts deposits, payouts or both on that network. Availability is checked when you create the operation: a payin needs the token enabled on your account and deposits active on that network (otherwise invalid_parameters on crypto_currency, unsupported_token_or_deposits_disabled or token_network_mismatch); a payout needs withdrawals active on that network (otherwise invalid_parameters, unsupported_token_or_withdrawals_disabled or token_network_mismatch). balance_key is the key of the token in GET /v1/balances and in the balance filter of List Statements. variant is the on-chain contract variant (lowercase) or null. Limits and network_fee are numeric strings without trailing zeros; max_receipt and max_withdrawal mean no ceiling when they are \"unlimited\", \"0\" or null. If the catalogue cannot be loaded, the answer is 503 service_unavailable; an unexpected failure is 500 internal_error.\n\nRequired scope: `prices:read` or `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/accepted-tokens"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"tokens_retrieved_success\",\n  \"tokens\": [\n    {\n      \"symbol\": \"USDT\",\n      \"contract_address\": \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n      \"network\": \"Ethereum\",\n      \"variant\": null,\n      \"balance_key\": \"balance_tether\",\n      \"min_receipt\": \"10\",\n      \"max_receipt\": \"unlimited\",\n      \"min_withdrawal\": \"20\",\n      \"max_withdrawal\": \"50000\",\n      \"network_fee\": \"0.001\"\n    }\n  ],\n  \"meta\": {\n    \"total\": 15,\n    \"generated_at\": \"2026-01-16 10:00:00\"\n  }\n}"}]},{"name":"Accepted Fiats","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/summary/fiats","host":["{{baseUrl}}"],"path":["v1","summary","fiats"]},"description":"Returns only the list of accepted fiat currencies. If the catalogue cannot be loaded, the answer is 503 service_unavailable; an unexpected failure is 500 internal_error.\n\nRequired scope: `prices:read` or `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/accepted-fiats"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/summary/fiats","host":["{{baseUrl}}"],"path":["v1","summary","fiats"]},"description":"Returns only the list of accepted fiat currencies. If the catalogue cannot be loaded, the answer is 503 service_unavailable; an unexpected failure is 500 internal_error.\n\nRequired scope: `prices:read` or `statements:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/accepted-fiats"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"fiats_retrieved_success\",\n  \"fiats\": [\n    {\n      \"code\": \"USD\",\n      \"name\": \"US Dollar\",\n      \"symbol\": \"$\"\n    },\n    {\n      \"code\": \"EUR\",\n      \"name\": \"Euro\",\n      \"symbol\": \"€\"\n    },\n    {\n      \"code\": \"BRL\",\n      \"name\": \"Brazilian Real\",\n      \"symbol\": \"R$\"\n    }\n  ],\n  \"meta\": {\n    \"total\": 5,\n    \"generated_at\": \"2026-01-16 10:00:00\"\n  }\n}"}]}]},{"name":"Prices","description":"Endpoints for querying prices and exchange rates between currencies. Prices are strings in pt-BR number format (\"65.432,10\").","item":[{"name":"Get Price","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/get-price?currency1=USDT&currency2=USD","host":["{{baseUrl}}"],"path":["v1","get-price"],"query":[{"key":"currency1","value":"USDT","description":"Source currency (crypto or fiat). Letters and digits, 2 to 16 characters; trimmed and uppercased before lookup, so usdt is accepted.","disabled":false},{"key":"currency2","value":"USD","description":"Target currency (crypto or fiat). Same format as currency1.","disabled":false}]},"description":"Gets the conversion price between two currencies (crypto or fiat). Conversion types: same_currency, crypto_to_fiat, fiat, crypto_to_crypto, reversed_* (the inverse of a stored quote, e.g. reversed_crypto_to_fiat for USD to USDT). price is always a string in pt-BR number format: comma as decimal separator and dot as thousands separator. Decimals: same_currency is always \"1,00\"; fiat has 6 decimals; crypto_to_fiat, crypto_to_crypto and reversed_* have 2 decimals when the value is 1 or more (\"65.432,10\") and 8 significant digits below 1 (\"0,000012340000\" for a token worth 0.00001234), so low-value tokens never read as zero. Do not parseFloat it directly (\"65.432,10\" would read as 65.432): remove the dots, then replace the comma with a dot. Identical currency codes always answer same_currency, even for a code that is not listed.\n\nRequired scope: `prices:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/get-price"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/get-price?currency1=USDT&currency2=USD","host":["{{baseUrl}}"],"path":["v1","get-price"],"query":[{"key":"currency1","value":"USDT","description":"Source currency (crypto or fiat). Letters and digits, 2 to 16 characters; trimmed and uppercased before lookup, so usdt is accepted.","disabled":false},{"key":"currency2","value":"USD","description":"Target currency (crypto or fiat). Same format as currency1.","disabled":false}]},"description":"Gets the conversion price between two currencies (crypto or fiat). Conversion types: same_currency, crypto_to_fiat, fiat, crypto_to_crypto, reversed_* (the inverse of a stored quote, e.g. reversed_crypto_to_fiat for USD to USDT). price is always a string in pt-BR number format: comma as decimal separator and dot as thousands separator. Decimals: same_currency is always \"1,00\"; fiat has 6 decimals; crypto_to_fiat, crypto_to_crypto and reversed_* have 2 decimals when the value is 1 or more (\"65.432,10\") and 8 significant digits below 1 (\"0,000012340000\" for a token worth 0.00001234), so low-value tokens never read as zero. Do not parseFloat it directly (\"65.432,10\" would read as 65.432): remove the dots, then replace the comma with a dot. Identical currency codes always answer same_currency, even for a code that is not listed.\n\nRequired scope: `prices:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/get-price"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"success\": true,\n  \"data\": {\n    \"from\": \"USDT\",\n    \"to\": \"USD\",\n    \"price\": \"1,00\",\n    \"type\": \"crypto_to_fiat\",\n    \"last_updated\": \"2026-01-16T10:00:00-03:00\"\n  }\n}"},{"name":"404 · Price not found","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/get-price?currency1=USDT&currency2=USD","host":["{{baseUrl}}"],"path":["v1","get-price"],"query":[{"key":"currency1","value":"USDT","description":"Source currency (crypto or fiat). Letters and digits, 2 to 16 characters; trimmed and uppercased before lookup, so usdt is accepted.","disabled":false},{"key":"currency2","value":"USD","description":"Target currency (crypto or fiat). Same format as currency1.","disabled":false}]},"description":"Gets the conversion price between two currencies (crypto or fiat). Conversion types: same_currency, crypto_to_fiat, fiat, crypto_to_crypto, reversed_* (the inverse of a stored quote, e.g. reversed_crypto_to_fiat for USD to USDT). price is always a string in pt-BR number format: comma as decimal separator and dot as thousands separator. Decimals: same_currency is always \"1,00\"; fiat has 6 decimals; crypto_to_fiat, crypto_to_crypto and reversed_* have 2 decimals when the value is 1 or more (\"65.432,10\") and 8 significant digits below 1 (\"0,000012340000\" for a token worth 0.00001234), so low-value tokens never read as zero. Do not parseFloat it directly (\"65.432,10\" would read as 65.432): remove the dots, then replace the comma with a dot. Identical currency codes always answer same_currency, even for a code that is not listed.\n\nRequired scope: `prices:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/get-price"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"price_not_found\",\n    \"message\": \"Price not found for USDT/XYZ\"\n  }\n}"},{"name":"400 · Invalid parameters","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/get-price?currency1=USDT&currency2=USD","host":["{{baseUrl}}"],"path":["v1","get-price"],"query":[{"key":"currency1","value":"USDT","description":"Source currency (crypto or fiat). Letters and digits, 2 to 16 characters; trimmed and uppercased before lookup, so usdt is accepted.","disabled":false},{"key":"currency2","value":"USD","description":"Target currency (crypto or fiat). Same format as currency1.","disabled":false}]},"description":"Gets the conversion price between two currencies (crypto or fiat). Conversion types: same_currency, crypto_to_fiat, fiat, crypto_to_crypto, reversed_* (the inverse of a stored quote, e.g. reversed_crypto_to_fiat for USD to USDT). price is always a string in pt-BR number format: comma as decimal separator and dot as thousands separator. Decimals: same_currency is always \"1,00\"; fiat has 6 decimals; crypto_to_fiat, crypto_to_crypto and reversed_* have 2 decimals when the value is 1 or more (\"65.432,10\") and 8 significant digits below 1 (\"0,000012340000\" for a token worth 0.00001234), so low-value tokens never read as zero. Do not parseFloat it directly (\"65.432,10\" would read as 65.432): remove the dots, then replace the comma with a dot. Identical currency codes always answer same_currency, even for a code that is not listed.\n\nRequired scope: `prices:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/get-price"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_currency\",\n    \"message\": \"Parameter currency2 is not a valid currency code\"\n  }\n}"}]},{"name":"List Available Currencies","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/get-currencies","host":["{{baseUrl}}"],"path":["v1","get-currencies"]},"description":"Lists all available currencies (crypto and fiat) for price queries. Active fiats come first, then each active crypto symbol once (even when the token runs on several networks), sorted by symbol. For cryptos, name repeats the symbol. An unexpected failure answers 500 internal_error.\n\nRequired scope: `prices:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/get-currencies"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/get-currencies","host":["{{baseUrl}}"],"path":["v1","get-currencies"]},"description":"Lists all available currencies (crypto and fiat) for price queries. Active fiats come first, then each active crypto symbol once (even when the token runs on several networks), sorted by symbol. For cryptos, name repeats the symbol. An unexpected failure answers 500 internal_error.\n\nRequired scope: `prices:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/get-currencies"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"success\": true,\n  \"data\": {\n    \"currencies\": [\n      {\n        \"currency\": \"USD\",\n        \"name\": \"US Dollar\",\n        \"type\": \"fiat\"\n      },\n      {\n        \"currency\": \"BTC\",\n        \"name\": \"BTC\",\n        \"type\": \"crypto\"\n      },\n      {\n        \"currency\": \"USDT\",\n        \"name\": \"USDT\",\n        \"type\": \"crypto\"\n      }\n    ],\n    \"total\": 20\n  }\n}"}]}]},{"name":"Fixed Wallets","description":"Endpoints for managing fixed (permanent) deposit addresses assigned per customer. Every transfer to a fixed address becomes a completed payin and is notified to the fixed-address webhook URL set in the panel; see Receiving on a fixed address under Create Fixed Wallet.","item":[{"name":"Supported Networks","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets/supported","host":["{{baseUrl}}"],"path":["v1","fixed-wallets","supported"]},"description":"Returns the networks and tokens enabled for fixed addresses.\n\nRequired scope: `wallets:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/fixed-wallets-supported"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets/supported","host":["{{baseUrl}}"],"path":["v1","fixed-wallets","supported"]},"description":"Returns the networks and tokens enabled for fixed addresses.\n\nRequired scope: `wallets:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/fixed-wallets-supported"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"fixed_wallets_supported_success\",\n  \"supported\": [\n    {\n      \"type\": \"evm\",\n      \"label\": \"EVM\",\n      \"networks\": [\n        \"Ethereum\",\n        \"BinanceSmartChain\"\n      ],\n      \"tokens\": [\n        {\n          \"network\": \"Ethereum\",\n          \"token\": \"USDT\",\n          \"symbol\": \"USDT\"\n        },\n        {\n          \"network\": \"BinanceSmartChain\",\n          \"token\": \"USDT\",\n          \"symbol\": \"USDT\"\n        }\n      ]\n    },\n    {\n      \"type\": \"tron\",\n      \"label\": \"Tron\",\n      \"networks\": [\n        \"Tron\"\n      ],\n      \"tokens\": [\n        {\n          \"network\": \"Tron\",\n          \"token\": \"USDT\",\n          \"symbol\": \"USDT\"\n        }\n      ]\n    }\n  ]\n}"}]},{"name":"Get Config","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets/config","host":["{{baseUrl}}"],"path":["v1","fixed-wallets","config"]},"description":"Returns the user's fixed addresses config (limits, enabled status and webhook_url). Per-type maps are null when the account uses the single global limit. When a per-type map is set it replaces the global limit of that origin, and types missing from the map cannot be created. Returns 403 feature_disabled if the feature is disabled for the user.\n\nRequired scope: `wallets:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/fixed-wallets-config-get"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets/config","host":["{{baseUrl}}"],"path":["v1","fixed-wallets","config"]},"description":"Returns the user's fixed addresses config (limits, enabled status and webhook_url). Per-type maps are null when the account uses the single global limit. When a per-type map is set it replaces the global limit of that origin, and types missing from the map cannot be created. Returns 403 feature_disabled if the feature is disabled for the user.\n\nRequired scope: `wallets:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/fixed-wallets-config-get"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"fixed_wallets_config_success\",\n  \"config\": {\n    \"enabled\": 1,\n    \"max_wallets_panel\": 5,\n    \"max_wallets_panel_per_type\": null,\n    \"max_wallets_external_api\": 1000,\n    \"max_wallets_external_api_per_type\": {\n      \"evm\": 800,\n      \"tron\": 200\n    },\n    \"webhook_url\": \"https://your-site.com/webhook-fixed-wallets\"\n  }\n}"},{"name":"403 · Feature disabled","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets/config","host":["{{baseUrl}}"],"path":["v1","fixed-wallets","config"]},"description":"Returns the user's fixed addresses config (limits, enabled status and webhook_url). Per-type maps are null when the account uses the single global limit. When a per-type map is set it replaces the global limit of that origin, and types missing from the map cannot be created. Returns 403 feature_disabled if the feature is disabled for the user.\n\nRequired scope: `wallets:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/fixed-wallets-config-get"},"status":"Forbidden","code":403,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"feature_disabled\",\n    \"message\": \"This feature is not enabled for the account\"\n  }\n}"}]},{"name":"List Fixed Wallets","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets","host":["{{baseUrl}}"],"path":["v1","fixed-wallets"],"query":[{"key":"type","value":"evm","description":"Filter by wallet type, lowercase exact match (e.g.: evm, tron, bitcoin)","disabled":true},{"key":"status","value":"STATUS_ASSIGNED","description":"Filter by status: STATUS_ASSIGNED (active) or STATUS_REVOKED (revoked after inactivity)","disabled":true},{"key":"customer_info","value":"customer123","description":"Filter by customer identifier (exact match)","disabled":true},{"key":"limit","value":"100","description":"Items to return (default: 100). Out-of-range values are clamped to 1..500, not refused.","disabled":true},{"key":"offset","value":"0","description":"Number of items to skip (default: 0). Negative values become 0.","disabled":true}]},"description":"Lists the fixed addresses assigned to your account via the external API, with optional filters, newest first. Addresses created in the panel are not listed. count is the number of items in this page, not a grand total. allowance is the remaining creation budget for the external API origin, in one of two shapes: mode global ({limit, used, remaining, supported_types}, shared by every type) or mode per_type ({items: [{type, label, limit, used, remaining}]}, one entry per type you may create). allowance is null when fixed addresses are not enabled for the account (the list itself still answers 200). In global mode used counts every address ever assigned through the API, revoked ones included; in per_type mode only addresses still in STATUS_ASSIGNED count.\n\nRequired scope: `wallets:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-fixed-wallets"},"response":[{"name":"Success","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets","host":["{{baseUrl}}"],"path":["v1","fixed-wallets"],"query":[{"key":"type","value":"evm","description":"Filter by wallet type, lowercase exact match (e.g.: evm, tron, bitcoin)","disabled":true},{"key":"status","value":"STATUS_ASSIGNED","description":"Filter by status: STATUS_ASSIGNED (active) or STATUS_REVOKED (revoked after inactivity)","disabled":true},{"key":"customer_info","value":"customer123","description":"Filter by customer identifier (exact match)","disabled":true},{"key":"limit","value":"100","description":"Items to return (default: 100). Out-of-range values are clamped to 1..500, not refused.","disabled":true},{"key":"offset","value":"0","description":"Number of items to skip (default: 0). Negative values become 0.","disabled":true}]},"description":"Lists the fixed addresses assigned to your account via the external API, with optional filters, newest first. Addresses created in the panel are not listed. count is the number of items in this page, not a grand total. allowance is the remaining creation budget for the external API origin, in one of two shapes: mode global ({limit, used, remaining, supported_types}, shared by every type) or mode per_type ({items: [{type, label, limit, used, remaining}]}, one entry per type you may create). allowance is null when fixed addresses are not enabled for the account (the list itself still answers 200). In global mode used counts every address ever assigned through the API, revoked ones included; in per_type mode only addresses still in STATUS_ASSIGNED count.\n\nRequired scope: `wallets:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-fixed-wallets"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"fixed_wallets_list_success\",\n  \"wallets\": [\n    {\n      \"customer_info\": \"customer123\",\n      \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n      \"type\": \"evm\",\n      \"status\": \"STATUS_ASSIGNED\",\n      \"origin\": \"external_api\",\n      \"last_transaction_at\": null,\n      \"created_at\": \"2026-01-16 10:00:00\",\n      \"updated_at\": \"2026-01-16 10:00:00\",\n      \"networks\": [\n        \"Ethereum\",\n        \"BinanceSmartChain\"\n      ],\n      \"accepted_tokens\": [\n        {\n          \"network\": \"Ethereum\",\n          \"token\": \"USDT\",\n          \"symbol\": \"USDT\"\n        },\n        {\n          \"network\": \"BinanceSmartChain\",\n          \"token\": \"USDT\",\n          \"symbol\": \"USDT\"\n        }\n      ],\n      \"pending_revocation\": false,\n      \"revoke_at\": null\n    }\n  ],\n  \"count\": 1,\n  \"allowance\": {\n    \"mode\": \"global\",\n    \"limit\": 1000,\n    \"used\": 1,\n    \"remaining\": 999,\n    \"supported_types\": [\n      {\n        \"type\": \"evm\",\n        \"label\": \"EVM\"\n      },\n      {\n        \"type\": \"tron\",\n        \"label\": \"Tron\"\n      }\n    ]\n  }\n}"},{"name":"200 · Per-type allowance","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets","host":["{{baseUrl}}"],"path":["v1","fixed-wallets"],"query":[{"key":"type","value":"evm","description":"Filter by wallet type, lowercase exact match (e.g.: evm, tron, bitcoin)","disabled":true},{"key":"status","value":"STATUS_ASSIGNED","description":"Filter by status: STATUS_ASSIGNED (active) or STATUS_REVOKED (revoked after inactivity)","disabled":true},{"key":"customer_info","value":"customer123","description":"Filter by customer identifier (exact match)","disabled":true},{"key":"limit","value":"100","description":"Items to return (default: 100). Out-of-range values are clamped to 1..500, not refused.","disabled":true},{"key":"offset","value":"0","description":"Number of items to skip (default: 0). Negative values become 0.","disabled":true}]},"description":"Lists the fixed addresses assigned to your account via the external API, with optional filters, newest first. Addresses created in the panel are not listed. count is the number of items in this page, not a grand total. allowance is the remaining creation budget for the external API origin, in one of two shapes: mode global ({limit, used, remaining, supported_types}, shared by every type) or mode per_type ({items: [{type, label, limit, used, remaining}]}, one entry per type you may create). allowance is null when fixed addresses are not enabled for the account (the list itself still answers 200). In global mode used counts every address ever assigned through the API, revoked ones included; in per_type mode only addresses still in STATUS_ASSIGNED count.\n\nRequired scope: `wallets:read`.\n\nFull reference: https://bifrostcrypto.com/en/docs/list-fixed-wallets"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"fixed_wallets_list_success\",\n  \"wallets\": [],\n  \"count\": 0,\n  \"allowance\": {\n    \"mode\": \"per_type\",\n    \"items\": [\n      {\n        \"type\": \"evm\",\n        \"label\": \"EVM\",\n        \"limit\": 800,\n        \"used\": 12,\n        \"remaining\": 788\n      },\n      {\n        \"type\": \"tron\",\n        \"label\": \"Tron\",\n        \"limit\": 200,\n        \"used\": 0,\n        \"remaining\": 200\n      }\n    ]\n  }\n}"}]}]}]},{"name":"Write","description":"Creates payouts, payins and fixed addresses, or changes configuration, on the real account of the key. There is no public sandbox.","item":[{"name":"Payments Payout","description":"Endpoints for creating and tracking payouts (withdrawals). POST /v1/payout takes one payout object or a list of up to 50, and always answers with a summary and one result per item.","item":[{"name":"Create Payout Single","event":[{"listen":"test","script":{"type":"text/javascript","exec":["// Guarda o internal_reference do primeiro payout criado para Check Specific Payout.","const body = pm.response.json();","const created = (body && Array.isArray(body.results) ? body.results : []).find((r) => r.internal_reference && !r.error);","if (created) {","  pm.collectionVariables.set(\"payoutInternalReference\", created.internal_reference);","}"]}}],"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the request runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body instead of processing again, even if the body differs. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx or 500), so a retry with the same key is processed normally."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"{\n  \"wallet\": \"{{payoutAddress}}\",\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"100.50\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payoutReference}}\",\n  \"network\": \"Ethereum\",\n  \"feetakenfromamount\": 0,\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer123\"\n}","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Fill in payoutAddress and webhookUrl first. reference_id comes from payoutReference: change it for each new payout.\n\nCreates one payout (withdrawal) to a destination wallet. The body is a single payout object, and the response has the same shape as a batch of one: 200 when the payout is created, 400 when it is refused. A refusal after validation comes in results[0].error, not at the top level; only request-level problems (invalid parameters, balance pre-check, malformed body) answer with a top-level error. In a created result, crypto_amount is the net amount the recipient receives (lower than what you sent when feetakenfromamount is 1), fiat_amount is its value in fiat_currency, network_fee is the network fee for the transfer (reported even when your account does not pay it) and memo is null unless the token uses one.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-single"},"response":[{"name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the request runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body instead of processing again, even if the body differs. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx or 500), so a retry with the same key is processed normally."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"{\n  \"wallet\": \"{{payoutAddress}}\",\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"100.50\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payoutReference}}\",\n  \"network\": \"Ethereum\",\n  \"feetakenfromamount\": 0,\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer123\"\n}","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Fill in payoutAddress and webhookUrl first. reference_id comes from payoutReference: change it for each new payout.\n\nCreates one payout (withdrawal) to a destination wallet. The body is a single payout object, and the response has the same shape as a batch of one: 200 when the payout is created, 400 when it is refused. A refusal after validation comes in results[0].error, not at the top level; only request-level problems (invalid parameters, balance pre-check, malformed body) answer with a top-level error. In a created result, crypto_amount is the net amount the recipient receives (lower than what you sent when feetakenfromamount is 1), fiat_amount is its value in fiat_currency, network_fee is the network fee for the transfer (reported even when your account does not pay it) and memo is null unless the token uses one.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-single"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"payment_processing_completed\",\n  \"summary\": {\n    \"total_requested\": 1,\n    \"successful\": 1,\n    \"failed\": 0\n  },\n  \"results\": [\n    {\n      \"index\": 0,\n      \"reference_id\": \"order_12345\",\n      \"internal_reference\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n      \"crypto_amount\": \"100.5\",\n      \"fiat_amount\": \"100.50000000\",\n      \"crypto_currency\": \"USDT\",\n      \"fiat_currency\": \"USD\",\n      \"network_fee\": \"0.00100000\",\n      \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n      \"memo\": null,\n      \"network\": \"Ethereum\",\n      \"process_by\": \"crypto_amount\",\n      \"status\": \"created\"\n    }\n  ]\n}"},{"name":"400 · Payout refused","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the request runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body instead of processing again, even if the body differs. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx or 500), so a retry with the same key is processed normally."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"{\n  \"wallet\": \"{{payoutAddress}}\",\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"100.50\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payoutReference}}\",\n  \"network\": \"Ethereum\",\n  \"feetakenfromamount\": 0,\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer123\"\n}","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Fill in payoutAddress and webhookUrl first. reference_id comes from payoutReference: change it for each new payout.\n\nCreates one payout (withdrawal) to a destination wallet. The body is a single payout object, and the response has the same shape as a batch of one: 200 when the payout is created, 400 when it is refused. A refusal after validation comes in results[0].error, not at the top level; only request-level problems (invalid parameters, balance pre-check, malformed body) answer with a top-level error. In a created result, crypto_amount is the net amount the recipient receives (lower than what you sent when feetakenfromamount is 1), fiat_amount is its value in fiat_currency, network_fee is the network fee for the transfer (reported even when your account does not pay it) and memo is null unless the token uses one.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-single"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"payment_processing_completed\",\n  \"summary\": {\n    \"total_requested\": 1,\n    \"successful\": 0,\n    \"failed\": 1\n  },\n  \"results\": [\n    {\n      \"index\": 0,\n      \"reference_id\": \"order_12345\",\n      \"error\": {\n        \"code\": \"insufficient_balance\",\n        \"message\": \"Insufficient balance for this operation\"\n      }\n    }\n  ]\n}"},{"name":"400 · reference_id already used","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the request runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body instead of processing again, even if the body differs. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx or 500), so a retry with the same key is processed normally."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"{\n  \"wallet\": \"{{payoutAddress}}\",\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"100.50\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payoutReference}}\",\n  \"network\": \"Ethereum\",\n  \"feetakenfromamount\": 0,\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer123\"\n}","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Fill in payoutAddress and webhookUrl first. reference_id comes from payoutReference: change it for each new payout.\n\nCreates one payout (withdrawal) to a destination wallet. The body is a single payout object, and the response has the same shape as a batch of one: 200 when the payout is created, 400 when it is refused. A refusal after validation comes in results[0].error, not at the top level; only request-level problems (invalid parameters, balance pre-check, malformed body) answer with a top-level error. In a created result, crypto_amount is the net amount the recipient receives (lower than what you sent when feetakenfromamount is 1), fiat_amount is its value in fiat_currency, network_fee is the network fee for the transfer (reported even when your account does not pay it) and memo is null unless the token uses one.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-single"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"payment_processing_completed\",\n  \"summary\": {\n    \"total_requested\": 1,\n    \"successful\": 0,\n    \"failed\": 1\n  },\n  \"results\": [\n    {\n      \"index\": 0,\n      \"reference_id\": \"order_12345\",\n      \"internal_reference\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n      \"duplicate\": true,\n      \"original_status\": \"pending\",\n      \"original_created_at\": \"2026-01-16 10:00:00\",\n      \"error\": {\n        \"code\": \"duplicate_payment_reference\",\n        \"message\": \"A payout with this reference_id already exists\"\n      }\n    }\n  ]\n}"},{"name":"400 · Invalid parameters","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the request runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body instead of processing again, even if the body differs. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx or 500), so a retry with the same key is processed normally."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"{\n  \"wallet\": \"{{payoutAddress}}\",\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"100.50\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payoutReference}}\",\n  \"network\": \"Ethereum\",\n  \"feetakenfromamount\": 0,\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer123\"\n}","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Fill in payoutAddress and webhookUrl first. reference_id comes from payoutReference: change it for each new payout.\n\nCreates one payout (withdrawal) to a destination wallet. The body is a single payout object, and the response has the same shape as a batch of one: 200 when the payout is created, 400 when it is refused. A refusal after validation comes in results[0].error, not at the top level; only request-level problems (invalid parameters, balance pre-check, malformed body) answer with a top-level error. In a created result, crypto_amount is the net amount the recipient receives (lower than what you sent when feetakenfromamount is 1), fiat_amount is its value in fiat_currency, network_fee is the network fee for the transfer (reported even when your account does not pay it) and memo is null unless the token uses one.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-single"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_parameters\",\n    \"message\": \"Invalid parameters provided\",\n    \"details\": {\n      \"fields\": {\n        \"0.crypto_amount\": \"Crypto amount must be a positive decimal number\",\n        \"0.network\": \"Invalid network\"\n      }\n    }\n  }\n}"},{"name":"400 · Not enough balance","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the request runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body instead of processing again, even if the body differs. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx or 500), so a retry with the same key is processed normally."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"{\n  \"wallet\": \"{{payoutAddress}}\",\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"100.50\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payoutReference}}\",\n  \"network\": \"Ethereum\",\n  \"feetakenfromamount\": 0,\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer123\"\n}","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Fill in payoutAddress and webhookUrl first. reference_id comes from payoutReference: change it for each new payout.\n\nCreates one payout (withdrawal) to a destination wallet. The body is a single payout object, and the response has the same shape as a batch of one: 200 when the payout is created, 400 when it is refused. A refusal after validation comes in results[0].error, not at the top level; only request-level problems (invalid parameters, balance pre-check, malformed body) answer with a top-level error. In a created result, crypto_amount is the net amount the recipient receives (lower than what you sent when feetakenfromamount is 1), fiat_amount is its value in fiat_currency, network_fee is the network fee for the transfer (reported even when your account does not pay it) and memo is null unless the token uses one.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-single"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"insufficient_total_balance\",\n    \"message\": \"Insufficient balance to cover all payouts\",\n    \"details\": {\n      \"crypto_currency\": \"USDT\",\n      \"available\": \"50.00000000\",\n      \"required\": \"100.500000000000000000\"\n    }\n  }\n}"},{"name":"409 · Idempotency-Key still running","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the request runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body instead of processing again, even if the body differs. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx or 500), so a retry with the same key is processed normally."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"{\n  \"wallet\": \"{{payoutAddress}}\",\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"100.50\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payoutReference}}\",\n  \"network\": \"Ethereum\",\n  \"feetakenfromamount\": 0,\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer123\"\n}","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Fill in payoutAddress and webhookUrl first. reference_id comes from payoutReference: change it for each new payout.\n\nCreates one payout (withdrawal) to a destination wallet. The body is a single payout object, and the response has the same shape as a batch of one: 200 when the payout is created, 400 when it is refused. A refusal after validation comes in results[0].error, not at the top level; only request-level problems (invalid parameters, balance pre-check, malformed body) answer with a top-level error. In a created result, crypto_amount is the net amount the recipient receives (lower than what you sent when feetakenfromamount is 1), fiat_amount is its value in fiat_currency, network_fee is the network fee for the transfer (reported even when your account does not pay it) and memo is null unless the token uses one.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-single"},"status":"Conflict","code":409,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"idempotency_key_in_progress\",\n    \"message\": \"A request with this Idempotency-Key is still being processed\"\n  }\n}"},{"name":"400 / 404 / 500 · Request-level errors","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the request runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body instead of processing again, even if the body differs. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx or 500), so a retry with the same key is processed normally."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"{\n  \"wallet\": \"{{payoutAddress}}\",\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"100.50\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payoutReference}}\",\n  \"network\": \"Ethereum\",\n  \"feetakenfromamount\": 0,\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer123\"\n}","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Fill in payoutAddress and webhookUrl first. reference_id comes from payoutReference: change it for each new payout.\n\nCreates one payout (withdrawal) to a destination wallet. The body is a single payout object, and the response has the same shape as a batch of one: 200 when the payout is created, 400 when it is refused. A refusal after validation comes in results[0].error, not at the top level; only request-level problems (invalid parameters, balance pre-check, malformed body) answer with a top-level error. In a created result, crypto_amount is the net amount the recipient receives (lower than what you sent when feetakenfromamount is 1), fiat_amount is its value in fiat_currency, network_fee is the network fee for the transfer (reported even when your account does not pay it) and memo is null unless the token uses one.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-single"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"json_parse_exception\",\n    \"message\": \"Exception while parsing JSON payload\"\n  }\n}"}]},{"name":"Create Payout Multiple","event":[{"listen":"test","script":{"type":"text/javascript","exec":["// Guarda o internal_reference do primeiro payout criado para Check Specific Payout.","const body = pm.response.json();","const created = (body && Array.isArray(body.results) ? body.results : []).find((r) => r.internal_reference && !r.error);","if (created) {","  pm.collectionVariables.set(\"payoutInternalReference\", created.internal_reference);","}"]}}],"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"response":[{"name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"payment_processing_completed\",\n  \"summary\": {\n    \"total_requested\": 2,\n    \"successful\": 2,\n    \"failed\": 0\n  },\n  \"results\": [\n    {\n      \"index\": 0,\n      \"reference_id\": \"order_12345\",\n      \"internal_reference\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n      \"crypto_amount\": \"100.5\",\n      \"fiat_amount\": \"100.50000000\",\n      \"crypto_currency\": \"USDT\",\n      \"fiat_currency\": \"USD\",\n      \"network_fee\": \"0.00100000\",\n      \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n      \"memo\": null,\n      \"network\": \"Ethereum\",\n      \"process_by\": \"crypto_amount\",\n      \"status\": \"created\"\n    },\n    {\n      \"index\": 1,\n      \"reference_id\": \"order_12346\",\n      \"internal_reference\": \"9b2e4c1a-7d3f-4e8b-a1c6-5f0d2e9b7a43\",\n      \"crypto_amount\": \"0.4924\",\n      \"fiat_amount\": \"300.00000000\",\n      \"crypto_currency\": \"BNB\",\n      \"fiat_currency\": \"USD\",\n      \"network_fee\": \"0.00010000\",\n      \"wallet\": \"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\",\n      \"memo\": null,\n      \"network\": \"BinanceSmartChain\",\n      \"process_by\": \"crypto_amount\",\n      \"status\": \"created\"\n    }\n  ]\n}"},{"name":"207 · Partial success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Multi-Status","code":207,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"payment_processing_completed\",\n  \"summary\": {\n    \"total_requested\": 5,\n    \"successful\": 2,\n    \"failed\": 3\n  },\n  \"results\": [\n    {\n      \"index\": 0,\n      \"reference_id\": \"order_12345\",\n      \"internal_reference\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\",\n      \"status\": \"created\"\n    },\n    {\n      \"index\": 1,\n      \"reference_id\": \"order_12346\",\n      \"error\": {\n        \"code\": \"invalid_parameters\",\n        \"message\": \"Invalid parameters provided\",\n        \"details\": {\n          \"fields\": {\n            \"crypto_amount\": \"Crypto amount must be a positive decimal number\"\n          }\n        }\n      }\n    },\n    {\n      \"index\": 2,\n      \"reference_id\": \"order_12347\",\n      \"internal_reference\": \"3c9d1e7f-2a4b-4f6c-8e0d-b5a7c3f1e902\",\n      \"status\": \"created\"\n    },\n    {\n      \"index\": 3,\n      \"reference_id\": \"order_11999\",\n      \"internal_reference\": \"6e1b8f2d-4c7a-4d9e-b3f0-a2c5e8d1f764\",\n      \"duplicate\": true,\n      \"original_status\": \"pending\",\n      \"original_created_at\": \"2026-01-16 10:00:00\",\n      \"error\": {\n        \"code\": \"duplicate_payment_reference\",\n        \"message\": \"A payout with this reference_id already exists\"\n      }\n    },\n    {\n      \"index\": 4,\n      \"error\": {\n        \"code\": \"duplicate_reference_id_in_request\",\n        \"message\": \"This reference_id appears more than once in the request\"\n      }\n    }\n  ]\n}"},{"name":"400 · Every item invalid","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_parameters\",\n    \"message\": \"Invalid parameters provided\",\n    \"details\": {\n      \"fields\": {\n        \"0.webhook_url\": \"Webhook URL is required\",\n        \"1.crypto_currency\": \"Invalid crypto currency\"\n      }\n    }\n  }\n}"},{"name":"400 / 404 / 500 · Request-level errors","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"max_payouts_exceeded\",\n    \"message\": \"Too many payouts in a single request\"\n  }\n}"},{"name":"409 · Idempotency-Key still running","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Conflict","code":409,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"idempotency_key_in_progress\",\n    \"message\": \"A request with this Idempotency-Key is still being processed\"\n  }\n}"},{"name":"400 · Not enough balance for the batch","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"insufficient_total_balance\",\n    \"message\": \"Insufficient balance to cover all payouts\",\n    \"details\": {\n      \"crypto_currency\": \"USDT\",\n      \"available\": \"150.00000000\",\n      \"required\": \"420.500000000000000000\"\n    }\n  }\n}"},{"name":"207 / 400 (item) · Item refusal codes","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Multi-Status","code":207,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"index\": 2,\n  \"reference_id\": \"order_12347\",\n  \"error\": {\n    \"code\": \"limit_exceeded\",\n    \"message\": \"Amount is outside the allowed limits\"\n  }\n}"},{"name":"207 / 400 (item) · Daily payout limit reached","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Multi-Status","code":207,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"index\": 3,\n  \"reference_id\": \"order_12348\",\n  \"error\": {\n    \"code\": \"daily_payout_limit_exceeded\",\n    \"message\": \"Daily payout limit for this API key exceeded\"\n  }\n}"},{"name":"207 / 400 (item) · Amount does not cover fees","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Multi-Status","code":207,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"index\": 1,\n  \"reference_id\": \"order_12346\",\n  \"error\": {\n    \"code\": \"amount_does_not_cover_fees\",\n    \"message\": \"Amount does not cover the fees\"\n  }\n}"},{"name":"207 / 400 (item) · Daily limit cannot be accounted","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Multi-Status","code":207,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"index\": 3,\n  \"reference_id\": \"order_12348\",\n  \"error\": {\n    \"code\": \"daily_payout_limit_unavailable\",\n    \"message\": \"Daily payout limit could not be checked right now\"\n  }\n}"},{"name":"207 / 400 (item) · Price unavailable","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Multi-Status","code":207,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"index\": 2,\n  \"reference_id\": \"order_12347\",\n  \"error\": {\n    \"code\": \"price_unavailable\",\n    \"message\": \"Price information temporarily unavailable\"\n  }\n}"},{"name":"500 · Interrupted mid-batch","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}","description":"Optional, up to 255 characters (a longer key is ignored and the batch runs without idempotency). Scoped to your account and kept for 24 hours: resending the same key returns the original status and body verbatim instead of reprocessing, even if the body differs, so use a new key for a new batch. While the first request is still running (up to 15 minutes) a resend gets 409 idempotency_key_in_progress. Not stored when the request fails before any payout is attempted (top-level 4xx) or is interrupted (500), so a retry with the same key is processed again; reference_id uniqueness still prevents a second payout for items already created."}],"url":{"raw":"{{baseUrl}}/v1/payout","host":["{{baseUrl}}"],"path":["v1","payout"]},"body":{"mode":"raw","raw":"[\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"crypto_amount\": \"100.50\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-1\",\n    \"network\": \"Ethereum\",\n    \"feetakenfromamount\": 0,\n    \"webhook_url\": \"{{webhookUrl}}\",\n    \"customer_info\": \"customer123\"\n  },\n  {\n    \"wallet\": \"{{payoutAddress}}\",\n    \"crypto_currency\": \"BNB\",\n    \"crypto_amount\": \"0.5\",\n    \"process_by\": \"crypto_amount\",\n    \"reference_id\": \"{{payoutReference}}-2\",\n    \"network\": \"BinanceSmartChain\",\n    \"feetakenfromamount\": 1,\n    \"webhook_url\": \"{{webhookUrl}}\"\n  }\n]","options":{"raw":{"language":"json"}}},"description":"> **Sends real funds.** Each item uses payoutAddress, webhookUrl and payoutReference-1, -2…: change payoutReference for each new batch.\n\nCreates up to 50 payouts in one request. Send an array of payout objects with the same fields as Create Payout Single. Items are processed one by one, each in its own transaction: a refused item is reported on its own index and the rest of the batch still goes out. The HTTP status is 200 when every item was created, 207 when some were created and some refused, and 400 when every item was refused; in all three cases the body carries summary and one entry per item in results, in the order sent. If every item fails validation, the answer is instead a top-level invalid_parameters with no results. More than 50 items returns 400 max_payouts_exceeded and nothing is processed.\n\nRequired scope: `payout:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payout-multiple"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"internal_error\",\n    \"message\": \"An unexpected error occurred during payment processing\"\n  },\n  \"summary\": {\n    \"total_requested\": 50,\n    \"successful\": 31,\n    \"failed\": 1,\n    \"not_processed\": 18\n  },\n  \"results\": [\n    \"...\"\n  ]\n}"}]}]},{"name":"Deposits Payin","description":"Endpoints for managing deposits and receipts. POST /v1/payin accepts one object, or an array with a single item, and rejects a batch with 400 invalid_parameters (details.reason batch_not_allowed_use_single_object). List and check only return payins created through the API. Response status values are lowercase: pending, completed, failed, reversed (a completed deposit the network later undid; the credit was removed). A payin is marked completed once the amount received reaches minimum_payment percent of crypto_amount, so a completed payin can still be partially paid: before delivering, compare received_amount with crypto_amount (both in crypto_currency).","item":[{"name":"Create Payin","event":[{"listen":"test","script":{"type":"text/javascript","exec":["// Guarda o internal_reference para Check Specific Payin.","const body = pm.response.json();","if (body && body.data && body.data.internal_reference) {","  pm.collectionVariables.set(\"payinInternalReference\", body.data.internal_reference);","}"]}}],"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payin","host":["{{baseUrl}}"],"path":["v1","payin"]},"body":{"mode":"raw","raw":"{\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"50.00\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payinReference}}\",\n  \"network\": \"BinanceSmartChain\",\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer456\",\n  \"expires_at\": 14400\n}","options":{"raw":{"language":"json"}}},"description":"> Creates a real payin. Fill in webhookUrl first. reference_id comes from payinReference: change it for each new payin.\n\nCreates a single deposit and answers 200 OK with a wallet address for the customer to send funds to. The payin becomes completed when the amount received reaches minimum_payment percent of crypto_amount (minimum_payment is set per account and returned by check-payin and GET /v1/summary), which may be less than the full amount: confirm received_amount before delivering. The success body is one object under data, not a batch summary. crypto_amount in the response is cut (not rounded) to the token's decimals, with trailing zeros removed (\"50.00\" comes back as \"50\"). fiat_amount is the value you sent; when you did not send one it is crypto_amount × price with 8 decimals, or null if no price is available. The response has no expires_at: read it from check-payin. This endpoint has no Idempotency-Key: reference_id is what prevents a second payin. If a request times out, resend it with the same reference_id; a duplicate_reference_id answer means the first one was created, and GET /v1/list-payin?reference_id=… returns it. The error codes are listed under Errors.\n\nRequired scope: `payin:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payin-single"},"response":[{"name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payin","host":["{{baseUrl}}"],"path":["v1","payin"]},"body":{"mode":"raw","raw":"{\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"50.00\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payinReference}}\",\n  \"network\": \"BinanceSmartChain\",\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer456\",\n  \"expires_at\": 14400\n}","options":{"raw":{"language":"json"}}},"description":"> Creates a real payin. Fill in webhookUrl first. reference_id comes from payinReference: change it for each new payin.\n\nCreates a single deposit and answers 200 OK with a wallet address for the customer to send funds to. The payin becomes completed when the amount received reaches minimum_payment percent of crypto_amount (minimum_payment is set per account and returned by check-payin and GET /v1/summary), which may be less than the full amount: confirm received_amount before delivering. The success body is one object under data, not a batch summary. crypto_amount in the response is cut (not rounded) to the token's decimals, with trailing zeros removed (\"50.00\" comes back as \"50\"). fiat_amount is the value you sent; when you did not send one it is crypto_amount × price with 8 decimals, or null if no price is available. The response has no expires_at: read it from check-payin. This endpoint has no Idempotency-Key: reference_id is what prevents a second payin. If a request times out, resend it with the same reference_id; a duplicate_reference_id answer means the first one was created, and GET /v1/list-payin?reference_id=… returns it. The error codes are listed under Errors.\n\nRequired scope: `payin:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payin-single"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"deposit_created_successfully\",\n  \"data\": {\n    \"reference_id\": \"invoice_67890\",\n    \"internal_reference\": \"f531c319-6957-45c6-a154-d4944ca3eee3\",\n    \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n    \"crypto_amount\": \"50\",\n    \"fiat_amount\": \"50.00000000\",\n    \"crypto_currency\": \"USDT\",\n    \"fiat_currency\": \"USD\",\n    \"network\": \"BinanceSmartChain\",\n    \"status\": \"created\"\n  }\n}"},{"name":"400 · Duplicate reference_id","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payin","host":["{{baseUrl}}"],"path":["v1","payin"]},"body":{"mode":"raw","raw":"{\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"50.00\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payinReference}}\",\n  \"network\": \"BinanceSmartChain\",\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer456\",\n  \"expires_at\": 14400\n}","options":{"raw":{"language":"json"}}},"description":"> Creates a real payin. Fill in webhookUrl first. reference_id comes from payinReference: change it for each new payin.\n\nCreates a single deposit and answers 200 OK with a wallet address for the customer to send funds to. The payin becomes completed when the amount received reaches minimum_payment percent of crypto_amount (minimum_payment is set per account and returned by check-payin and GET /v1/summary), which may be less than the full amount: confirm received_amount before delivering. The success body is one object under data, not a batch summary. crypto_amount in the response is cut (not rounded) to the token's decimals, with trailing zeros removed (\"50.00\" comes back as \"50\"). fiat_amount is the value you sent; when you did not send one it is crypto_amount × price with 8 decimals, or null if no price is available. The response has no expires_at: read it from check-payin. This endpoint has no Idempotency-Key: reference_id is what prevents a second payin. If a request times out, resend it with the same reference_id; a duplicate_reference_id answer means the first one was created, and GET /v1/list-payin?reference_id=… returns it. The error codes are listed under Errors.\n\nRequired scope: `payin:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payin-single"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"duplicate_reference_id\",\n    \"message\": \"A payin with this reference_id already exists\"\n  }\n}"},{"name":"400 · Invalid parameters","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payin","host":["{{baseUrl}}"],"path":["v1","payin"]},"body":{"mode":"raw","raw":"{\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"50.00\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payinReference}}\",\n  \"network\": \"BinanceSmartChain\",\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer456\",\n  \"expires_at\": 14400\n}","options":{"raw":{"language":"json"}}},"description":"> Creates a real payin. Fill in webhookUrl first. reference_id comes from payinReference: change it for each new payin.\n\nCreates a single deposit and answers 200 OK with a wallet address for the customer to send funds to. The payin becomes completed when the amount received reaches minimum_payment percent of crypto_amount (minimum_payment is set per account and returned by check-payin and GET /v1/summary), which may be less than the full amount: confirm received_amount before delivering. The success body is one object under data, not a batch summary. crypto_amount in the response is cut (not rounded) to the token's decimals, with trailing zeros removed (\"50.00\" comes back as \"50\"). fiat_amount is the value you sent; when you did not send one it is crypto_amount × price with 8 decimals, or null if no price is available. The response has no expires_at: read it from check-payin. This endpoint has no Idempotency-Key: reference_id is what prevents a second payin. If a request times out, resend it with the same reference_id; a duplicate_reference_id answer means the first one was created, and GET /v1/list-payin?reference_id=… returns it. The error codes are listed under Errors.\n\nRequired scope: `payin:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payin-single"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_parameters\",\n    \"message\": \"Invalid parameters provided\",\n    \"details\": {\n      \"fields\": {\n        \"crypto_currency\": \"The crypto_currency field must be one of: USDT,BTC,ETH.\"\n      }\n    }\n  }\n}"},{"name":"400 · Amount outside the token limits","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payin","host":["{{baseUrl}}"],"path":["v1","payin"]},"body":{"mode":"raw","raw":"{\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"50.00\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payinReference}}\",\n  \"network\": \"BinanceSmartChain\",\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer456\",\n  \"expires_at\": 14400\n}","options":{"raw":{"language":"json"}}},"description":"> Creates a real payin. Fill in webhookUrl first. reference_id comes from payinReference: change it for each new payin.\n\nCreates a single deposit and answers 200 OK with a wallet address for the customer to send funds to. The payin becomes completed when the amount received reaches minimum_payment percent of crypto_amount (minimum_payment is set per account and returned by check-payin and GET /v1/summary), which may be less than the full amount: confirm received_amount before delivering. The success body is one object under data, not a batch summary. crypto_amount in the response is cut (not rounded) to the token's decimals, with trailing zeros removed (\"50.00\" comes back as \"50\"). fiat_amount is the value you sent; when you did not send one it is crypto_amount × price with 8 decimals, or null if no price is available. The response has no expires_at: read it from check-payin. This endpoint has no Idempotency-Key: reference_id is what prevents a second payin. If a request times out, resend it with the same reference_id; a duplicate_reference_id answer means the first one was created, and GET /v1/list-payin?reference_id=… returns it. The error codes are listed under Errors.\n\nRequired scope: `payin:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payin-single"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"amount_out_of_limits\",\n    \"message\": \"Amount is outside the allowed limits\",\n    \"details\": {\n      \"message\": \"Amount below minimum limit\",\n      \"crypto_amount\": \"0.5\",\n      \"crypto_currency\": \"USDT\",\n      \"min_allowed\": \"1.000000000000000000\",\n      \"max_allowed\": \"unlimited\",\n      \"process_by\": \"crypto_amount\"\n    }\n  }\n}"},{"name":"503 · Temporarily unavailable","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payin","host":["{{baseUrl}}"],"path":["v1","payin"]},"body":{"mode":"raw","raw":"{\n  \"crypto_currency\": \"USDT\",\n  \"fiat_currency\": \"USD\",\n  \"crypto_amount\": \"50.00\",\n  \"process_by\": \"crypto_amount\",\n  \"reference_id\": \"{{payinReference}}\",\n  \"network\": \"BinanceSmartChain\",\n  \"webhook_url\": \"{{webhookUrl}}\",\n  \"customer_info\": \"customer456\",\n  \"expires_at\": 14400\n}","options":{"raw":{"language":"json"}}},"description":"> Creates a real payin. Fill in webhookUrl first. reference_id comes from payinReference: change it for each new payin.\n\nCreates a single deposit and answers 200 OK with a wallet address for the customer to send funds to. The payin becomes completed when the amount received reaches minimum_payment percent of crypto_amount (minimum_payment is set per account and returned by check-payin and GET /v1/summary), which may be less than the full amount: confirm received_amount before delivering. The success body is one object under data, not a batch summary. crypto_amount in the response is cut (not rounded) to the token's decimals, with trailing zeros removed (\"50.00\" comes back as \"50\"). fiat_amount is the value you sent; when you did not send one it is crypto_amount × price with 8 decimals, or null if no price is available. The response has no expires_at: read it from check-payin. This endpoint has no Idempotency-Key: reference_id is what prevents a second payin. If a request times out, resend it with the same reference_id; a duplicate_reference_id answer means the first one was created, and GET /v1/list-payin?reference_id=… returns it. The error codes are listed under Errors.\n\nRequired scope: `payin:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-payin-single"},"status":"Service Unavailable","code":503,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"no_wallet_available\",\n    \"message\": \"No deposit address is available right now\"\n  }\n}"}]}]},{"name":"Fixed Wallets","description":"Endpoints for managing fixed (permanent) deposit addresses assigned per customer. Every transfer to a fixed address becomes a completed payin and is notified to the fixed-address webhook URL set in the panel; see Receiving on a fixed address under Create Fixed Wallet.","item":[{"name":"Update Config","request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets/config","host":["{{baseUrl}}"],"path":["v1","fixed-wallets","config"]},"body":{"mode":"raw","raw":"{\n  \"webhook_url\": \"{{fixedWalletsWebhookUrl}}\"\n}","options":{"raw":{"language":"json"}}},"description":"> Changes the fixed-address webhook URL of the account. Define the variable fixedWalletsWebhookUrl (collection or environment) before sending; until then the request is refused with invalid_parameters. Sending an empty string removes the stored URL.\n\nRegisters, updates or removes the webhook_url for fixed addresses. The webhook_url field is required: send \"\" or null to remove the URL. A body without the field is refused with 400 invalid_parameters instead of clearing the stored URL. Returns 403 feature_disabled if the feature is disabled.\n\nRequired scope: `wallets:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/fixed-wallets-config-update"},"response":[{"name":"Success","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets/config","host":["{{baseUrl}}"],"path":["v1","fixed-wallets","config"]},"body":{"mode":"raw","raw":"{\n  \"webhook_url\": \"{{fixedWalletsWebhookUrl}}\"\n}","options":{"raw":{"language":"json"}}},"description":"> Changes the fixed-address webhook URL of the account. Define the variable fixedWalletsWebhookUrl (collection or environment) before sending; until then the request is refused with invalid_parameters. Sending an empty string removes the stored URL.\n\nRegisters, updates or removes the webhook_url for fixed addresses. The webhook_url field is required: send \"\" or null to remove the URL. A body without the field is refused with 400 invalid_parameters instead of clearing the stored URL. Returns 403 feature_disabled if the feature is disabled.\n\nRequired scope: `wallets:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/fixed-wallets-config-update"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"fixed_wallets_config_update_success\",\n  \"webhook_url\": \"https://your-site.com/webhook-fixed-wallets\"\n}"},{"name":"400 · Field missing or invalid","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets/config","host":["{{baseUrl}}"],"path":["v1","fixed-wallets","config"]},"body":{"mode":"raw","raw":"{\n  \"webhook_url\": \"{{fixedWalletsWebhookUrl}}\"\n}","options":{"raw":{"language":"json"}}},"description":"> Changes the fixed-address webhook URL of the account. Define the variable fixedWalletsWebhookUrl (collection or environment) before sending; until then the request is refused with invalid_parameters. Sending an empty string removes the stored URL.\n\nRegisters, updates or removes the webhook_url for fixed addresses. The webhook_url field is required: send \"\" or null to remove the URL. A body without the field is refused with 400 invalid_parameters instead of clearing the stored URL. Returns 403 feature_disabled if the feature is disabled.\n\nRequired scope: `wallets:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/fixed-wallets-config-update"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"invalid_parameters\",\n    \"message\": \"Invalid parameters provided\",\n    \"details\": {\n      \"fields\": {\n        \"webhook_url\": \"The webhook_url field is required; send an empty value to remove it.\"\n      }\n    }\n  }\n}"}]},{"name":"Create Fixed Wallet","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets","host":["{{baseUrl}}"],"path":["v1","fixed-wallets"]},"body":{"mode":"raw","raw":"{\n  \"type\": \"evm\",\n  \"customer_info\": \"{{customerInfo}}\"\n}","options":{"raw":{"language":"json"}}},"description":"> Assigns a real fixed address to your account and can consume allowance. The same customerInfo returns the address already assigned to it.\n\nAssigns a fixed (permanent) address to your account for the given chain family (type). A single address serves every network of the same family (e.g. an evm address works across all EVM networks). A new assignment answers 201 with fixed_wallets_assign_success. If customer_info is provided and already has an active (STATUS_ASSIGNED) address of the same type, the existing one is returned with 200 and fixed_wallets_already_assigned. That reuse check ignores origin, so it can return an address created in the panel (origin: panel), which List Fixed Wallets does not show. The reuse is checked before the limits, so it never consumes allowance.\n\nRequired scope: `wallets:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-fixed-wallet"},"response":[{"name":"Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets","host":["{{baseUrl}}"],"path":["v1","fixed-wallets"]},"body":{"mode":"raw","raw":"{\n  \"type\": \"evm\",\n  \"customer_info\": \"{{customerInfo}}\"\n}","options":{"raw":{"language":"json"}}},"description":"> Assigns a real fixed address to your account and can consume allowance. The same customerInfo returns the address already assigned to it.\n\nAssigns a fixed (permanent) address to your account for the given chain family (type). A single address serves every network of the same family (e.g. an evm address works across all EVM networks). A new assignment answers 201 with fixed_wallets_assign_success. If customer_info is provided and already has an active (STATUS_ASSIGNED) address of the same type, the existing one is returned with 200 and fixed_wallets_already_assigned. That reuse check ignores origin, so it can return an address created in the panel (origin: panel), which List Fixed Wallets does not show. The reuse is checked before the limits, so it never consumes allowance.\n\nRequired scope: `wallets:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-fixed-wallet"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"fixed_wallets_assign_success\",\n  \"wallet\": {\n    \"customer_info\": \"customer123\",\n    \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n    \"type\": \"evm\",\n    \"status\": \"STATUS_ASSIGNED\",\n    \"origin\": \"external_api\",\n    \"last_transaction_at\": null,\n    \"created_at\": \"2026-01-16 10:00:00\",\n    \"updated_at\": \"2026-01-16 10:00:00\",\n    \"networks\": [\n      \"Ethereum\",\n      \"BinanceSmartChain\"\n    ],\n    \"accepted_tokens\": [\n      {\n        \"network\": \"Ethereum\",\n        \"token\": \"USDT\",\n        \"symbol\": \"USDT\"\n      }\n    ],\n    \"pending_revocation\": false,\n    \"revoke_at\": null\n  }\n}"},{"name":"200 · Existing address reused","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets","host":["{{baseUrl}}"],"path":["v1","fixed-wallets"]},"body":{"mode":"raw","raw":"{\n  \"type\": \"evm\",\n  \"customer_info\": \"{{customerInfo}}\"\n}","options":{"raw":{"language":"json"}}},"description":"> Assigns a real fixed address to your account and can consume allowance. The same customerInfo returns the address already assigned to it.\n\nAssigns a fixed (permanent) address to your account for the given chain family (type). A single address serves every network of the same family (e.g. an evm address works across all EVM networks). A new assignment answers 201 with fixed_wallets_assign_success. If customer_info is provided and already has an active (STATUS_ASSIGNED) address of the same type, the existing one is returned with 200 and fixed_wallets_already_assigned. That reuse check ignores origin, so it can return an address created in the panel (origin: panel), which List Fixed Wallets does not show. The reuse is checked before the limits, so it never consumes allowance.\n\nRequired scope: `wallets:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-fixed-wallet"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"message\": \"fixed_wallets_already_assigned\",\n  \"wallet\": {\n    \"customer_info\": \"customer123\",\n    \"wallet\": \"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0\",\n    \"type\": \"evm\",\n    \"status\": \"STATUS_ASSIGNED\",\n    \"origin\": \"external_api\",\n    \"last_transaction_at\": \"2026-02-03 18:21:07\",\n    \"created_at\": \"2026-01-16 10:00:00\",\n    \"updated_at\": \"2026-02-03 18:21:07\",\n    \"networks\": [\n      \"Ethereum\",\n      \"BinanceSmartChain\"\n    ],\n    \"accepted_tokens\": [\n      {\n        \"network\": \"Ethereum\",\n        \"token\": \"USDT\",\n        \"symbol\": \"USDT\"\n      }\n    ],\n    \"pending_revocation\": false,\n    \"revoke_at\": null\n  }\n}"},{"name":"409 · Limit reached","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/fixed-wallets","host":["{{baseUrl}}"],"path":["v1","fixed-wallets"]},"body":{"mode":"raw","raw":"{\n  \"type\": \"evm\",\n  \"customer_info\": \"{{customerInfo}}\"\n}","options":{"raw":{"language":"json"}}},"description":"> Assigns a real fixed address to your account and can consume allowance. The same customerInfo returns the address already assigned to it.\n\nAssigns a fixed (permanent) address to your account for the given chain family (type). A single address serves every network of the same family (e.g. an evm address works across all EVM networks). A new assignment answers 201 with fixed_wallets_assign_success. If customer_info is provided and already has an active (STATUS_ASSIGNED) address of the same type, the existing one is returned with 200 and fixed_wallets_already_assigned. That reuse check ignores origin, so it can return an address created in the panel (origin: panel), which List Fixed Wallets does not show. The reuse is checked before the limits, so it never consumes allowance.\n\nRequired scope: `wallets:write`.\n\nFull reference: https://bifrostcrypto.com/en/docs/create-fixed-wallet"},"status":"Conflict","code":409,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": {\n    \"code\": \"limit_reached\",\n    \"message\": \"Fixed address limit reached\"\n  }\n}"}]}]}]}]}