"Receivers" renamed to "Customers"
We're renaming "Receivers" to "Customers" across the entire BlindPay platform: API endpoints, SDKs, documentation, and dashboard.
TL;DR
- All
/receiversendpoints now have/customersequivalents - Both
/receiversand/customerspaths work identically through July 3, 2026 - After that date,
/receiversendpoints return301 Moved Permanently - IDs stay the same (
re_prefix), no data migration needed - SDKs add a
customersaccessor to their current majors andreceiversis deprecated alongside, no import changes required
What changed
Every API endpoint that previously used /receivers in its path now has a /customers equivalent:
This applies to all sub-resources too: bank accounts, wallets, virtual accounts, blockchain wallets, offramp wallets, and limit increases.
Response changes
During the transition period, every customer record returned by either /customers or /receivers carries a customer_id alias of its primary key. The underlying ID still uses the re_ prefix and remains in the id field:
Payouts and payins that reference a customer expose both receiver_id and customer_id foreign-key fields during the transition; either accepts the same re_* value. Sub-resources scoped under /customers/{id}/… (bank accounts, wallets, virtual accounts, blockchain wallets, offramp wallets) derive the parent from the URL, so no FK alias appears in the response body.
After the sunset, the customer_id alias becomes the canonical field name across the API.
Webhook changes
Three new webhook events fire alongside the existing ones:
customer.new: fires wheneverreceiver.newfirescustomer.update: fires wheneverreceiver.updatefirescustomer.delete: fires wheneverreceiver.deletefires
You must subscribe to customer.* before July 3, 2026. After the sunset, receiver.* events stop firing entirely. If you don't migrate, your endpoint goes silent.
During the transition window (June 4 → July 3), every create and update emits both events: the legacy receiver.* and its customer.* 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 receiver.* subscription once customer.* is wired up.
SDK updates
| SDK | Now (transition) | At/after sunset |
|---|---|---|
| Node.js | Minor release adds customers, marks receivers @deprecated in JSDoc. | Next major (4.0.0) removes receivers. |
| Python | Minor release adds customers, marks receivers deprecated with warning. | Next major (2.0.0) removes receivers. |
| Go | Minor release adds customers package, // Deprecated: on receivers. | No v2 planned for this rename. receivers stays as a deprecated forwarder in v1. |
| PHP | Minor release adds customers, marks receivers @deprecated in PHPDoc. | Next major (2.0.0) removes receivers. |
| Swift | Minor release adds customers, @available(*, deprecated) on receivers. | Next major (2.0.0) removes receivers. |
No import path changes during the transition. Just update to the latest version of your current major and the customers accessor is there. For Node, Python, PHP, and Swift, a future major release (after sunset) removes the deprecated receivers surface; that's when imports change in those SDKs.
Go is treated differently. receivers stays as a thin deprecated forwarder in v1 indefinitely. gopls, staticcheck SA1019, and godoc will flag usage; nothing breaks.
Method signatures are unchanged. Only the resource accessor renames. For most projects this is a single find/replace. Example in Node.js SDK:
What you need to do
- Update your API calls to use
/customersinstead of/receivers - Update field references from
receiver_idtocustomer_idin your code - Update webhook subscriptions to use
customer.new,customer.update, andcustomer.delete - Update your SDK to the latest version of its current major. The
customersaccessor is added there, no import changes required
Timeline
- June 4, 2026:
/customersendpoints live. Both/receiversand/customersaccept requests. Receiver responses includeDeprecation: trueandSunset: Fri, 03 Jul 2026 00:00:00 GMTheaders, plus aLink: rel="successor-version"pointing to the customer equivalent. - July 3, 2026: Sunset date.
/receiversendpoints return301 Moved Permanentlyredirecting to/customers. SDK code callingreceivers.*continues to work via the redirect. - Later:
/receiversendpoints removed entirely. New SDK majors ship for Node (v4), Python (v2), PHP (v2), and Swift (v2), dropping the deprecatedreceiverssurface. The Go SDK keepsreceiversas a deprecated forwarder in v1; no v2 planned for this rename. Previous SDK majors enter maintenance mode (security fixes only).
Detect deprecation programmatically
Every /receivers response carries deprecation metadata you can monitor in tests or runtime logs:
Useful in CI: fail a smoke test if production traffic still hits Deprecation: true endpoints close to the sunset date.
Verification checklist
Before considering your migration complete:
- Logs show zero requests to
/v1/instances/*/receivers*paths from your services - CI / monitoring asserts no
Deprecation: trueheader on production responses - Webhook handlers process
customer.new,customer.update, andcustomer.delete - No code paths reference
response.receiver_id - SDK updated to the latest minor release of its current major
- Saved dashboard URLs use
/customers/
FAQ
What if I don't migrate before July 3, 2026?
/receivers paths return 301 Moved Permanently pointing to the equivalent /customers URL. Most HTTP clients (browsers, curl, requests, axios, 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.
Can I migrate one resource group at a time?
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.
Will I get duplicate webhook events during the transition?
Yes, every create and update emits both receiver.* and customer.* 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.
Do I need to migrate my stored IDs?
No. All IDs keep the re_ prefix. The same ID works with both /receivers and /customers endpoints. We are renaming the API surface, not the underlying resource.
How do I report issues with the migration?
Use the feedback button in the dashboard (under your profile dropdown) or email support@blindpay.com with migration in the subject. Including the request ID from a deprecated response (x-blindpay-request-id header) speeds up the lookup.