<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>BlindPay Changelog</title>
        <link>https://blindpay.com</link>
        <description>Stay updated with the latest features, improvements, and changes to BlindPay's platform.</description>
        <lastBuildDate>Thu, 15 Oct 2026 18:20:23 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>BlindPay Changelog</title>
            <url>https://blindpay.com/favicons/favicon-192x192.png</url>
            <link>https://blindpay.com</link>
        </image>
        <copyright>All rights reserved 2026, BlindPay</copyright>
        <atom:link href="https://blindpay.com/changelog.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[MCP server drops the public tracking tools and describes the rails tools]]></title>
            <link>https://blindpay.com/changelog/2026-10-02-mcp-tracking-tools-removed</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-10-02-mcp-tracking-tools-removed</guid>
            <pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Three MCP tools that could not succeed from an MCP client are removed in favor of their authenticated equivalents, and the rails and bank details tools now describe what they return.]]></description>
            <content:encoded><![CDATA[<p>The BlindPay MCP server no longer lists the three public tracking tools, and two tools that had one-word descriptions now explain themselves.</p>
<h2>Removed tools</h2>
<p><code>GetV1EPayoutsById</code>, <code>GetV1EPayinsById</code> and <code>GetV1ETransfersById</code> wrapped the <code>/v1/e/</code> endpoints behind BlindPay's shareable tracking pages. Those endpoints only answer requests from the tracking pages themselves, so a call from an MCP client always failed. Use the authenticated tools instead, which return the same payout, payin or transfer:</p>
<table>
<thead>
<tr>
<th>Removed</th>
<th>Use instead</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>GetV1EPayoutsById</code></td>
<td><code>GetV1InstancesPayoutsById</code></td>
</tr>
<tr>
<td><code>GetV1EPayinsById</code></td>
<td><code>GetV1InstancesPayinsById</code></td>
</tr>
<tr>
<td><code>GetV1ETransfersById</code></td>
<td><code>GetV1InstancesTransfersById</code></td>
</tr>
</tbody>
</table>
<p>MCP clients pick up the change on their next <code>tools/list</code>.</p>
<h2>Better descriptions</h2>
<p><code>GetV1AvailableRails</code> and <code>GetV1AvailableBankDetails</code> now describe what they return and how they fit together: list the rails first, then pass a rail's <code>value</code> to bank details to get the fields, validation patterns and picklists a bank account needs for that rail.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Rafael Thayto</dc:creator>
        </item>
        <item>
            <title><![CDATA[Read your instance business details through the API]]></title>
            <link>https://blindpay.com/changelog/2026-09-23-instance-business-details-api</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-09-23-instance-business-details-api</guid>
            <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Three read-only endpoints now expose the business details, business profile and ownership information you entered during onboarding, so you can sync your instance data into your own systems.]]></description>
            <content:encoded><![CDATA[<p>The business information you entered when onboarding your instance is now readable through the API and the MCP server.</p>
<h2>What's new</h2>
<p>Three read-only endpoints under <code>/v1/instances/{instance_id}/onboarding/</code> are now part of the public reference and the SDK:</p>
<ul>
<li><code>GET .../business_details</code>: legal name, tax ID, entity type, state of incorporation, formation date, trading names and registered address.</li>
<li><code>GET .../business_profile</code>: industry, website, business scenario and expected volume.</li>
<li><code>GET .../ownership_documents</code>: owners and ownership documents.</li>
</ul>
<p>They authenticate with your regular instance API key. Use them to keep the records you hold about your own instance in sync with what BlindPay has on file. Updating this information still happens through the dashboard.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>André Mayer</dc:creator>
        </item>
        <item>
            <title><![CDATA[Yield and ACH pull in private beta, Tempo and Arc networks, prompt library]]></title>
            <link>https://blindpay.com/changelog/2026-09-18-yield-ach-pull-tempo-arc-prompts</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-09-18-yield-ach-pull-tempo-arc-prompts</guid>
            <pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Managed wallets can now earn yield on idle USDC, payins can pull funds straight from a customer bank account, Tempo and Arc are live, and a new prompt library builds your integration with any AI coding agent.]]></description>
            <content:encoded><![CDATA[<p>Two private betas this month: Yield, so managed wallets earn on the USDC they hold, and ACH pull, so a payin can debit a customer's bank account directly. Also new: Tempo and Arc networks, and a prompt library for AI coding agents.</p>
<h2>TL;DR</h2>
<ul>
<li><strong>Yield (private beta)</strong>: turn it on for a managed wallet and the idle USDC balance starts earning</li>
<li><strong>ACH pull (private beta)</strong>: customers connect their bank account once and payins pull the funds, no manual transfer</li>
<li><strong>Tempo and Arc</strong>: two new networks for wallets, payins, payouts and transfers</li>
<li><strong>Prompt library</strong>: ready-to-paste prompts that build a full BlindPay integration with your AI coding agent</li>
</ul>
<h2>Yield (private beta)</h2>
<p>Managed wallets can now earn on the stablecoins they hold. Turn yield on once per wallet and BlindPay moves the idle USDC into a lending vault, keeps it earning, and pulls it back automatically whenever a payout or transfer needs the funds. Turn it off and the full position returns to the wallet. There is no fee on the balance, only a performance fee on gains, and the APY we report is already net of it.</p>
<p>Yield is in private beta. Reach out to your BlindPay contact to enable it on your instance. <a href="https://blindpay.com/docs/yield">Read the Yield guide</a>.</p>
<h2>ACH pull (private beta)</h2>
<p>Payins in the US no longer depend on the customer sending a transfer. The customer connects their bank account once through a hosted page, and from then on a payin with the new <code>ach_pull</code> payment method debits that account directly. Connected accounts are verified as first party before they can be used.</p>
<p>ACH pull is in private beta. Reach out to your BlindPay contact to enable it on your instance. <a href="https://blindpay.com/docs/bank-accounts">Read the bank accounts guide</a>.</p>
<h2>Tempo and Arc networks</h2>
<p>Tempo and Arc are live for managed wallets, offramp wallets, payins, payouts and transfers. Tempo supports USDC.e and USDT0, Arc supports USDC. Both have a matching testnet on development instances. <a href="https://blindpay.com/docs/blockchain-wallets">See the supported networks</a>.</p>
<h2>Prompt library</h2>
<p>We published a library of prompts that walk an AI coding agent through a complete BlindPay integration, from a payin or payout quickstart to payables and wallets, with the API gotchas already encoded. Copy one into your agent and let it build. <a href="https://blindpay.com/prompts">Browse the prompts</a>.</p>]]></content:encoded>
            <category>New Feature</category>
            <dc:creator>Eric Viana</dc:creator>
            <dc:creator>Bernardo Simonassi</dc:creator>
            <dc:creator>André Mayer</dc:creator>
            <dc:creator>Rafael Thayto</dc:creator>
        </item>
        <item>
            <title><![CDATA[Payables: pay invoices and bills from stablecoins, cross-chain USDC transfers, and virtual account upgrades]]></title>
            <link>https://blindpay.com/changelog/2026-08-20-payables-cross-chain-usdc-fx-export</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-08-20-payables-cross-chain-usdc-fx-export</guid>
            <pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Pay invoices, boletos, PIX codes, utility bills and tax slips straight from stablecoins with the new Payables product, move USDC across networks in a single transfer, and set partner fees per virtual account.]]></description>
            <content:encoded><![CDATA[<p>Payables is a new product: upload an invoice or a bill and pay it straight from stablecoins. Also new this month: cross-chain USDC transfers, and per-account partner fees and micro-deposits on virtual accounts.</p>
<h2>TL;DR</h2>
<ul>
<li><strong>Payables</strong>: pay invoices, boletos, PIX copia e cola codes, utility bills and tax slips from USDC or USDT</li>
<li><strong>Cross-chain USDC transfers</strong>: move USDC between supported networks in a single transfer</li>
<li><strong>Virtual account upgrades</strong>: partner fees per account, and deposits of any size are processed</li>
</ul>
<h2>Payables: pay invoices and bills from stablecoins</h2>
<p>Payables is a new product to pay the bills your business owes directly from stablecoins. Upload an invoice, a boleto, a PIX copia e cola code, a utility bill or a tax slip, and BlindPay figures out the amount, the beneficiary and the due date, then pays it through the right rail. Available today in the dashboard and the API. <a href="https://blindpay.com/docs/payables">Read the Payables guide</a>.</p>
<h2>Cross-chain USDC transfers</h2>
<p>You can now move native USDC between networks in a single transfer. Send from a wallet on one network, deliver to a wallet on another. <a href="https://blindpay.com/docs/transfers">Check out the Transfers guide</a>.</p>
<h2>Virtual account upgrades</h2>
<p>You can now set a different partner fee on each virtual account with the new <code>partner_fee_id</code> field, and deposits of any size are processed, including $0.01 verification micro-deposits. <a href="https://blindpay.com/changelog/2026-08-16-virtual-account-partner-fees-and-micro-deposits">Read the full details</a>.</p>]]></content:encoded>
            <category>New Feature</category>
            <dc:creator>Eric Viana</dc:creator>
            <dc:creator>André Mayer</dc:creator>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Per-account partner fees, micro-deposits, and amount-based fee timing on virtual accounts]]></title>
            <link>https://blindpay.com/changelog/2026-08-16-virtual-account-partner-fees-and-micro-deposits</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-08-16-virtual-account-partner-fees-and-micro-deposits</guid>
            <pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Pin a partner fee to each virtual account, collect deposits of any size (including $0.01 micro-deposits), and a new rule for when BlindPay fees are charged: below $100 on your monthly invoice, $100 and above at transaction time.]]></description>
            <content:encoded><![CDATA[<p>Virtual accounts get three upgrades: partner fees can now be set per account instead of one setting for the whole instance, deposits of any size are processed (micro-deposits included), and BlindPay fees are charged on your invoice or at transaction time depending on the deposit amount.</p>
<h2>TL;DR</h2>
<ul>
<li>New <code>partner_fee_id</code> field on virtual account create and update: pin a partner fee to one account, overriding the instance-wide default</li>
<li>Every deposit now creates a payin, including $0.01 account-verification micro-deposits; at least $0.01 always reaches the linked wallet</li>
<li>BlindPay fees on deposits below $100.00 accrue to your monthly invoice (<code>billing_fee_amount</code>); deposits of $100.00 and above are charged at transaction time (<code>transaction_fee_amount</code>)</li>
</ul>
<h2>Partner fees per virtual account</h2>
<p>Until now, virtual accounts supported a single partner fee for the entire instance: one fee configuration flagged for virtual accounts applied to every account's deposits. You can now pin a fee to each account individually.</p>
<p>Pass <code>partner_fee_id</code> when creating a virtual account, or set it later with the update endpoint:</p>
<pre><code class="language-bash">curl --request POST \
  --url https://api.blindpay.com/v1/instances/in_000000000000/customers/re_000000000000/virtual-accounts \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    &quot;banking_partner&quot;: &quot;cfsb&quot;,
    &quot;token&quot;: &quot;USDC&quot;,
    &quot;blockchain_wallet_id&quot;: &quot;bw_000000000000&quot;,
    &quot;partner_fee_id&quot;: &quot;pf_000000000000&quot;
  }'
</code></pre>
<p>How the two levels interact:</p>
<ul>
<li>A fee pinned to an account <strong>overrides the instance-wide default</strong> for that account's deposits.</li>
<li>Accounts without a pin keep using the instance-wide default (the fee configuration created with <code>virtual_account_set: true</code>), so existing setups keep working unchanged.</li>
<li>Updating an account with <code>partner_fee_id: null</code> clears the pin and falls back to the default.</li>
<li>Deleting a fee configuration automatically unpins it from any accounts referencing it; those accounts revert to the default.</li>
</ul>
<p>The dashboard's virtual account create dialog and edit pane both gained a partner fee selector.</p>
<h2>Micro-deposits are now collected</h2>
<p>Deposits below $5.00 into a virtual account used to be ignored. Every deposit of any size now creates a payin, including the $0.01 account-verification micro-deposits sent by services like Plaid and Square, and always delivers at least $0.01 of stablecoin to the linked wallet.</p>
<p>Because fees can exceed a small deposit, partner fee collection is now partial rather than all-or-nothing: the fee collects as much as the deposit can bear while preserving the $0.01 delivery floor. A $5.00 fee on a $5.00 deposit collects $4.99; a micro-deposit collects nothing.</p>
<h2>When BlindPay fees are charged</h2>
<p>BlindPay fees on virtual account deposits now follow an amount-based rule:</p>
<table>
<thead>
<tr>
<th>Deposit amount</th>
<th>When the BlindPay fee is charged</th>
<th>Field on the payin</th>
</tr>
</thead>
<tbody>
<tr>
<td>Below $100.00</td>
<td>End of the billing cycle, on your monthly invoice</td>
<td><code>billing_fee_amount</code></td>
</tr>
<tr>
<td>$100.00 or more</td>
<td>At the time of the transaction, deducted from the delivered amount</td>
<td><code>transaction_fee_amount</code></td>
</tr>
</tbody>
</table>
<p>This keeps small deposits from being consumed by fees at transaction time while charging larger deposits immediately. Instances configured for end-of-month billing keep accruing every fee to <code>billing_fee_amount</code>, regardless of amount.</p>
<h2>What you need to do</h2>
<p>Nothing is required. Existing virtual accounts keep their behavior: the instance-wide partner fee still applies to accounts without a pin, and fee totals are unchanged, only the timing of when small-deposit fees are charged moves to the monthly invoice. If you reconcile payins, read both <code>billing_fee_amount</code> and <code>transaction_fee_amount</code> rather than assuming one of them.</p>
<p>To adopt per-account fees, create additional fee configurations and pass <code>partner_fee_id</code> on virtual account create or update.</p>
<h2>Learn more</h2>
<ul>
<li><a href="https://blindpay.com/docs/virtual-accounts">Virtual accounts guide</a>: fee rules, account types, and statuses</li>
<li><a href="https://blindpay.com/docs/learn/partner-fees">Partner fees guide</a>: defaults vs. per-account pins for virtual accounts, and quotes</li>
<li><a href="https://blindpay.com/docs/virtual-accounts-create">Create a virtual account</a>: full request reference</li>
</ul>]]></content:encoded>
            <category>New Feature</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA["Receivers" to "Customers" migration: final notice and complete guide]]></title>
            <link>https://blindpay.com/changelog/2026-07-27-customers-rename-sunset</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-07-27-customers-rename-sunset</guid>
            <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Final call: /receivers paths will start answering 301, receiver.* webhooks will stop firing, and receiver_* fields plus receiver error codes and messages are renamed. Full field-by-field guide and an AI migration prompt inside.]]></description>
            <content:encoded><![CDATA[<p>The transition period announced in the <a href="https://blindpay.com/changelog/2026-06-04-customers-rename">June 4 changelog</a> has ended, and the final release that makes &quot;customers&quot; the only name across the BlindPay platform is about to roll out. This post is the complete guide to everything that changes.</p>
<p><strong>Timing: the renames below are not live yet.</strong> They ship with the final release, which will be announced on this changelog. Until then, the <code>receiver_*</code> request fields remain the accepted shape on the current API (sending <code>customer_*</code> request fields today is rejected). Use this guide, and the AI prompt at the end, to prepare your migration diff now, and deploy it when the release goes live.</p>
<h2>Endpoints</h2>
<p>Every legacy <code>/receivers</code> path now returns <code>301 Moved Permanently</code> pointing at its <code>/customers</code> equivalent.</p>
<table>
<thead>
<tr>
<th>Was</th>
<th>Now</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>/v1/instances/{id}/receivers[/...]</code></td>
<td><code>/v1/instances/{id}/customers[/...]</code></td>
</tr>
<tr>
<td><code>/v1/e/instances/{id}/receivers[/...]</code></td>
<td><code>/v1/e/instances/{id}/customers[/...]</code></td>
</tr>
<tr>
<td><code>/v1/instances/{id}/limits/receivers/{id}</code></td>
<td><code>/v1/instances/{id}/limits/customers/{id}</code></td>
</tr>
<tr>
<td><code>/v1/instances/{id}/external-receiver-token</code></td>
<td><code>/v1/instances/{id}/external-customer-token</code></td>
</tr>
</tbody>
</table>
<p>This covers the customer collection and item routes plus every sub-resource: bank accounts, wallets, blockchain wallets, virtual accounts, offramp wallets, limits, limit increases, and RFIs. The <code>/e/</code> external invite-flow variants redirect too.</p>
<p>Note that <code>external-receiver-token</code> is renamed even though it has no <code>/receivers/</code> path segment.</p>
<h2>Webhooks</h2>
<p><code>receiver.new</code>, <code>receiver.update</code>, and <code>receiver.delete</code> no longer fire. Subscribe to <code>customer.new</code>, <code>customer.update</code>, and <code>customer.delete</code> instead; they carry the same payloads. The dual-emit behavior from the transition window is gone, so you now receive exactly one event per action.</p>
<h2>Renamed fields</h2>
<table>
<thead>
<tr>
<th>Was</th>
<th>Now</th>
<th>Where</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>receiver_id</code></td>
<td><code>customer_id</code></td>
<td>Payins, payouts, quotes, transfers, bank accounts, wallets, blockchain wallets, virtual accounts, offramp wallets, limit increases, RFIs, TOS. Also the path segment and list filter.</td>
</tr>
<tr>
<td><code>receiver_name</code></td>
<td><code>customer_name</code></td>
<td>Customer list filter query parameter</td>
</tr>
<tr>
<td><code>receiver_local_amount</code></td>
<td><code>customer_local_amount</code></td>
<td>Quotes, payouts</td>
</tr>
<tr>
<td><code>receiver_wallet_address</code></td>
<td><code>customer_wallet_address</code></td>
<td>Transfers, transfer quotes</td>
</tr>
<tr>
<td><code>receiver_network</code></td>
<td><code>customer_network</code></td>
<td>Transfers, transfer quotes</td>
</tr>
<tr>
<td><code>receiver_token</code></td>
<td><code>customer_token</code></td>
<td>Transfers, transfer quotes</td>
</tr>
<tr>
<td><code>receiver_invite_redirect_url</code></td>
<td><code>customer_invite_redirect_url</code></td>
<td>Instance settings</td>
</tr>
<tr>
<td><code>receiver_rfi_emails_enabled</code></td>
<td><code>customer_rfi_emails_enabled</code></td>
<td>Instance settings</td>
</tr>
<tr>
<td><code>receivers_amount</code></td>
<td><code>customers_amount</code></td>
<td><code>GET /v1/instances</code>, the count of customers on the instance</td>
</tr>
<tr>
<td><code>receiver_type</code></td>
<td><code>customer_type</code></td>
<td>RFI</td>
</tr>
<tr>
<td><code>receiver_kyc_status</code></td>
<td><code>customer_kyc_status</code></td>
<td>RFI</td>
</tr>
<tr>
<td><code>receiver_aiprise_session_id</code></td>
<td><code>customer_aiprise_session_id</code></td>
<td>RFI</td>
</tr>
<tr>
<td><code>receiver_aiprise_user_profile_id</code></td>
<td><code>customer_aiprise_user_profile_id</code></td>
<td>RFI</td>
</tr>
</tbody>
</table>
<h3>The one field that keeps its name</h3>
<p><code>receiver_amount</code> is <strong>not</strong> renamed. It stays <code>receiver_amount</code> on quotes, payins, payouts, and transfers, because there it means &quot;the amount the receiving side gets&quot;, a leg of the transaction rather than a reference to the customer resource.</p>
<p>Do not confuse it with <code>receivers_amount</code> (plural), which <strong>is</strong> renamed to <code>customers_amount</code>. That one is the customer count on an instance.</p>
<p>This is the single reason a blind find-and-replace of <code>receiver</code> to <code>customer</code> will break your integration.</p>
<h2>Renamed error codes</h2>
<p>The <code>code</code> field on error responses is a stable identifier meant for programmatic handling, and eleven of them changed prefix.</p>
<table>
<thead>
<tr>
<th>Was</th>
<th>Now</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>RECEIVERS_NOT_FOUND</code></td>
<td><code>CUSTOMERS_NOT_FOUND</code></td>
</tr>
<tr>
<td><code>RECEIVERS_ALREADY_APPROVED</code></td>
<td><code>CUSTOMERS_ALREADY_APPROVED</code></td>
</tr>
<tr>
<td><code>RECEIVERS_KYC_NOT_APPROVED</code></td>
<td><code>CUSTOMERS_KYC_NOT_APPROVED</code></td>
</tr>
<tr>
<td><code>RECEIVERS_ONBOARDING_INCOMPLETE</code></td>
<td><code>CUSTOMERS_ONBOARDING_INCOMPLETE</code></td>
</tr>
<tr>
<td><code>RECEIVERS_INVALID_DATA</code></td>
<td><code>CUSTOMERS_INVALID_DATA</code></td>
</tr>
<tr>
<td><code>RECEIVERS_INVALID_PHONE</code></td>
<td><code>CUSTOMERS_INVALID_PHONE</code></td>
</tr>
<tr>
<td><code>RECEIVERS_INVALID_TAX_ID</code></td>
<td><code>CUSTOMERS_INVALID_TAX_ID</code></td>
</tr>
<tr>
<td><code>RECEIVERS_ID_DOCUMENT_INVALID</code></td>
<td><code>CUSTOMERS_ID_DOCUMENT_INVALID</code></td>
</tr>
<tr>
<td><code>RECEIVERS_COUNTRY_NOT_SUPPORTED</code></td>
<td><code>CUSTOMERS_COUNTRY_NOT_SUPPORTED</code></td>
</tr>
<tr>
<td><code>RECEIVERS_ENHANCED_KYC_REQUIRED</code></td>
<td><code>CUSTOMERS_ENHANCED_KYC_REQUIRED</code></td>
</tr>
<tr>
<td><code>RECEIVERS_BUSINESS_ENHANCED_NOT_AVAILABLE</code></td>
<td><code>CUSTOMERS_BUSINESS_ENHANCED_NOT_AVAILABLE</code></td>
</tr>
</tbody>
</table>
<h2>Renamed error messages</h2>
<p>The legacy <code>message</code> slug also changed on the errors below. If you branch on <code>message</code> rather than <code>code</code>, update both.</p>
<table>
<thead>
<tr>
<th>Was</th>
<th>Now</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>receiver_not_found</code></td>
<td><code>customer_not_found</code></td>
</tr>
<tr>
<td><code>receiver_id_not_found</code></td>
<td><code>customer_id_not_found</code></td>
</tr>
<tr>
<td><code>receiver_already_approved</code></td>
<td><code>customer_already_approved</code></td>
</tr>
<tr>
<td><code>receiver_kyc_not_approved</code></td>
<td><code>customer_kyc_not_approved</code></td>
</tr>
<tr>
<td><code>receiver_not_approved</code></td>
<td><code>customer_not_approved</code></td>
</tr>
<tr>
<td><code>receiver_limit_not_found</code></td>
<td><code>customer_limit_not_found</code></td>
</tr>
<tr>
<td><code>receiver_already_has_limit_increase_in_review</code></td>
<td><code>customer_already_has_limit_increase_in_review</code></td>
</tr>
<tr>
<td><code>vm_invalid_receiver_data</code></td>
<td><code>vm_invalid_customer_data</code></td>
</tr>
<tr>
<td><code>vm_receiver_country_not_supported</code></td>
<td><code>vm_customer_country_not_supported</code></td>
</tr>
<tr>
<td><code>vm_unsupported_receiver_type</code></td>
<td><code>vm_unsupported_customer_type</code></td>
</tr>
<tr>
<td><code>zenus_business_va_requires_business_receiver</code></td>
<td><code>zenus_business_va_requires_business_customer</code></td>
</tr>
<tr>
<td><code>beneficiary_name_must_match_receiver_for_first_party</code></td>
<td><code>beneficiary_name_must_match_customer_for_first_party</code></td>
</tr>
<tr>
<td><code>blockchain_wallet_does_not_belong_to_receiver</code></td>
<td><code>blockchain_wallet_does_not_belong_to_customer</code></td>
</tr>
<tr>
<td><code>sender_and_receiver_networks_must_be_the_same</code></td>
<td><code>sender_and_customer_networks_must_be_the_same</code></td>
</tr>
<tr>
<td><code>sender_and_receiver_tokens_must_be_the_same</code></td>
<td><code>sender_and_customer_tokens_must_be_the_same</code></td>
</tr>
</tbody>
</table>
<p>Two <code>message</code> slugs are deliberately unchanged, because they describe the receiving leg of a transaction rather than the customer resource: <code>otc_only_supported_for_sender_without_cover_fees_and_receiver_with_cover_fees</code>, and every slug involving <code>receiver_amount</code>. The <code>currency_type</code> request enum also keeps its <code>sender</code> and <code>receiver</code> values.</p>
<h2>Deprecation headers are gone</h2>
<p><code>/receivers</code> responses no longer carry <code>Deprecation: true</code>, <code>Sunset</code>, or <code>Link: rel=&quot;successor-version&quot;</code>. If you set up the CI smoke test suggested in the June changelog, it now passes trivially instead of catching anything. Replace it with a check that asserts no <code>301</code> responses from BlindPay.</p>
<h2>IDs are unchanged</h2>
<p>Customer IDs keep the <code>re_</code> prefix, and customer records keep both <code>id</code> and its canonical alias <code>customer_id</code>. No data migration is needed. Do not rewrite stored IDs.</p>
<h2>Migrate your code with an AI agent</h2>
<p>If you use an AI coding agent (Claude Code, Codex, Cursor, Windsurf, or similar), paste the prompt below into it from the root of your integration. It contains every rename from this changelog and the June announcement, including the exceptions that make a naive find-and-replace unsafe.</p>
<pre><code class="language-text">Migrate this codebase off the deprecated BlindPay &quot;receivers&quot; API surface and onto
&quot;customers&quot;. This is a rename of the API surface only: resource IDs are unchanged.

Work through the steps in order and show me a diff before applying anything.

STEP 1 - Find every call site.
Search the whole repo (including tests, fixtures, recorded HTTP cassettes, env
files, OpenAPI/Postman collections, infrastructure config, and docs) for:
  receivers, receiver_, receiverId, RECEIVERS_, &quot;receiver.&quot; (webhook event names)

STEP 2 - Rewrite URL paths.
  /v1/instances/{id}/receivers               -&gt; /v1/instances/{id}/customers
  /v1/e/instances/{id}/receivers             -&gt; /v1/e/instances/{id}/customers
  /v1/instances/{id}/limits/receivers/{rid}  -&gt; /v1/instances/{id}/limits/customers/{rid}
  /v1/instances/{id}/external-receiver-token -&gt; /v1/instances/{id}/external-customer-token
Apply to all sub-resources as well: bank-accounts, wallets, blockchain-wallets,
virtual-accounts, offramp-wallets, limit-increase, rfi.
The old paths still answer 301, so nothing breaks immediately, but every call
costs an extra round-trip until this is done.

STEP 3 - Rename request and response fields.
  receiver_id                      -&gt; customer_id
  receiver_name                    -&gt; customer_name
  receiver_local_amount            -&gt; customer_local_amount
  receiver_wallet_address          -&gt; customer_wallet_address
  receiver_network                 -&gt; customer_network
  receiver_token                   -&gt; customer_token
  receiver_invite_redirect_url     -&gt; customer_invite_redirect_url
  receiver_rfi_emails_enabled      -&gt; customer_rfi_emails_enabled
  receivers_amount                 -&gt; customers_amount
  receiver_type                    -&gt; customer_type
  receiver_kyc_status              -&gt; customer_kyc_status
  receiver_aiprise_session_id      -&gt; customer_aiprise_session_id
  receiver_aiprise_user_profile_id -&gt; customer_aiprise_user_profile_id

STEP 4 - CRITICAL EXCEPTION. Do NOT rename receiver_amount.
receiver_amount (singular) is still called receiver_amount on quotes, payins,
payouts, and transfers. It means &quot;amount the receiving side gets&quot;, not a
reference to the customer resource. Renaming it will break those calls.
Note the near-miss: receivers_amount (plural, the customer count on
GET /v1/instances) IS renamed to customers_amount. Handle each explicitly.
Never run a blanket s/receiver/customer/ over this repo.

STEP 5 - Rename webhook event names and handlers.
  receiver.new    -&gt; customer.new
  receiver.update -&gt; customer.update
  receiver.delete -&gt; customer.delete
Payloads are identical. Also update the subscription list in the BlindPay
dashboard; a code-only change will leave your endpoint silent.
The old dual-emit is gone, so if a handler was de-duplicating receiver.* against
customer.* for the same action, that workaround can be removed.

STEP 6 - Rename error codes checked in code.
Any comparison against the code field on an error response:
  RECEIVERS_NOT_FOUND -&gt; CUSTOMERS_NOT_FOUND, and the same CUSTOMERS_ prefix
  swap for ALREADY_APPROVED, KYC_NOT_APPROVED, ONBOARDING_INCOMPLETE,
  INVALID_DATA, INVALID_PHONE, INVALID_TAX_ID, ID_DOCUMENT_INVALID,
  COUNTRY_NOT_SUPPORTED, ENHANCED_KYC_REQUIRED,
  BUSINESS_ENHANCED_NOT_AVAILABLE.

STEP 6b - Rename error message slugs checked in code.
If you branch on the message field instead of code, these changed too:
  receiver_not_found            -&gt; customer_not_found
  receiver_id_not_found         -&gt; customer_id_not_found
  receiver_already_approved     -&gt; customer_already_approved
  receiver_kyc_not_approved     -&gt; customer_kyc_not_approved
  receiver_not_approved         -&gt; customer_not_approved
  receiver_limit_not_found      -&gt; customer_limit_not_found
  receiver_already_has_limit_increase_in_review
    -&gt; customer_already_has_limit_increase_in_review
  vm_invalid_receiver_data      -&gt; vm_invalid_customer_data
  vm_receiver_country_not_supported -&gt; vm_customer_country_not_supported
  vm_unsupported_receiver_type  -&gt; vm_unsupported_customer_type
  zenus_business_va_requires_business_receiver
    -&gt; zenus_business_va_requires_business_customer
  beneficiary_name_must_match_receiver_for_first_party
    -&gt; beneficiary_name_must_match_customer_for_first_party
  blockchain_wallet_does_not_belong_to_receiver
    -&gt; blockchain_wallet_does_not_belong_to_customer
  sender_and_receiver_networks_must_be_the_same
    -&gt; sender_and_customer_networks_must_be_the_same
  sender_and_receiver_tokens_must_be_the_same
    -&gt; sender_and_customer_tokens_must_be_the_same
Leave unchanged: any slug mentioning receiver_amount, and
otc_only_supported_for_sender_without_cover_fees_and_receiver_with_cover_fees.

STEP 6c - Do NOT change the currency_type request value.
currency_type still accepts 'sender' and 'receiver'. Sending 'customer' is
invalid. This pairs with the receiver_amount exception in step 4.

STEP 7 - Update the SDK accessor, if you use an official SDK.
  blindpay.receivers.*  -&gt;  blindpay.customers.*
  blindpay.receivers.bankAccounts.create(...)
    -&gt;  blindpay.customers.bankAccounts.create(...)
Method signatures are identical; only the accessor renames. Bump to the latest
release of your current major, which added customers with no import changes.

STEP 8 - Do NOT touch stored IDs.
Customer IDs keep the re_ prefix (re_abc123456789). Leave every stored ID,
fixture, and database value exactly as it is. There is no data migration.

STEP 9 - Verify.
  - grep the repo: no receivers, receiver_id, or receiver.* webhook names left
  - confirm receiver_amount is still present and untouched wherever it was before
  - run the test suite, and update fixtures or cassettes that assert on renamed
    fields
  - check logs for 301 responses from api.blindpay.com; each one is a path you
    missed

Report anything ambiguous rather than guessing.
</code></pre>
<h2>What you need to do</h2>
<ol>
<li>Update API paths from <code>/receivers</code> to <code>/customers</code>, including the <code>/e/</code> invite-flow variants and <code>external-customer-token</code>.</li>
<li>Rename request and response fields per the table above, leaving <code>receiver_amount</code> alone.</li>
<li>Update error handling: <code>code</code> comparisons from <code>RECEIVERS_*</code> to <code>CUSTOMERS_*</code>, and <code>message</code> comparisons from <code>receiver_*</code> to <code>customer_*</code>.</li>
<li>Subscribe to <code>customer.*</code> webhooks in the dashboard and update your handlers.</li>
<li>Update your SDK to the latest release of its current major, then switch <code>receivers.*</code> calls to <code>customers.*</code>.</li>
<li>Leave stored IDs untouched. The <code>re_</code> prefix is permanent.</li>
</ol>
<p>If you completed the migration before July 3, 2026, the only new work is step 3, the error <code>code</code> and <code>message</code> renames, which ship with this release.</p>
<h2>Verification checklist</h2>
<ul>
<li>Logs show zero <code>301</code> responses from <code>api.blindpay.com</code>, since each one is an unmigrated path</li>
<li>Logs show zero requests to <code>/v1/instances/*/receivers*</code> and <code>/v1/e/instances/*/receivers*</code></li>
<li>No code path reads <code>response.receiver_id</code> or any other renamed field</li>
<li><code>receiver_amount</code> is still read correctly on quotes, payins, payouts, and transfers</li>
<li>No code path compares an error <code>code</code> against a <code>RECEIVERS_*</code> value, or an error <code>message</code> against a <code>receiver_*</code> slug</li>
<li>Requests still send <code>currency_type: 'receiver'</code>, not <code>'customer'</code></li>
<li>Webhook handlers process <code>customer.new</code>, <code>customer.update</code>, and <code>customer.delete</code>, and the dashboard subscription lists them</li>
<li>SDK updated, with no remaining <code>receivers.*</code> accessor calls</li>
<li>Saved dashboard URLs use <code>/customers/</code></li>
</ul>
<h2>FAQ</h2>
<h3>What breaks if I do nothing?</h3>
<p>Requests keep working through the <code>301</code> redirects, at the cost of an extra round-trip per call, as long as your HTTP client follows redirects (browsers, <code>curl</code>, <code>requests</code>, <code>axios</code>, the official SDKs, and Postman all do by default). Three things break outright: <code>receiver.*</code> webhook subscriptions go silent, code that reads a renamed <code>receiver_*</code> response field gets <code>undefined</code>, and error handling that branches on a <code>RECEIVERS_*</code> <code>code</code> or a <code>receiver_*</code> <code>message</code> stops matching.</p>
<h3>Do I need to migrate my stored IDs?</h3>
<p>No. All IDs keep the <code>re_</code> prefix, and both <code>id</code> and <code>customer_id</code> carry the same value. We renamed the API surface, not the underlying resource.</p>
<h3>Why does <code>receiver_amount</code> keep its name?</h3>
<p>Because it does not refer to the customer resource. On a quote or a payment it means the amount landing on the receiving side, the counterpart to <code>sender_amount</code>. Renaming it to <code>customer_amount</code> would have made it read like a property of the customer record.</p>
<h3>Will a find-and-replace work?</h3>
<p>Not safely. <code>receiver_amount</code> must survive untouched while <code>receivers_amount</code> must change, and stored <code>re_</code> IDs must not be rewritten. Use the agent prompt above, which encodes those exceptions, or do the renames field by field.</p>
<h3>How do I report issues with the migration?</h3>
<p>Use the feedback button in the dashboard (under your profile dropdown) or email <a href="mailto:support@blindpay.com">support@blindpay.com</a> with <code>migration</code> in the subject. Including the request ID from the response (<code>x-blindpay-request-id</code> header) speeds up the lookup.</p>]]></content:encoded>
            <category>Migration</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
            <dc:creator>André Mayer</dc:creator>
            <dc:creator>Eric Viana</dc:creator>
        </item>
        <item>
            <title><![CDATA[Public Error Codes, New Documentation, and AI in the Docs]]></title>
            <link>https://blindpay.com/changelog/2026-07-20-error-codes-new-docs-ai-assistant</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-07-20-error-codes-new-docs-ai-assistant</guid>
            <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Stable error codes with safe-to-display descriptions on every API error, a rebuilt documentation site with an AI assistant built in, and opt-in request idempotency.]]></description>
            <content:encoded><![CDATA[<p>July's product updates: API errors become predictable and safe to show your users, the documentation gets a full rebuild, and you can now ask the docs anything.</p>
<h2>TL;DR</h2>
<ul>
<li><strong>Public error codes:</strong> every API error now returns a stable <code>code</code> and a safe-to-display <code>description</code></li>
<li><strong>New documentation:</strong> rebuilt navigation, REST-only quickstarts, and a self-hosted API reference</li>
<li><strong>AI in the docs:</strong> an assistant that knows our entire API and answers instantly</li>
<li><strong>Idempotency keys:</strong> opt-in <code>Idempotency-Key</code> header on all mutating v1 endpoints</li>
</ul>
<h2>Public error codes</h2>
<p>Every API error response now includes two additive fields: <code>code</code>, a stable identifier like <code>PAYOUTS_INSUFFICIENT_BALANCE</code>, and <code>description</code>, human-readable text safe to show your end users. Existing responses are unchanged, so nothing breaks.</p>
<p>Each code is documented with its retry semantics, so your integration knows whether to retry, stop, or ask the user to act. Browse the full list in the <a href="https://blindpay.com/docs/api/reference">API reference</a>{target=&quot;_blank&quot;}.</p>
<h2>New documentation</h2>
<p>We rebuilt <a href="https://blindpay.com/docs/introduction">blindpay.com/docs</a> from the ground up. Navigation is organized around what you are doing (Payins, Payouts, Send, Receive, Store), and every quickstart is REST-only with managed wallets, so you can integrate without touching blockchain tooling.</p>
<p>The API reference now lives at <a href="https://blindpay.com/docs/api/reference">blindpay.com/docs/api/reference</a>{target=&quot;_blank&quot;} with one URL per endpoint. All old URLs redirect.</p>
<h2>AI in the docs</h2>
<p>The docs now answer back. An AI assistant trained on our entire documentation and API reference is built into every page: ask &quot;how do I create a payout quote&quot; or paste an error code, and it gives you a direct answer with working request examples, no page hunting.</p>
<p>It is the fastest way to integrate BlindPay. Most questions that used to become support tickets now get answered in seconds, right where you are working.</p>
<p>And this is just the start: the same AI is coming to the dashboard next, where you will be able to run your entire operation by simply asking in plain language.</p>
<h2>Idempotency keys</h2>
<p>Mutating v1 endpoints now accept an optional <code>Idempotency-Key</code> header. Retry with the same key and you get the original response back instead of a duplicate action, making timeouts and retries safe on payment-creating calls.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Eric Viana</dc:creator>
            <dc:creator>André Mayer</dc:creator>
        </item>
        <item>
            <title><![CDATA[Instance RFIs]]></title>
            <link>https://blindpay.com/changelog/2026-07-03-instance-rfis</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-07-03-instance-rfis</guid>
            <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Compliance can now request information about your instance itself, answered from the dashboard or via two new API endpoints, with no effect on your account status.]]></description>
            <content:encoded><![CDATA[<p>Requests for Information now come in two kinds. Alongside the existing customer RFIs, BlindPay compliance can open an RFI on your <strong>instance</strong> itself, for example to refresh business documents during a periodic review. Your team answers from the dashboard's instance settings page or through the API.</p>
<h2>TL;DR</h2>
<ul>
<li>New endpoints: <code>GET /v1/instances/{instance_id}/rfi</code> and <code>POST /v1/instances/{instance_id}/rfi</code></li>
<li>Same section and field format as customer RFIs</li>
<li>Standalone by design: no status changes, no blocked payments, ever</li>
<li>If the 27-day window passes, the request simply expires and compliance follows up directly</li>
<li>Email cadence to all instance members at day 0, 7, and 17, plus an expiry notice</li>
</ul>
<h2>How it works</h2>
<p>When compliance opens an instance RFI, every active member of your instance receives an email and the request appears under <strong>Settings → Instance</strong> in the dashboard. Fetch it with <code>GET /v1/instances/{instance_id}/rfi</code>, collect the requested fields, and submit them in a single shot with <code>POST /v1/instances/{instance_id}/rfi</code>.</p>
<p>Unlike customer RFIs, an instance RFI never touches your onboarding or KYB status and never blocks payins or payouts. See the <a href="https://blindpay.com/docs/kb/instance-requests">Instance RFI documentation</a> and the <a href="https://blindpay.com/docs/kb/instance-requests">Instance RFIs guide</a> for details.</p>]]></content:encoded>
            <category>New Feature</category>
            <dc:creator>Eric Viana</dc:creator>
        </item>
        <item>
            <title><![CDATA[AI Document Analysis]]></title>
            <link>https://blindpay.com/changelog/2026-06-14-analyze-document</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-06-14-analyze-document</guid>
            <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A new endpoint reads a KYC document with AI and returns an approval-rate signal, so you can pre-screen files before submitting them for verification.]]></description>
            <content:encoded><![CDATA[<p>You can now pre-screen KYC documents before submitting them. The new <code>POST /v1/upload/analyze</code> endpoint reads a PDF, JPG, or PNG with AI, checks it against the rules for its type, and returns an approval-rate signal with a short reason.</p>
<h2>TL;DR</h2>
<ul>
<li>New endpoint: <code>POST /v1/upload/analyze</code></li>
<li>Returns <code>approval_rate</code> of <code>low</code>, <code>medium</code>, or <code>high</code> plus a one-line <code>description</code></li>
<li>Supports 13 document types, from identity and passport to bank and financial statements</li>
<li>Optional <code>metadata</code> cross-checks values you already collected against the document</li>
</ul>
<h2>How it works</h2>
<p>Send a <code>file</code> (PDF, JPG, or PNG up to 5MB) and a <code>type</code>. The analysis runs the document against the rule set for that type and returns how confident it is that the document should be approved, with a short reason you can show to the customer or your reviewers.</p>
<p>The result is a signal, not a decision. KYC approval still comes from the verification flow; this lets you catch an expired ID or an out-of-date proof of address early, before submitting.</p>
<h2>Optional metadata</h2>
<p>Pass <code>metadata</code> as a JSON string of values you already have, such as <code>full_name</code>, <code>date_of_birth</code>, or <code>address</code>, and they are matched against the document. A clear mismatch caps the rating at <code>low</code> and the reason explains it. Requested transaction limits (<code>requested_per_transaction</code>, <code>requested_daily</code>, <code>requested_monthly</code>) are checked for sufficient capacity instead of an exact match.</p>
<h2>Get started</h2>
<p>See the <a href="https://blindpay.com/docs/learn/analyze-document">Analyze Document documentation</a>. The full request and response schema is in the <a href="https://api.blindpay.com/reference#tag/upload/POST/v1/upload/analyze">BlindPay API Docs</a>{target=&quot;_blank&quot;}.</p>]]></content:encoded>
            <category>New Feature</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[SEPA Multi-Chain, EUR-Amount Quotes, and Offramp Wallet Support]]></title>
            <link>https://blindpay.com/changelog/2026-06-06-sepa-multi-chain-eur-quotes-and-offramp</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-06-06-sepa-multi-chain-eur-quotes-and-offramp</guid>
            <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[SEPA payouts now accept USDC from Arbitrum, Base, Solana, and Stellar in addition to Polygon and Ethereum. Quotes can be requested by the EUR amount the receiver should get. SEPA bank accounts can also be linked to offramp wallets.]]></description>
            <content:encoded><![CDATA[<p>Three updates to the SEPA EUR payouts rail we launched on May 29: more deposit chains, the ability to quote by the receiver's EUR amount, and offramp wallet support.</p>
<h2>TL;DR</h2>
<ul>
<li>USDC for SEPA is now accepted on Polygon, Ethereum, Arbitrum, Base, Solana, and Stellar</li>
<li>Quotes can be requested by the EUR amount the receiver should get, minimum 10 EUR. The existing USDC-amount mode is unchanged, minimum 11 USDC</li>
<li>SEPA bank accounts can be paired with offramp wallets on any of the supported deposit chains</li>
</ul>
<h2>Multi-chain deposits</h2>
<p>When you create a SEPA payout the USDC can come from any of these chains: Polygon, Ethereum, Arbitrum, Base, Solana, and Stellar. Settlement to the receiver's IBAN is unaffected, funds arrive within 5 to 30 minutes regardless of the source chain.</p>
<p>Native USDC only on each chain. Tron is not supported for SEPA.</p>
<h2>Quote by EUR amount</h2>
<p>Until now, every SEPA quote took a USDC amount and returned the EUR the receiver would get. You can now do the reverse: specify the EUR amount the receiver should receive and we calculate the USDC you need to send.</p>
<p>The mode is selected on the quote request via <code>currency_type</code>:</p>
<ul>
<li><code>currency_type: &quot;sender&quot;</code> for the USDC-amount path. Minimum 11 USDC.</li>
<li><code>currency_type: &quot;receiver&quot;</code> for the EUR-amount path. Minimum 10 EUR.</li>
</ul>
<h2>Offramp wallets</h2>
<p>SEPA bank accounts can now be linked to offramp wallets on Polygon, Ethereum, Arbitrum, Base, and Solana. Funds sent to the offramp wallet are converted to EUR and settled to the linked IBAN automatically, with the same 5 to 30 minute window. Tron offramp wallets cannot be paired with SEPA bank accounts.</p>
<p>See the <a href="https://blindpay.com/docs/offramp-wallets">offramp wallets documentation</a> to get started.</p>
<h2>Get started</h2>
<p>These updates are live for every account that already has SEPA enabled. Existing SEPA bank accounts work with all the new chains and the EUR-amount quote mode without any reconfiguration.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Alves</dc:creator>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA["Receivers" renamed to "Customers"]]></title>
            <link>https://blindpay.com/changelog/2026-06-04-customers-rename</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-06-04-customers-rename</guid>
            <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We're renaming "Receivers" to "Customers" across the entire BlindPay platform. Both endpoints will work during a 1-month transition period.]]></description>
            <content:encoded><![CDATA[<p>We're renaming &quot;Receivers&quot; to &quot;Customers&quot; across the entire BlindPay platform: API endpoints, SDKs, documentation, and dashboard.</p>
<h2>TL;DR</h2>
<ul>
<li>All <code>/receivers</code> endpoints now have <code>/customers</code> equivalents</li>
<li>Both <code>/receivers</code> and <code>/customers</code> paths work identically through <strong>July 3, 2026</strong></li>
<li>After that date, <code>/receivers</code> endpoints return <code>301 Moved Permanently</code></li>
<li>IDs stay the same (<code>re_</code> prefix), no data migration needed</li>
<li>SDKs add a <code>customers</code> accessor to their current majors and <code>receivers</code> is deprecated alongside, no import changes required</li>
</ul>
<h2>What changed</h2>
<p>Every API endpoint that previously used <code>/receivers</code> in its path now has a <code>/customers</code> equivalent:</p>
<pre><code>GET    /v1/instances/{instance_id}/receivers                →  GET    /v1/instances/{instance_id}/customers
POST   /v1/instances/{instance_id}/receivers                →  POST   /v1/instances/{instance_id}/customers
GET    /v1/instances/{instance_id}/receivers/{receiver_id}  →  GET    /v1/instances/{instance_id}/customers/{customer_id}
PUT    /v1/instances/{instance_id}/receivers/{receiver_id}  →  PUT    /v1/instances/{instance_id}/customers/{customer_id}
DELETE /v1/instances/{instance_id}/receivers/{receiver_id}  →  DELETE /v1/instances/{instance_id}/customers/{customer_id}
</code></pre>
<p>This applies to all sub-resources too: bank accounts, wallets, virtual accounts, blockchain wallets, offramp wallets, and limit increases.</p>
<h2>Response changes</h2>
<p>During the transition period, every customer record returned by either <code>/customers</code> or <code>/receivers</code> carries a <code>customer_id</code> alias of its primary key. The underlying ID still uses the <code>re_</code> prefix and remains in the <code>id</code> field:</p>
<pre><code class="language-json">{
  &quot;id&quot;: &quot;re_abc123456789&quot;,
  &quot;customer_id&quot;: &quot;re_abc123456789&quot;,
  &quot;first_name&quot;: &quot;Alice&quot;
}
</code></pre>
<p>Payouts and payins that reference a customer expose both <code>receiver_id</code> and <code>customer_id</code> foreign-key fields during the transition; either accepts the same <code>re_*</code> value. Sub-resources scoped under <code>/customers/{id}/…</code> (bank accounts, wallets, virtual accounts, blockchain wallets, offramp wallets) derive the parent from the URL, so no FK alias appears in the response body.</p>
<p>After the sunset, the <code>customer_id</code> alias becomes the canonical field name across the API.</p>
<h2>Webhook changes</h2>
<p>Three new webhook events fire alongside the existing ones:</p>
<ul>
<li><code>customer.new</code>: fires whenever <code>receiver.new</code> fires</li>
<li><code>customer.update</code>: fires whenever <code>receiver.update</code> fires</li>
<li><code>customer.delete</code>: fires whenever <code>receiver.delete</code> fires</li>
</ul>
<p>You <strong>must subscribe to <code>customer.*</code> before July 3, 2026</strong>. After the sunset, <code>receiver.*</code> events stop firing entirely. If you don't migrate, your endpoint goes silent.</p>
<p>During the transition window (June 4 → July 3), every create and update emits both events: the legacy <code>receiver.*</code> and its <code>customer.*</code> counterpart. If your endpoint is subscribed to both, your handler receives the same action twice. We intentionally dual-emit so you can migrate your handlers in any order, but make sure your processing is idempotent on the resource id, or drop the <code>receiver.*</code> subscription once <code>customer.*</code> is wired up.</p>
<h2>SDK updates</h2>
<table>
<thead>
<tr>
<th>SDK</th>
<th>Now (transition)</th>
<th>At/after sunset</th>
</tr>
</thead>
<tbody>
<tr>
<td>Node.js</td>
<td>Minor release adds <code>customers</code>, marks <code>receivers</code> <code>@deprecated</code> in JSDoc.</td>
<td>Next major (4.0.0) removes <code>receivers</code>.</td>
</tr>
<tr>
<td>Python</td>
<td>Minor release adds <code>customers</code>, marks <code>receivers</code> deprecated with warning.</td>
<td>Next major (2.0.0) removes <code>receivers</code>.</td>
</tr>
<tr>
<td>Go</td>
<td>Minor release adds <code>customers</code> package, <code>// Deprecated:</code> on <code>receivers</code>.</td>
<td><strong>No v2 planned for this rename.</strong> <code>receivers</code> stays as a deprecated forwarder in v1.</td>
</tr>
<tr>
<td>PHP</td>
<td>Minor release adds <code>customers</code>, marks <code>receivers</code> <code>@deprecated</code> in PHPDoc.</td>
<td>Next major (2.0.0) removes <code>receivers</code>.</td>
</tr>
<tr>
<td>Swift</td>
<td>Minor release adds <code>customers</code>, <code>@available(*, deprecated)</code> on <code>receivers</code>.</td>
<td>Next major (2.0.0) removes <code>receivers</code>.</td>
</tr>
</tbody>
</table>
<p>No import path changes during the transition. Just update to the latest version of your current major and the <code>customers</code> accessor is there. For Node, Python, PHP, and Swift, a future major release (after sunset) removes the deprecated <code>receivers</code> surface; that's when imports change in those SDKs.</p>
<p><strong>Go is treated differently.</strong> <code>receivers</code> stays as a thin deprecated forwarder in v1 indefinitely. <code>gopls</code>, <code>staticcheck SA1019</code>, and <code>godoc</code> will flag usage; nothing breaks.</p>
<p>Method signatures are unchanged. Only the resource accessor renames. For most projects this is a single find/replace. Example in Node.js SDK:</p>
<pre><code class="language-diff">- await blindpay.receivers.list()
+ await blindpay.customers.list()

- await blindpay.receivers.bankAccounts.create({ ... })
+ await blindpay.customers.bankAccounts.create({ ... })
</code></pre>
<h2>What you need to do</h2>
<ol>
<li><strong>Update your API calls</strong> to use <code>/customers</code> instead of <code>/receivers</code></li>
<li><strong>Update field references</strong> from <code>receiver_id</code> to <code>customer_id</code> in your code</li>
<li><strong>Update webhook subscriptions</strong> to use <code>customer.new</code>, <code>customer.update</code>, and <code>customer.delete</code></li>
<li><strong>Update your SDK</strong> to the latest version of its current major. The <code>customers</code> accessor is added there, no import changes required</li>
</ol>
<h2>Timeline</h2>
<ul>
<li><strong>June 4, 2026</strong>: <code>/customers</code> endpoints live. Both <code>/receivers</code> and <code>/customers</code> accept requests. Receiver responses include <code>Deprecation: true</code> and <code>Sunset: Fri, 03 Jul 2026 00:00:00 GMT</code> headers, plus a <code>Link: rel=&quot;successor-version&quot;</code> pointing to the customer equivalent.</li>
<li><strong>July 3, 2026</strong>: Sunset date. <code>/receivers</code> endpoints return <code>301 Moved Permanently</code> redirecting to <code>/customers</code>. SDK code calling <code>receivers.*</code> continues to work via the redirect.</li>
<li><strong>Later</strong>: <code>/receivers</code> endpoints removed entirely. New SDK majors ship for Node (v4), Python (v2), PHP (v2), and Swift (v2), dropping the deprecated <code>receivers</code> surface. The Go SDK keeps <code>receivers</code> as a deprecated forwarder in v1; no v2 planned for this rename. Previous SDK majors enter maintenance mode (security fixes only).</li>
</ul>
<h2>Detect deprecation programmatically</h2>
<p>Every <code>/receivers</code> response carries deprecation metadata you can monitor in tests or runtime logs:</p>
<pre><code class="language-http">HTTP/1.1 200 OK
Deprecation: true
Sunset: Fri, 03 Jul 2026 00:00:00 GMT
Link: &lt;/v1/instances/{instance_id}/customers&gt;; rel=&quot;successor-version&quot;
Content-Type: application/json
</code></pre>
<p>Useful in CI: fail a smoke test if production traffic still hits <code>Deprecation: true</code> endpoints close to the sunset date.</p>
<h2>Verification checklist</h2>
<p>Before considering your migration complete:</p>
<ul>
<li>Logs show zero requests to <code>/v1/instances/*/receivers*</code> paths from your services</li>
<li>CI / monitoring asserts no <code>Deprecation: true</code> header on production responses</li>
<li>Webhook handlers process <code>customer.new</code>, <code>customer.update</code>, and <code>customer.delete</code></li>
<li>No code paths reference <code>response.receiver_id</code></li>
<li>SDK updated to the latest minor release of its current major</li>
<li>Saved dashboard URLs use <code>/customers/</code></li>
</ul>
<h2>FAQ</h2>
<h3>What if I don't migrate before July 3, 2026?</h3>
<p><code>/receivers</code> paths return <code>301 Moved Permanently</code> pointing to the equivalent <code>/customers</code> URL. Most HTTP clients (browsers, <code>curl</code>, <code>requests</code>, <code>axios</code>, official SDKs, Postman) follow redirects automatically, so traffic keeps working, but you spend an extra round-trip per call and rely on redirect semantics. Migrate before that date.</p>
<h3>Can I migrate one resource group at a time?</h3>
<p>Yes. The customer mirrors are independent per resource group (customers, bank accounts, wallets, virtual accounts, etc.). You can switch your customer-creation flow over this week and your bank-account-creation flow next week without coordination. Each endpoint accepts the new path independently.</p>
<h3>Will I get duplicate webhook events during the transition?</h3>
<p>Yes, every create and update emits both <code>receiver.*</code> and <code>customer.*</code> if you are subscribed to both. We dual-emit so you can migrate handlers in any order. Subscribe to one set or the other to avoid handling the same event twice.</p>
<h3>Do I need to migrate my stored IDs?</h3>
<p>No. All IDs keep the <code>re_</code> prefix. The same ID works with both <code>/receivers</code> and <code>/customers</code> endpoints. We are renaming the API surface, not the underlying resource.</p>
<h3>How do I report issues with the migration?</h3>
<p>Use the feedback button in the dashboard (under your profile dropdown) or email <a href="mailto:support@blindpay.com">support@blindpay.com</a> with <code>migration</code> in the subject. Including the request ID from a deprecated response (<code>x-blindpay-request-id</code> header) speeds up the lookup.</p>]]></content:encoded>
            <category>Migration</category>
            <dc:creator>Alves</dc:creator>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[SEPA EUR Payouts]]></title>
            <link>https://blindpay.com/changelog/2026-05-29-sepa-eur-payouts</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-05-29-sepa-eur-payouts</guid>
            <pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Send USDC and have your receiver get EUR in any SEPA-zone bank account across 40 countries, with settlement in 5 to 30 minutes. Supports B2B, B2C, C2B, and C2C use cases.]]></description>
            <content:encoded><![CDATA[<p>You can now send USDC and have your receiver get EUR across the SEPA zone. USDC moves on Polygon or Ethereum, and EUR lands in the receiver's IBAN within 5 to 30 minutes.</p>
<h2>TL;DR</h2>
<ul>
<li>Send USDC and pay receivers in EUR across 40 SEPA-zone countries</li>
<li>USDC on Polygon or Ethereum</li>
<li>Minimum payout: 11 USDC</li>
<li>Per-payout maximum: $100,000 when the receiver is an individual, $300,000 when the receiver is a business</li>
<li>Settlement in 5 to 30 minutes after we receive your USDC</li>
<li>Supports B2B, B2C, C2B, and C2C use cases. 7 countries are C2C-only (see below)</li>
<li>Same payout API as every other rail. Create a SEPA bank account, request a quote, execute the payout</li>
</ul>
<h2>How it works</h2>
<p>The flow is identical to your existing payouts:</p>
<ol>
<li>Create a bank account with <code>type: &quot;sepa&quot;</code>, the receiver's IBAN, BIC, full name, and address. The country of the IBAN determines which use cases are available (see the C2C-only list below).</li>
<li>Request a quote for the USDC amount you want to send. We return the EUR your receiver will get.</li>
<li>Execute the payout. EUR settles to the receiver's IBAN within 5 to 30 minutes after we receive your USDC.</li>
</ol>
<h2>Rules</h2>
<ul>
<li><strong>Minimum</strong>: 11 USDC per payout.</li>
<li><strong>Per-payout maximum</strong>: $100,000 when the receiver is an individual (B2C, C2C) and $300,000 when the receiver is a business (B2B, C2B).</li>
<li><strong>No fixed EUR amounts</strong>: quotes take a USDC amount and return the EUR your receiver gets.</li>
<li><strong>Networks</strong>: USDC on Polygon or Ethereum mainnet. Native USDC only.</li>
<li><strong>Receiver country</strong>: must be one of the 40 SEPA-zone countries listed below.</li>
</ul>
<h2>Supported countries</h2>
<p>All 40 countries below support B2B, B2C, C2B, and C2C use cases unless flagged:</p>
<p>Andorra (AD), Albania (AL), Austria (AT)*, Belgium (BE), Bulgaria (BG), Switzerland (CH), Cyprus (CY), Czech Republic (CZ), Germany (DE), Denmark (DK), Estonia (EE)*, Spain (ES), Finland (FI)*, France (FR)*, United Kingdom (GB), Greece (GR), Croatia (HR), Hungary (HU), Ireland (IE), Iceland (IS), Italy (IT), Liechtenstein (LI), Lithuania (LT)*, Luxembourg (LU), Latvia (LV), Monaco (MC), Moldova (MD), Montenegro (ME), North Macedonia (MK), Malta (MT), Netherlands (NL), Norway (NO)*, Poland (PL), Portugal (PT)*, Romania (RO), Sweden (SE), Slovenia (SI), Slovakia (SK), San Marino (SM), Vatican City (VA).</p>
<p>* <strong>C2C-only countries</strong>: Austria (AT), Estonia (EE), Finland (FI), France (FR), Lithuania (LT), Norway (NO), and Portugal (PT) only accept C2C (individual to individual) payouts. Sending to a business beneficiary in these countries (B2B, C2B) or sending from a business sender (B2C) is not supported.</p>
<p>The use case is derived from the sender (your customer) and the receiver:</p>
<ul>
<li><strong>B2B</strong>: business sender to business beneficiary</li>
<li><strong>B2C</strong>: business sender to individual beneficiary</li>
<li><strong>C2B</strong>: individual sender to business beneficiary</li>
<li><strong>C2C</strong>: individual sender to individual beneficiary</li>
</ul>
<h2>Get started</h2>
<p>If your account already has KYC approved, SEPA is available immediately, no extra activation. Create a SEPA bank account from the dashboard or the API, and you're ready to send your first payout.</p>]]></content:encoded>
            <category>New Feature</category>
            <dc:creator>Alves</dc:creator>
        </item>
        <item>
            <title><![CDATA[RFI APIs, Audit Logs, and TED Payouts in Brazil]]></title>
            <link>https://blindpay.com/changelog/2026-05-22-rfi-apis-audit-logs-and-ted-payouts-brazil</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-05-22-rfi-apis-audit-logs-and-ted-payouts-brazil</guid>
            <pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A programmatic Request for Information flow, a dedicated audit trail for sensitive team actions, and TED as a new payout rail in Brazil for high-volume transactions.]]></description>
            <content:encoded><![CDATA[<p>May's product updates: compliance review goes fully programmatic, every sensitive action is traceable, and Brazilian payouts gain a high-value rail.</p>
<h2>TL;DR</h2>
<ul>
<li><strong>RFI APIs:</strong> programmatic Request for Information flow</li>
<li><strong>Audit Logs:</strong> full visibility into sensitive team actions</li>
<li><strong>TED:</strong> high-volume payouts in Brazil</li>
</ul>
<h2>RFI APIs</h2>
<p>Compliance review is now fully programmatic. You no longer need to email supporting documents when a customer requires additional information. Once you create a customer, we will notify you by email and webhook whenever a Request for Information (RFI) is opened, and your team can respond directly through the API.</p>
<p>This eliminates manual handoffs, shortens KYC/KYB turnaround times, and keeps the entire review trail inside your own systems. <a href="https://blindpay.com/docs/learn/rfi">Read the RFI documentation</a> to get started.</p>
<h2>Audit Logs</h2>
<p>Every sensitive action performed by members of your organization is now recorded in a dedicated audit trail, accessible under <strong>Settings → Audit logs</strong>. Each entry captures the actor, the affected resource, IP address, and a UTC timestamp, providing the traceability that internal and external auditors expect.</p>
<p>Audit Logs are part of our ongoing security commitment and are designed to support SOC 2, ISO 27001, and customer-led audit workflows. <a href="https://blindpay.com/changelog/2026-04-24-audit-logs">Read more in the Audit Logs changelog</a>.</p>
<h2>TED Payouts in Brazil</h2>
<p>BlindPay now supports TED (Transferência Eletrônica Disponível) as a payout rail in Brazil, complementing our existing PIX coverage. TED is the preferred rail for high-value, business-to-business transactions and enables you to settle larger volumes with the same instance configuration you already use today.</p>
<p>TED is available as a selectable bank account type and as a payin method. Review the <a href="https://blindpay.com/docs/payouts?flavor=advanced">Payouts documentation</a> and the <a href="https://blindpay.com/docs/bank-accounts?flavor=advanced">Bank Accounts reference</a> for setup details.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Alves</dc:creator>
            <dc:creator>Eric Viana</dc:creator>
        </item>
        <item>
            <title><![CDATA[Stellar Wallet Rotation and Testnet USDB Fix]]></title>
            <link>https://blindpay.com/changelog/2026-05-15-stellar-wallet-rotation-and-testnet-fix</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-05-15-stellar-wallet-rotation-and-testnet-fix</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Rotated the Stellar mainnet operational wallet and testnet USDB issuer, and fixed a token mismatch bug where trustline and mint endpoints used a different USDB issuer than payins and payouts on Stellar testnet.]]></description>
            <content:encoded><![CDATA[<p>Two Stellar wallet rotations and a bug fix that affected development-instance customers on Stellar testnet.</p>
<h2>TL;DR</h2>
<ul>
<li>Fixed USDB issuer mismatch on Stellar testnet trustline and mint endpoints</li>
<li>Rotated the BlindPay operational wallet on Stellar mainnet</li>
<li>Rotated the USDB issuer on Stellar testnet (action required for development instances)</li>
</ul>
<h2>Bug fix: USDB issuer mismatch on Stellar testnet</h2>
<p>The <code>POST /create-asset-trustline</code> and <code>POST /mint-usdb-stellar</code> endpoints were referencing a different USDB issuer than the one used by payins and payouts. This caused development-instance customers to see different tokens depending on the operation. Both endpoints now use the same issuer as all other operations.</p>
<p>No API contract changes — request and response schemas remain the same.</p>
<h2>Mainnet operational wallet rotated</h2>
<p>The BlindPay treasury wallet on Stellar mainnet has been rotated to <code>GCOSSQDM2SWMHRP7CDBOLL2V45NHCRLUWUCEHPPBA2ABCOOLPOLZKIHE</code>. This wallet receives payout crypto and sends payin crypto on Stellar mainnet. No action is required from customers — the system already uses the new wallet.</p>
<h2>Testnet USDB issuer rotated</h2>
<p>The USDB asset issuer on Stellar testnet has been rotated to <code>GCQSSIMOW5OCGULZATDXKU5MOJBOMFX6G65X6CXZDQ7AIB3SKFUZ67NX</code>.</p>
<p><strong>Action required for development instances on Stellar testnet:</strong></p>
<ol>
<li>Create a new USDB trustline via <code>POST /create-asset-trustline</code></li>
<li>Mint new USDB via <code>POST /mint-usdb-stellar</code></li>
</ol>
<p>Old USDB balances from the previous issuer are orphaned and no longer recognized by the system.</p>]]></content:encoded>
            <category>Infrastructure</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Audit Logs]]></title>
            <link>https://blindpay.com/changelog/2026-04-24-audit-logs</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-04-24-audit-logs</guid>
            <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Track actions across your instance with audit logs. See who did what, when, from where, and whether a passkey was used, from the dashboard or the API.]]></description>
            <content:encoded><![CDATA[<p>You can now see a history of actions that happen inside your instance, who did it, how, and from where.</p>
<h2>TL;DR</h2>
<ul>
<li>Audit trail for actions on your instance</li>
<li>Dashboard UI under <strong>Settings → Audit logs</strong></li>
<li>API endpoints for programmatic access</li>
<li>Tracks actor identity, passkey usage, IP address, country, user agent, and metadata</li>
<li>Distinguishes between dashboard (user) and API key actions</li>
<li>Filterable by feature, operation, actor type, user ID, API key ID, and entity ID</li>
</ul>
<h2>What's logged</h2>
<p>Create, update, and delete operations across the platform are recorded:</p>
<ul>
<li><strong>Customers</strong> - create, update, delete</li>
<li><strong>Bank accounts</strong> - create, delete</li>
<li><strong>Blockchain wallets</strong> - create, delete</li>
<li><strong>Blockchain operations</strong> - asset trustlines, USDB minting, Solana delegation</li>
<li><strong>Offramp wallets</strong> - create</li>
<li><strong>Virtual accounts</strong> - create, update</li>
<li><strong>Wallets</strong> - create, delete</li>
<li><strong>Payins</strong> - create</li>
<li><strong>Payouts</strong> - create, update (document submission)</li>
<li><strong>Transfers</strong> - create</li>
<li><strong>Customer limit increases</strong> - create</li>
<li><strong>API keys</strong> - create, delete</li>
<li><strong>Team members</strong> - update role, remove</li>
<li><strong>Invites</strong> - create, accept, delete</li>
<li><strong>Partner fees</strong> - create, delete</li>
<li><strong>Billing</strong> - update details, pay invoice, collect fees, portal session</li>
<li><strong>Onboarding</strong> - every step from business details to completion</li>
<li><strong>Webhook endpoints</strong> - create, delete</li>
</ul>
<h2>What each log captures</h2>
<p>Every audit log entry includes:</p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Actor</strong></td>
<td>The user or API key that performed the action</td>
</tr>
<tr>
<td><strong>Actor type</strong></td>
<td><code>user</code> (dashboard) or <code>api_key</code> (programmatic)</td>
</tr>
<tr>
<td><strong>Passkey</strong></td>
<td>Whether the action was verified with a passkey</td>
</tr>
<tr>
<td><strong>Feature</strong></td>
<td>The area of the platform (e.g. <code>bank_account</code>, <code>payout</code>)</td>
</tr>
<tr>
<td><strong>Operation</strong></td>
<td><code>create</code>, <code>update</code>, or <code>delete</code></td>
</tr>
<tr>
<td><strong>Entity</strong></td>
<td>The type and ID of the affected resource</td>
</tr>
<tr>
<td><strong>IP address</strong></td>
<td>Origin IP of the request</td>
</tr>
<tr>
<td><strong>Country</strong></td>
<td>Country derived from the request</td>
</tr>
<tr>
<td><strong>User agent</strong></td>
<td>Browser or SDK making the request</td>
</tr>
<tr>
<td><strong>Metadata</strong></td>
<td>Additional context specific to the action</td>
</tr>
</tbody>
</table>
<h2>Dashboard</h2>
<p>Navigate to <strong>Settings → Audit logs</strong> to browse your instance's activity. Click any entry to open the detail pane with the full breakdown: actor info, request metadata, and action-specific context.</p>
<p>Use the filters to narrow down by feature, operation, actor type, user ID, API key ID, or entity ID.</p>
<h2>API</h2>
<p>Two new endpoints are available:</p>
<pre><code>GET /v1/instances/{instance_id}/audit-logs
GET /v1/instances/{instance_id}/audit-logs/{id}
</code></pre>
<p>The list endpoint returns a paginated list of audit logs for your instance. It supports cursor-based pagination and the same filters available in the dashboard, plus date range filtering with <code>start_date</code> and <code>end_date</code>. The detail endpoint returns a single audit log entry by ID.</p>
<h2>Permissions</h2>
<p>Only <strong>owner</strong> and <strong>admin</strong> roles can view audit logs.</p>]]></content:encoded>
            <category>New Feature</category>
            <dc:creator>Alves</dc:creator>
        </item>
        <item>
            <title><![CDATA[Payments Expansion, 1 Business Day SLA, BlindPay AI & CLI, and Passkey Enforcement]]></title>
            <link>https://blindpay.com/changelog/2026-04-23-payments-expansion-ai-cli-passkey-enforcement</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-04-23-payments-expansion-ai-cli-passkey-enforcement</guid>
            <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[ACH, Wire, RTP, and SWIFT payin and payout coverage summarized in one table, onboarding SLA reduced to 1 business day, a new AI & CLI surface for faster integrations, and organization-wide passkey enforcement for critical actions.]]></description>
            <content:encoded><![CDATA[<p>A recap of the payments expansion shipped over the last three months, a faster onboarding SLA, a new AI &amp; CLI surface, and tighter account security with passkey enforcement.</p>
<h2>TL;DR</h2>
<ul>
<li>ACH, Wire, RTP, and SWIFT updates</li>
<li>1 Business Day SLA</li>
<li>BlindPay AI &amp; CLI</li>
<li>Passkey Enforcement</li>
</ul>
<hr />
<h2>ACH, Wire, RTP, and SWIFT Updates</h2>
<p>Over the last three months, we've been adding more providers and enhancing the payments experience at BlindPay. Here's a summary of what's available today:</p>
<table>
<thead>
<tr>
<th>Method</th>
<th>Payins (Memo)</th>
<th>Payins (VA)</th>
<th>Payouts</th>
</tr>
</thead>
<tbody>
<tr>
<td>ACH</td>
<td>✅</td>
<td>✅</td>
<td>✅</td>
</tr>
<tr>
<td>Wire</td>
<td>✅</td>
<td>✅</td>
<td>✅ (Only VA)</td>
</tr>
<tr>
<td>RTP</td>
<td>✅</td>
<td>✅</td>
<td>✅</td>
</tr>
<tr>
<td>SWIFT</td>
<td>✗</td>
<td>✅</td>
<td>✅</td>
</tr>
</tbody>
</table>
<hr />
<h2>1 Business Day SLA</h2>
<p>We've made our onboarding process more seamless. No additional information beyond what's in the <a href="https://blindpay.com/docs/introduction">documentation</a> will be required, and the SLA has been reduced from <strong>3 to 1 business day</strong>.</p>
<p>If you're having trouble with the KYC/KYB process, please reach out directly to <a href="mailto:bernardo@blindpay.com">bernardo@blindpay.com</a>.</p>
<hr />
<h2>BlindPay AI &amp; CLI</h2>
<p>We launched our new <a href="https://blindpay.com/ai">CLI and AI page</a>, where you can see all the tools we've been shipping to improve your integration experience.</p>
<p>You can ask AI to run commands like <code>blindpay customers list --json</code> to debug or test things faster. <a href="https://blindpay.com/blog/cli">Learn more here</a>.</p>
<hr />
<h2>Passkey Enforcement</h2>
<p>You can now require all team members using the BlindPay platform to enable passkeys. Once enforced, critical actions — such as initiating a payout, adding a bank account, creating wallets, or inviting new members — will require passkey verification.</p>
<p>Go to your instance &gt; <strong>Settings</strong> &gt; toggle the <strong>Enforce Passkey</strong> option.</p>
<p><video controls src="https://pub-4fabf5dd55154f19a0384b16f2b816d9.r2.dev/passkeys_compressed.mp4" class="w-full rounded-lg"></video></p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Eric Viana</dc:creator>
            <dc:creator>Bernardo Simonassi</dc:creator>
            <dc:creator>André Mayer</dc:creator>
            <dc:creator>Alves</dc:creator>
        </item>
        <item>
            <title><![CDATA[Faster KYB, No More RFIs, and Website Field Required]]></title>
            <link>https://blindpay.com/changelog/2026-04-03-faster-kyb-no-rfis-website-required</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-04-03-faster-kyb-no-rfis-website-required</guid>
            <pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[KYB verification now takes 1 business day, document requests are limited to what's in our API docs, and the website field becomes required for Business customers on May 2.]]></description>
            <content:encoded><![CDATA[<p>Three changes to make compliance smoother and set expectations for an upcoming API requirement.</p>
<h2>TL;DR</h2>
<ul>
<li>KYB verification reduced from 3 business days to 1</li>
<li>No more RFIs — only documents listed in our API docs will ever be requested</li>
<li><strong>Breaking change (May 2, 2026):</strong> the <code>website</code> field becomes required when creating a Business customer</li>
</ul>
<hr />
<h2>KYB Verification in 1 Business Day</h2>
<p>KYB verification now completes within <strong>1 business day</strong>, down from 3. No changes needed on your side — faster turnaround applies automatically to all new submissions.</p>
<hr />
<h2>No More RFIs</h2>
<p>We will only ever request documents that are explicitly listed in our <a href="https://blindpay.com/docs/introduction">API documentation</a>. Ad-hoc Requests for Information (RFIs) are eliminated. If it's not in the docs, we won't ask for it.</p>
<p>The only two exceptions where an RFI may still be issued:</p>
<ul>
<li><strong>Unreadable or mismatched documents</strong> — when a submitted document cannot be processed by our KYC software (e.g., blurry scans, corrupted files) or when the document doesn't match the data provided (e.g., a proof of address missing the customer's name or showing a different address)</li>
<li><strong>Nested payment scenarios</strong> — when we identify that the company being onboarded operates a nested payment structure</li>
</ul>
<hr />
<h2><code>website</code> Field Required for Business Customers</h2>
<p><strong>Effective May 2, 2026</strong>, the <code>website</code> field will be <strong>required</strong> when creating a Business customer. Requests without it will be rejected.</p>
<p><strong>Action required:</strong> Update your integration to include the <code>website</code> field before May 2 to avoid failed requests.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[New Billing System]]></title>
            <link>https://blindpay.com/changelog/2026-03-06-new-billing-system</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-03-06-new-billing-system</guid>
            <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We've rebuilt BlindPay's billing infrastructure from the ground up with monthly invoicing, transparent fee breakdowns, partner fee monthly settlements, multiple payment methods, and a new billing screen.]]></description>
            <content:encoded><![CDATA[<p>We've rebuilt BlindPay's billing infrastructure from the ground up. The new system replaces per-transaction partner fee settlements with a consolidated monthly billing model, introduces a transparent fee breakdown on every invoice, and gives you a new billing screen to manage invoices, payments, and partner fee claims, all in one place.</p>
<h2>TL;DR</h2>
<ul>
<li>Monthly invoicing with automated generation on the 1st of each month</li>
<li>Transparent fee breakdown on every invoice</li>
<li>Partner fees moved from per-transaction to monthly settlement</li>
<li>Pay invoices via Stripe (card or US bank account) or stablecoins (USDT on Tron, USDC on Solana)</li>
<li>New billing screen with real-time usage tracking</li>
<li>Automated email notifications and overdue management</li>
<li>Plan upgrade is one click and one call away, see <a href="https://blindpay.com/pricing">blindpay.com/pricing</a></li>
<li>Addons support for custom recurring charges (e.g., SWIFT access)</li>
</ul>
<hr />
<h2>Monthly Invoicing</h2>
<p>Invoices are now generated automatically on the 1st of each month, covering the previous calendar month. Each invoice consolidates all your charges and partner fee earnings into a single document, giving you a clear picture of what you owe or what you've earned.</p>
<p><strong>How it works:</strong></p>
<ul>
<li>Invoices are generated on the 1st of every month</li>
<li>Each invoice covers a full calendar month (e.g., Feb 1 – Feb 28)</li>
</ul>
<p><strong>Invoices can have the following statuses:</strong></p>
<ul>
<li><strong>Owing</strong> — Invoice is unpaid, waiting for payment</li>
<li><strong>Paid</strong> — Payment has been received</li>
<li><strong>Claimable</strong> — You have partner fees to claim</li>
<li><strong>Collected</strong> — Partner fees have been sent to your wallet</li>
<li><strong>Overdue</strong> — Invoice is past the due date</li>
</ul>
<hr />
<h2>Transparent Fee Breakdown</h2>
<p>Every invoice now shows an itemized breakdown of your charges, so you always know exactly what you're being billed for.</p>
<p><strong>Invoices include the following line items:</strong></p>
<ul>
<li><strong>Subscription plan amount</strong> — Your monthly plan fee (Basic, Business, or Enterprise)</li>
<li><strong>Virtual account fees</strong> — Charged per active KYC-approved virtual account</li>
<li><strong>Payin billing fees</strong> — Transaction fees collected on inbound payments</li>
<li><strong>Payout billing fees</strong> — Transaction fees on outbound payments</li>
<li><strong>Partner fee earnings</strong> — Your share of transaction fees, shown as a credit that offsets your charges</li>
<li><strong>Addons</strong> — Recurring charges like SWIFT access, etc.</li>
</ul>
<p><strong>Invoice calculation:</strong></p>
<p>Your net amount is calculated as total charges minus partner fee earnings. If a minimum monthly amount applies to your plan, the minimum is used when your net is below it. If your partner fee earnings exceed your charges, the excess is claimable — you get paid instead.</p>
<hr />
<h2>Partner Fees — Monthly Settlement</h2>
<p>Partner fees have transitioned from per-transaction settlements to a monthly settlement model. Instead of receiving a blockchain transfer after every transaction, your partner fee earnings are now accumulated throughout the month and settled on the invoice.</p>
<p><strong>What changed:</strong></p>
<ul>
<li>Partner fees are calculated per transaction and tracked in each quote (payin and payout)</li>
<li>At the end of the month, all partner fees are totaled and applied as a credit on your invoice</li>
<li>If your partner fee earnings exceed your charges, the remaining balance is claimable directly to your wallet</li>
</ul>
<p><strong>How to claim partner fees:</strong></p>
<ol>
<li>Open the invoice in the billing screen</li>
<li>If the invoice status is <strong>Claimable</strong>, click <strong>Collect</strong></li>
<li>Enter your wallet address (EVM-compatible, e.g., Polygon)</li>
<li>BlindPay sends USDT to your wallet, typically arrives within a few minutes</li>
</ol>
<hr />
<h2>Multiple Payment Methods</h2>
<p>You can pay invoices via Stripe (credit card or US bank account) or directly with stablecoins on the blockchain.</p>
<p><strong>Stripe payments:</strong></p>
<ul>
<li>Add a credit card or US bank account via the Stripe Customer Portal</li>
<li>Invoices can be paid directly through the Stripe-hosted invoice page</li>
<li>Manage your payment methods at any time from the billing screen</li>
</ul>
<p><strong>Blockchain payments (USDT on Tron, USDC on Solana):</strong></p>
<ol>
<li>Open an invoice and click <strong>Pay</strong>, then select <strong>Blockchain</strong></li>
<li>A dedicated wallet address is displayed along with the exact amount to send</li>
<li>Send the exact amount of stablecoins to the wallet address</li>
<li>Payment is detected automatically and the invoice status updates within minutes</li>
</ol>
<hr />
<h2>Billing Screen</h2>
<p>A completely new billing screen is available under <strong>Settings &gt; Billing</strong> in the BlindPay app.</p>
<p><strong>What you'll find:</strong></p>
<ul>
<li><strong>Subscription card</strong> — Your current plan, status, and subscription start date</li>
<li><strong>Current usage</strong> — Real-time view of your charges for the current billing period, including virtual account count, payin/payout fees, partner fee earnings, and addons</li>
<li><strong>Invoice history</strong> — All past invoices with status, amounts, and links to the Stripe-hosted invoice</li>
<li><strong>Invoice detail view</strong> — Click any invoice to see the full breakdown: fees, partner fee earnings, addons, discounts, and credit notes</li>
<li><strong>Fees table</strong> — Expandable table showing your payin and payout fee rates per payment method (ACH, Wire, Pix, SWIFT, etc.) and per blockchain network (Tron, Ethereum, Polygon, etc.)</li>
<li><strong>Payment method</strong> — View your saved payment method and open the Stripe Customer Portal to update it</li>
<li><strong>Billing details</strong> — Manage your billing contact information (name, email, tax ID, and address). All billing-related communications are sent to the billing email set here; if none is configured, the instance owner's email is used as fallback.</li>
</ul>
<hr />
<h2>Automated Notifications and Overdue Management</h2>
<p>You'll receive email notifications throughout the invoice lifecycle to help you stay on top of payments.</p>
<p><strong>Notification schedule:</strong></p>
<ul>
<li><strong>Invoice created</strong> — &quot;Your Invoice is Ready&quot; email with amount, due date, and a link to view and pay the invoice</li>
<li><strong>7 days before due</strong> — Upcoming invoice reminder</li>
<li><strong>2 days before due</strong> — Payment reminder</li>
<li><strong>Due date</strong> — Due today notice</li>
<li><strong>1 business day overdue</strong> — Past due alert</li>
<li><strong>4+ business days overdue</strong> — Overdue action required</li>
</ul>
<p><strong>Overdue blocking:</strong></p>
<p>If an invoice remains unpaid for more than 4 business days past the due date, the instance is automatically blocked. Blocked instances cannot process new transactions. An instance is unblocked only when no invoice is overdue for more than 4 business days. After paying the overdue invoice, the instance is unblocked automatically.</p>
<hr />
<h2>Migration Notes</h2>
<ul>
<li><strong>Partner fee settlement model changed</strong>: Partner fees are no longer sent per transaction. All partner fee earnings are accumulated and settled monthly via the invoice.</li>
<li><strong>Fee structure updated</strong>: Fees are now structured per payment method and per blockchain network.</li>
<li><strong>Stripe and blockchain payments</strong>: Each instance is linked to a Stripe customer. Invoices are created in Stripe with itemized line items and can be paid through Stripe or via blockchain with stablecoins.</li>
</ul>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Alves</dc:creator>
            <dc:creator>Eric Viana</dc:creator>
        </item>
        <item>
            <title><![CDATA[New Banking Partner for Virtual Accounts, Billing Revamp, and BlindPay Skills]]></title>
            <link>https://blindpay.com/changelog/2026-02-26-virtual-accounts-billing-blindpay-skills</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-02-26-virtual-accounts-billing-blindpay-skills</guid>
            <pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Virtual accounts with full ACH, Wire, and SWIFT support via a new banking partner, a rebuilt billing and partner fees system with monthly settlements, and AI-powered BlindPay Skills for instant API integration.]]></description>
            <content:encoded><![CDATA[<p>February closes with a new banking partner for virtual accounts, a rebuilt billing system, and AI skills that let your coding assistant handle BlindPay integrations.</p>
<h2>TL;DR</h2>
<ul>
<li>New banking partner for virtual accounts (beta)</li>
<li>Billing and partner fees revamped</li>
<li>BlindPay Skills</li>
</ul>
<h2>New Banking Partner for Virtual Accounts</h2>
<p>Issue virtual accounts for your customers with full support for <strong>ACH, Wire, and SWIFT</strong>. All transactions, inbound and outbound, are named, and a <strong>UETR</strong> is provided for external tracking. Sender data is also collected on payins, giving you full visibility into who's sending funds to each virtual account.</p>
<p>This integration requires a few additional fields. <a href="https://blindpay.com/docs/virtual-accounts">Explore documentation</a></p>
<h2>Billing and Partner Fees Revamped</h2>
<p>The billing system has been rebuilt from the ground up. You can now see exactly what BlindPay charges per payment method and blockchain in one place.</p>
<p>Partner fees have moved from <strong>per-transaction</strong> to a <strong>monthly settlement model</strong>. All fees are consolidated and collectible at the end of each month from the new billing page. <a href="https://blindpay.com/docs/learn/partner-fees">Review partner fees</a></p>
<h2>BlindPay Skills</h2>
<p>Give your AI coding assistant — <strong>Cursor, Claude Code, Codex</strong>, and others — instant knowledge of BlindPay's API and payment infrastructure. Install once, and your AI handles the integration.</p>
<p><a href="https://github.com/blindpaylabs/skills">Learn more about BlindPay Skills</a></p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
            <dc:creator>Alves</dc:creator>
            <dc:creator>André Mayer</dc:creator>
            <dc:creator>Eric Viana</dc:creator>
        </item>
        <item>
            <title><![CDATA[ACH and RTP Payouts in the US — New Banking Partner]]></title>
            <link>https://blindpay.com/changelog/2026-02-18-ach-rtp-us-launch-and-bank-account-rules</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-02-18-ach-rtp-us-launch-and-bank-account-rules</guid>
            <pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Launch of ACH and RTP payouts in the US with a new banking partner (no Virtual Accounts needed).]]></description>
            <content:encoded><![CDATA[<p>We're launching <strong>ACH and RTP payouts in the US</strong> with a new banking partner — no Virtual Accounts needed.</p>
<p>All ACH and RTP bank accounts have been deprecated. New fields and rules apply to bank account creation for both ACH and RTP.</p>
<h2>TL;DR</h2>
<ul>
<li>ACH and RTP payouts now available in the US with a new banking partner (no Virtual Accounts)</li>
<li>All existing ACH and RTP bank accounts are deprecated — new accounts must be created with the new rules</li>
<li>Business customers require <code>business_industry</code> (NAICS code)</li>
<li>Individual customers require local <code>tax_id</code> (e.g. CPF for Brazil, SSN for US)</li>
<li>ACH and RTP payouts are capped at <strong>$50K</strong> for now</li>
<li>All USD payouts will go to <strong>compliance_reviewing</strong> for manual review during the first few days</li>
</ul>
<h2>Rules you need to know</h2>
<h3>Customer-level rules</h3>
<ul>
<li><strong>Business customers:</strong> You must add <code>business_industry</code> (NAICS code) when the customer is a business.</li>
<li><strong>Individual customers:</strong> You must set <code>tax_id</code> to the <strong>local</strong> tax ID for the beneficiary's country (e.g. CPF for Brazil, SSN for the US). The system validates and formats it per country where required.</li>
</ul>
<h3>Payout limits and status</h3>
<ul>
<li>All ACH and RTP payouts are <strong>capped at $50K</strong> for now.</li>
<li>All USD payouts will be pushed to <strong>compliance_reviewing</strong> status so our team can manually review them for the first few days.</li>
</ul>
<h2>Bank account creation — New fields and rules</h2>
<p>These rules apply to <strong>both ACH and RTP</strong> bank account creation.</p>
<h3>Business accounts</h3>
<ul>
<li><code>business_industry</code> (NAICS code) is <strong>required</strong> when the customer or account class is <code>&quot;business&quot;</code>.</li>
</ul>
<h3>Individual customers</h3>
<ul>
<li><code>tax_id</code> must be the <strong>local tax ID</strong> for the beneficiary’s country (e.g. CPF for Brazil, SSN for the US). The system validates and formats it per country where required.</li>
</ul>
<h3>Phone number</h3>
<ul>
<li><code>phone_number</code> is <strong>required</strong> when the beneficiary’s country is one of: <strong>BR, CN, CO, HK, MY, MX, PH, UG, UY</strong>.</li>
</ul>
<h3>Tax ID</h3>
<ul>
<li><code>tax_id</code> is <strong>required</strong> when the beneficiary’s country is one of: <strong>AR, BY, BR, CL, CN, CO, CR, EC, GT, HN, JP, KZ, KR, MX, PK, PE, PH, RU, TH, UY</strong>.</li>
</ul>
<h2>What this means for you</h2>
<p><strong>Action required:</strong> Recreate any ACH or RTP bank accounts with the new required fields and rules. Do not use deprecated ACH or RTP bank accounts.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
            <dc:creator>Eric Viana</dc:creator>
            <dc:creator>André Mayer</dc:creator>
            <dc:creator>Alves</dc:creator>
        </item>
        <item>
            <title><![CDATA[SWIFT Payout Document Verification]]></title>
            <link>https://blindpay.com/changelog/2026-02-04-swift-requirements</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-02-04-swift-requirements</guid>
            <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[New compliance requirement for international SWIFT payouts. All SWIFT payouts now require document upload and compliance review before processing.]]></description>
            <content:encoded><![CDATA[<p>All international SWIFT payouts now require compliance document submission
before funds are processed. Payouts remain on hold until documents are
submitted and approved by our compliance team.</p>
<p>For technical details, check <a href="https://blindpay.com/docs/kb/swift-statuses">our documentation</a> and <a href="https://api.blindpay.com/reference#tag/payouts/POST/v1/instances/%7Binstance_id%7D/payouts/%7Bid%7D/documents">Api reference</a>{target=&quot;_blank&quot;}.</p>
<h2>TL;DR</h2>
<ul>
<li>SWIFT payouts now require document upload before processing</li>
<li>Payouts remain on hold while documents are reviewed</li>
<li>Documents can be resubmitted if rejected</li>
</ul>
<h2>Why are we making these changes?</h2>
<p>International transfers via SWIFT require additional compliance
documentation to meet regulatory requirements. This verification process
ensures all cross-border payments are properly documented and compliant with
international banking standards.</p>
<h2>New payout flow for SWIFT</h2>
<p>When you create a SWIFT payout, the flow is now:</p>
<ol>
<li><strong>Payout created</strong> → On hold while documentation is not provided or under review</li>
<li><strong>Documents submitted</strong> → Compliance review begins</li>
<li><strong>Compliance approved</strong> → Payout proceeds normally</li>
<li><strong>Compliance rejected</strong> → Submit updated documents and review restarts</li>
</ol>
<p>Compliance review timing varies based on region and case complexity. Payouts remain on hold pending approval, with an 8-hour SLA for document review.</p>]]></content:encoded>
            <category>Compliance</category>
            <dc:creator>Eric Viana</dc:creator>
        </item>
        <item>
            <title><![CDATA[US Bank Account Breaking Changes]]></title>
            <link>https://blindpay.com/changelog/2026-01-26-us-bank-account-breaking-changes</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-01-26-us-bank-account-breaking-changes</guid>
            <pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[New compliance updates including new mandatory fields for ACH, Wire/RTP, and SWIFT bank accounts. All US bank accounts created before January 26th, 2026 must be recreated with the new required fields.]]></description>
            <content:encoded><![CDATA[<p><strong>All US bank accounts created until January 26th, 2026 have been deprecated and will be deleted soon. Please DO NOT use the offramp wallets related to deprecated US bank accounts. All transactions will get stuck and will need to be refunded.</strong></p>
<h2>TL;DR</h2>
<ul>
<li>New mandatory fields for ACH bank accounts</li>
<li>New mandatory fields for Wire/RTP bank accounts</li>
<li>New mandatory fields for SWIFT bank accounts</li>
<li>All deprecated US bank accounts must be recreated</li>
</ul>
<h2>Why are we making these changes?</h2>
<p>We are getting compliant with the new US banking partners we're adding to the BlindPay ecosystem. These changes will ensure that all transactions are processed correctly, with BlindPay or the virtual account holder as the debitor and the recipient as the creditor.</p>
<h2>New mandatory fields for ACH bank accounts</h2>
<p>When creating an ACH bank account, the following fields are now mandatory:</p>
<ul>
<li><code>recipient_relationship</code></li>
<li><code>address_line_1</code></li>
<li><code>address_line_2</code> (optional)</li>
<li><code>city</code></li>
<li><code>state_province_region</code></li>
<li><code>country</code></li>
<li><code>postal_code</code></li>
</ul>
<h2>New mandatory fields for Wire/RTP bank accounts</h2>
<p>When creating a Wire or RTP bank account, the following fields are now mandatory:</p>
<ul>
<li><code>account_class</code></li>
<li><code>recipient_relationship</code></li>
</ul>
<h2>New fields for SWIFT bank accounts</h2>
<p>When creating a SWIFT bank account, the following fields have been added:</p>
<ul>
<li><code>account_class</code> (mandatory)</li>
<li><code>recipient_relationship</code> (mandatory)</li>
<li><code>swift_payment_code</code> (required only for: PK, PH, KE, JP, IN, ID, CN, CH, BH)</li>
</ul>
<h2>How to get the new field requirements</h2>
<p>All new fields and their validation rules can be requested on the <a href="https://api.blindpay.com/reference#tag/available/GET/v1/available/bank-details">available bank details endpoint</a>.</p>
<h2>What this means for you</h2>
<p><strong>Action required:</strong> You will need to recreate all US bank accounts (ACH, Wire, RTP, and SWIFT) with the new mandatory fields.</p>
<p><strong>Benefits:</strong> All transactions will be sent correctly, with BlindPay or the virtual account holder as the debitor and the recipient as the creditor. This ensures compliance with US banking regulations and improves transaction reliability.</p>]]></content:encoded>
            <category>Compliance</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
            <dc:creator>André Mayer</dc:creator>
        </item>
        <item>
            <title><![CDATA[BlindPay MCP Launch, UETR Tracking, and Infrastructure Upgrade]]></title>
            <link>https://blindpay.com/changelog/2026-01-21-mcp-launch-uetr-infrastructure-upgrade</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2026-01-21-mcp-launch-uetr-infrastructure-upgrade</guid>
            <pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Major product updates including Model Context Protocol integration, enhanced payout tracking with UETR, ACH Trace ID, and Wire IMAD, plus infrastructure migration to AWS with improved security and performance.]]></description>
            <content:encoded><![CDATA[<p>We're excited to announce major product updates including Model Context Protocol integration for AI-powered workflows, enhanced payout tracking capabilities, and significant infrastructure improvements for better performance and security.</p>
<h2>TL;DR</h2>
<ul>
<li>BlindPay MCP Launch</li>
<li>Infrastructure Upgrade and Security</li>
<li>UETR, ACH Trace ID and Wire IMAD</li>
</ul>
<h2>BlindPay MCP Launch</h2>
<p>Now you can ask Cursor or Claude Code to collect data from customers, bank accounts, pay-ins, and payouts. You can also build reports or initiate payments as needed. <a href="https://blindpay.com/blog/mcp">Integrate with our MCP now.</a></p>
<h2>UETR, ACH Trace ID, and Wire IMAD</h2>
<p>New fields have been added to the payout API. Every day, we will now update <code>jpm_track_data</code> to show all information for SWIFT UETR, ACH Trace ID, and Wire IMAD. <a href="https://api.blindpay.com/reference#tag/payouts">Check our documentation.</a></p>
<h2>Infrastructure Upgrade and Security</h2>
<p>We migrated all our infrastructure to AWS and we're targeting SOC 2 by Q1 2026. This means the response time from all our services is faster and more secure.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>André Mayer</dc:creator>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Onramp in Argentina & Colombia, Multiple Virtual Accounts, and Full Solana Support]]></title>
            <link>https://blindpay.com/changelog/2025-12-23-onramp-argentina-colombia-multiple-virtual-accounts-solana</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-12-23-onramp-argentina-colombia-multiple-virtual-accounts-solana</guid>
            <pubDate>Tue, 23 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Major product updates including onramp support for Argentina and Colombia, multiple virtual accounts per customer, full Solana deployment, and a new upload endpoint for enhanced privacy and compliance.]]></description>
            <content:encoded><![CDATA[<p>We're excited to announce major product updates including expanded geographic coverage, enhanced virtual account capabilities, full Solana deployment, and improved privacy features.</p>
<h2>TL;DR</h2>
<ul>
<li>Onramp in Argentina and Colombia</li>
<li>Multiple Virtual Accounts</li>
<li>Solana is Fully Deployed</li>
<li>New Upload Endpoint</li>
</ul>
<h2>Onramp in Argentina and Colombia</h2>
<p>Now you can collect payments in Argentina and Colombia, both in real time. BlindPay is adding two new rails: Transfers 3.0 for Argentina and PSE Colombia, enabling your customers to fund their accounts instantly using local payment methods. <a href="https://blindpay.com/docs/payin-quotes?flavor=advanced#create-a-payin-quote">Integrate it now.</a></p>
<h2>Multiple Virtual Accounts</h2>
<p>You can now issue multiple virtual accounts for every customer, allowing you to separate funds by purpose and better organize your payment flows. <a href="https://blindpay.com/docs/virtual-accounts-create">See the documentation.</a></p>
<h2>Solana is Fully Deployed</h2>
<p>All BlindPay features are now live on Solana, including payins, payouts, and virtual accounts. This means you can leverage Solana's fast transaction speeds and low fees across our entire product suite, giving you another powerful blockchain option alongside our existing networks. <a href="https://blindpay.com/docs/payout-solana">Learn more.</a></p>
<h2>New Upload Endpoint</h2>
<p>The new endpoint allows you to handle user privacy and data protection in the best way possible: simply upload the required documents, receive a secure URL, and use it to complete the verification process. This streamlines your compliance workflow while maintaining the highest privacy standards. <a href="https://blindpay.com/docs/learn/upload">Start integration.</a></p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
            <dc:creator>Eric Viana</dc:creator>
            <dc:creator>André Mayer</dc:creator>
        </item>
        <item>
            <title><![CDATA[BlindPay Compliance Updates - December]]></title>
            <link>https://blindpay.com/changelog/2025-12-09-compliance-updates-for-poa</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-12-09-compliance-updates-for-poa</guid>
            <pubDate>Tue, 09 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Important compliance updates including mandatory PoA documents for UBOs and new updates to Business PoA documents, effective January 8th, 2026.]]></description>
            <content:encoded><![CDATA[<p><strong>All these updates will take effect on January 8th, 2026.</strong></p>
<p>Important compliance changes are coming to BlindPay's onboarding process to ensure continued regulatory compliance.</p>
<h2>TL;DR</h2>
<ul>
<li>PoA documents for UBOs are now mandatory</li>
<li>New updates to Business PoA documents</li>
</ul>
<h2>PoA documents for UBOs are now mandatory</h2>
<p>Starting January 8th, 2026, it will be mandatory for all Ultimate Beneficial Owners (UBOs) to submit a valid proof of address document as part of the onboarding process. For comprehensive guidance on accepted documents and submission procedures, please refer to the <a href="https://api.blindpay.com/reference#tag/customers/POST/v1/instances/%7Binstance_id%7D/customers.body.owners">documentation here</a>.</p>
<h2>New updates to Business PoA documents</h2>
<p>If you are onboarding a contractor or freelancer company in Brazil (with a single UBO), and the company's registered address is that of the accountant, we will accept a document co-signed by both the accountant and the UBO. This document should clearly explain their relationship and the reason for using the accountant's address as the company's official registration.</p>]]></content:encoded>
            <category>Compliance</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[New Website, Solana Offramp, and Swift SDK]]></title>
            <link>https://blindpay.com/changelog/2025-11-21-new-website-solana-offramp-and-swift-sdk</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-11-21-new-website-solana-offramp-and-swift-sdk</guid>
            <pubDate>Fri, 21 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Major platform improvements including a completely refreshed website, Solana offramp wallet support, and a new Swift SDK for Apple developers.]]></description>
            <content:encoded><![CDATA[<p>We're excited to announce major platform improvements including a refreshed website, expanded blockchain support, and new developer tools.</p>
<h2>TL;DR</h2>
<ul>
<li>New Website</li>
<li>Solana offramp wallets is now live</li>
<li>New Swift SDK</li>
</ul>
<h2>New Website</h2>
<p>Our belief is simple: great developer experience and stablecoin abstraction will be the competitive advantage in the stablecoin space. We've completely refreshed our website to reflect this vision. <a href="https://blindpay.com/">Check it out here.</a></p>
<h2>Solana Offramp Wallet</h2>
<p>You can now generate a Solana wallet that automatically offramps all USDC transactions. Full Solana support across the BlindPay ecosystem is coming soon. <a href="https://blindpay.com/docs/offramp-wallets">View documentation.</a></p>
<h2>Swift SDK</h2>
<p>Apple developers can now integrate BlindPay with just a few lines of code. <a href="https://github.com/blindpaylabs/blindpay-swift">See GitHub docs.</a></p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Eric Viana</dc:creator>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[New SDKS, Solana and ETH Main Net Support]]></title>
            <link>https://blindpay.com/changelog/2025-10-20-new-sdks-solana-and-eth-main-net-support</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-10-20-new-sdks-solana-and-eth-main-net-support</guid>
            <pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Accelerate your integration with our new Node.js, Python, and Go SDKs while expanding your blockchain capabilities with Ethereum Mainnet and Solana Devnet support. Plus, manage your customer limits more efficiently with our new self-service request system that delivers compliance reviews within 24 hours, eliminating the need for email communications.]]></description>
            <content:encoded><![CDATA[<p>We're excited to announce the release of new SDKS, Solana and ETH Main Net Support.</p>
<h2>TL;DR</h2>
<ul>
<li>Ethereum Mainnet and Solana Devnet Support</li>
<li>Self-Service Customer Limit Increases</li>
<li>New SDKs: Node, Python, and Go</li>
</ul>
<h2>Ethereum Mainnet and Solana Devnet Support</h2>
<p>You can now send and collect USDC or USDT on Ethereum Mainnet.
Ethereum integration works the same way as other EVM chains you're
already familiar with.</p>
<p>Solana Devnet is now available on Development Instances using USDB.
Check out our Solana documentation for implementation details.</p>
<h2>Self-Service Customer Limit Increases</h2>
<p>Request limit increases directly through the dashboard or API—no more
emails to our compliance team.</p>
<p>Submit your request with supporting documents via the dashboard or
API, and our compliance team will review it within 24 hours. You'll receive
webhook notifications for every status change and can track the full
history of your requests. Check our API reference.</p>
<h2>Node, Python and Go SDKs</h2>
<p>We're committed to delivering the best developer experience in the
industry. Our new Node SDK , Python SDK , and Go SDK make
integration faster and easier than ever.
We're also updating our website with more detailed guides and examples
to help you get the most out of our APIs.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Urgent Compliance Updates]]></title>
            <link>https://blindpay.com/changelog/2025-10-06-urgent-compliance-updates</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-10-06-urgent-compliance-updates</guid>
            <pubDate>Mon, 06 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Critical compliance changes requiring immediate action including mandatory terms of service acceptance for all customers, enhanced KYC requirements with selfie verification, and updated country restrictions for high-risk jurisdictions.]]></description>
            <content:encoded><![CDATA[<p>These compliance updates take effect on <strong>October 15, 2025</strong> and require action across your customer onboarding and terms of service flows.</p>
<h2>TL;DR</h2>
<ul>
<li>New terms of service available (breaking changes)</li>
<li>Customer creation updates (breaking changes)</li>
</ul>
<h2>New terms of service version available</h2>
<p>All your customers will be required to accept the new version of our terms of service. This is necessary to allow BlindPay to issue virtual accounts, create wallets and process payments on behalf of them.</p>
<p>Every time you try to create a quote, an error message <code>please_accept_terms_of_service</code> will show up. When you see that, you should pop up the terms of service link and make your customer accept. Consult the <a href="https://blindpay.com/docs/learn/terms-of-service#accepting-a-new-version">terms of service guide</a> for integration details.</p>
<p>You will also receive updated <code>tos.accept</code> webhook events—review the <a href="https://blindpay.com/docs/learn/webhooks">webhook documentation</a> to handle them correctly.</p>
<h2>Customer creation updates</h2>
<p>The following fields are now updated:</p>
<ul>
<li>The fields <code>phone_number</code> and <code>selfie_file</code> are now mandatory for individuals. This is necessary because our US banking partner will require them in the future, so we're already anticipating this.</li>
<li>The field <code>individual_holding_doc_front_file</code> is deprecated for enhanced KYC because of the addition of <code>selfie_file</code>.</li>
<li>The field <code>website</code> is now mandatory for businesses.</li>
<li>The <a href="https://blindpay.com/docs/kb/supported-countries">prohibited and high-risk countries list</a> was updated. All customers from high-risk countries must go through enhanced KYC verification.</li>
<li>We're adding new fraud checks when analyzing customer data. If the KYC is rejected, you'll see details in <code>fraud_warnings</code>.</li>
</ul>
<p>Update your onboarding forms and validation logic ahead of the deadline to avoid interruptions.</p>]]></content:encoded>
            <category>Compliance</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Real-Time Payments and Tron Network Integration]]></title>
            <link>https://blindpay.com/changelog/2025-08-24-rtp-offramp-tron</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-08-24-rtp-offramp-tron</guid>
            <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Major platform expansion with real-time payments across 4,000+ US banks via RTP, dedicated offramp wallets for automatic stablecoin conversion, Tron network integration for USDT, enhanced KYT engine with on-hold transaction review, and updated virtual account country requirements.]]></description>
            <content:encoded><![CDATA[<p>August expands real-time settlement options, adds new blockchain coverage, and tightens compliance for virtual accounts.</p>
<h2>TL;DR</h2>
<ul>
<li>RTP is now live</li>
<li>Offramp wallets</li>
<li>Tron network</li>
<li>On hold transactions</li>
<li>Virtual accounts countries update (breaking changes)</li>
</ul>
<h2>Real-time payments in the US</h2>
<p>Now you have access to RTP in the US and can send or collect payments from over 4,000 banks. You don't need to wait for ACH or wire settlement times anymore—just submit an RTP payout and watch it settle in real time. Learn how to configure the rail in the <a href="https://blindpay.com/docs/payouts?flavor=advanced#execute-a-payout">payout guide</a>.</p>
<h2>Offramp wallets</h2>
<p>Generate a dedicated blockchain wallet that automatically converts supported stablecoins into fiat the moment funds arrive. This is perfect for moving assets directly from exchanges or enterprise custodians. Follow the <a href="https://blindpay.com/docs/offramp-wallets">offramp wallet tutorial</a> to begin.</p>
<h2>Tron network</h2>
<p>BlindPay now supports the Tron network for offramping USDT. Point your Tron wallets at BlindPay and we will handle the conversion to fiat. Right now this is only supported for offramp wallets. We would love feedback as we expand support to additional networks—<a href="mailto:hello@blindpay.com">drop us a note</a>.</p>
<h2>On hold transactions</h2>
<p>We improved our transaction monitoring solution to prevent fraudulent activities. Now you will see a new payin status <strong>On Hold</strong> for payments that our KYT software has flagged and our compliance team might request information for before releasing them. The <a href="https://blindpay.com/docs/kb/on-hold-transactions">on hold guide</a> explains how to respond quickly.</p>
<h2>Virtual accounts countries update (breaking changes)</h2>
<p>We added a list of high-risk countries where only customers with enhanced due diligence will be able to create a virtual account. Review the latest requirements in the <a href="https://blindpay.com/docs/kb/supported-countries">supported countries guide</a> before onboarding new customers.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[International SWIFT Generally Available]]></title>
            <link>https://blindpay.com/changelog/2025-07-21-international-swift-available</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-07-21-international-swift-available</guid>
            <pubDate>Mon, 21 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[International SWIFT payouts now generally available for collecting and sending payments across global banking corridors, enhanced data export functionality with new status and customer filters, and automated payout receipt generation for all completed transactions.]]></description>
            <content:encoded><![CDATA[<p>July marks the general availability of international SWIFT payouts alongside quality-of-life improvements for reporting and payout transparency.</p>
<h2>TL;DR</h2>
<ul>
<li>International SWIFT is available</li>
<li>Export data and filters improved</li>
<li>Payout receipts</li>
</ul>
<h2>International SWIFT</h2>
<p>You can now <strong>collect and send</strong> SWIFT payments using virtual accounts, unlocking instant access to global banking corridors.</p>
<p><strong>Important compliance reminder:</strong> All outgoing SWIFT transactions require supporting documentation for validation. This helps ensure secure, compliant transfers that meet international banking standards. Check the <a href="https://blindpay.com/docs/payouts?flavor=advanced#execute-a-payout">payout API reference</a> for details before submitting payouts.</p>
<h2>Export data and filters improved</h2>
<p>You can now export all your payouts and payins directly from the platform, making it easier to reconcile transactions across your data sources and streamline your financial reporting.</p>
<p>We've also enhanced our filtering capabilities with new status and <code>customer_id</code> filters available in both the API and dashboard for more precise transaction management. The <a href="https://blindpay.com/docs/payouts?flavor=advanced#execute-a-payout">payouts reference</a> outlines the latest query parameters.</p>
<h2>Payout receipts</h2>
<p>BlindPay now automatically generates a receipt document for every completed payout, providing you with professional documentation to share with recipient banks and ensure full transaction transparency.</p>
<p>To access your receipts, simply open the external tracking link from any completed payout and click <strong>Print receipt</strong> to download a PDF copy for your records.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
            <dc:creator>Eric Viana</dc:creator>
        </item>
        <item>
            <title><![CDATA[Team Collaboration and Automated Onramp]]></title>
            <link>https://blindpay.com/changelog/2025-06-12-role-based-access-control</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-06-12-role-based-access-control</guid>
            <pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Enterprise team collaboration features with granular role-based access control, automated onramp settlement that converts virtual account deposits directly to your preferred stablecoins, and early access to outbound SWIFT payouts powered by stablecoins for global transfers.]]></description>
            <content:encoded><![CDATA[<p>June’s release makes it easier to collaborate inside BlindPay, accelerate fiat-to-stablecoin conversions, and experiment with cross-border payouts via SWIFT.</p>
<h2>TL;DR</h2>
<ul>
<li>Role-based access control</li>
<li>Automated onramp</li>
<li>Sending international SWIFT (beta)</li>
</ul>
<h2>Role-based access control</h2>
<p>Collaborate with your team effortlessly! Invite teammates and assign granular permissions so each person has the exact access they need. Navigate to <strong>Settings → Team</strong> to add members, then select capabilities like customer creation, payment execution, or analytics-only visibility.</p>
<h2>Automated onramp</h2>
<p>When funds arrive in your virtual account, BlindPay automatically converts them into stablecoin and deposits directly to your chosen blockchain wallet. Choose to receive either USDC or USDT—it's completely automated. Review the configuration steps in the <a href="https://blindpay.com/docs/payins">payin guide</a> to get started.</p>
<h2>Sending international SWIFT (beta)</h2>
<p>Send payments globally with ease. With BlindPay's international SWIFT capabilities you'll be able to access the entire world with stablecoins. Want to unlock global payments? <a href="mailto:hello@blindpay.com">Contact sales</a> to enable international corridors on your instance.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Stellar Integration and SWIFT Collections]]></title>
            <link>https://blindpay.com/changelog/2025-05-09-stellar-integration</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-05-09-stellar-integration</guid>
            <pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Expanded blockchain coverage with full Stellar network support alongside existing EVM chains, comprehensive virtual accounts documentation including settlement flows and fee structures, and universal SWIFT transfer collection capabilities for all virtual account customers.]]></description>
            <content:encoded><![CDATA[<p>May focused on expanding blockchain coverage and documenting the virtual account experience while we turned on SWIFT collection for every customer with banking access.</p>
<h2>TL;DR</h2>
<ul>
<li>Stellar integration</li>
<li>Virtual accounts documentation</li>
<li>Support for SWIFT payments</li>
</ul>
<h2>Stellar integration</h2>
<p>BlindPay now supports Stellar alongside our existing EVM networks. We are joining the Stellar team in Toronto during <strong>Consensus 2025</strong> to help Stellar developers build on top of the BlindPay API. Planning to attend? <a href="mailto:hello@blindpay.com">Book time with our team</a> and we will sync on your roadmap.</p>
<h2>Virtual accounts documentation</h2>
<p>Virtual accounts are now fully documented. Visit the <a href="https://blindpay.com/docs/virtual-accounts">virtual accounts guide</a> to review settlement flows, fees, and API usage. Note the upcoming fee adjustments: ACH flat fees move to <strong>$0.40</strong> and wire flat fees move to <strong>$15.00</strong> while percentage-based fees remain unchanged.</p>
<h2>SWIFT payments</h2>
<p>Every customer with a virtual account can now collect international SWIFT transfers. We are building a way to send SWIFT payments worldwide using stablecoins. Have a use case already? <a href="mailto:hello@blindpay.com">Let us know</a> so we can include you in the beta.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Named Virtual Accounts and API Pagination]]></title>
            <link>https://blindpay.com/changelog/2025-04-10-us-named-accounts</link>
            <guid isPermaLink="false">https://blindpay.com/changelog/2025-04-10-us-named-accounts</guid>
            <pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Premium named virtual accounts powered by tier 1 banks displaying your client's business or individual name, mandatory terms of service acceptance workflow for all customers with compliance requirements, and cursor-based pagination across all core API endpoints with enhanced filtering capabilities.]]></description>
            <content:encoded><![CDATA[<p>BlindPay delivered the most-requested account features in April, including support for named virtual accounts, a revamped terms of service workflow, and cursor-based pagination across core endpoints.</p>
<h2>TL;DR</h2>
<ul>
<li>US named accounts</li>
<li>Terms of Service API (breaking changes)</li>
<li>Pagination (breaking changes)</li>
</ul>
<h2>Named Virtual Accounts powered by Tier 1 Bank in the US</h2>
<p>BlindPay can issue <strong>named</strong> virtual accounts backed by Tier 1 Bank in the US. This unlocks customer-facing account numbers that display your client's business or individual name instead of BlindPay. We are already onboarding beta testers—<a href="mailto:hello@blindpay.com">reach out to us</a> if you want early access or pricing details.</p>
<h2>Terms of Service API (breaking changes)</h2>
<p>For compliance reasons every customer must accept BlindPay’s terms of service before you can create payouts or payins on their behalf. Update your onboarding flow to capture the <code>tos_id</code> returned by the <a href="https://blindpay.com/docs/learn/terms-of-service">Terms of Service endpoint</a> and persist it when you create customers. All customers must complete this step by <strong>May 30</strong> to avoid disruptions.</p>
<h2>Pagination (breaking changes)</h2>
<p>The <code>/payins</code> and <code>/payouts</code> endpoints now support cursor pagination with the <code>limit</code>, <code>starting_after</code>, and <code>ending_before</code> parameters. The legacy pagination response will be deprecated on <strong>June 30</strong>. Review the new parameters in the <a href="https://blindpay.com/docs/payouts?flavor=advanced#execute-a-payout">API reference</a> and add the <code>customer_id</code> query filter where needed to segment results by customer.</p>
<p>We also added the first filter related to customers, so you can pass the <code>customer_id</code> on the query parameter as well.</p>]]></content:encoded>
            <category>Product Update</category>
            <dc:creator>Bernardo Simonassi</dc:creator>
        </item>
    </channel>
</rss>