[{"data":1,"prerenderedAt":796},["ShallowReactive",2],{"content-\u002Fchangelog\u002F2026-06-04-customers-rename":3},{"id":4,"title":5,"author":6,"body":7,"categories":6,"category":780,"categoryType":781,"date":782,"description":783,"extension":784,"faq":6,"howto":6,"isBlog":785,"isChangelog":456,"meta":786,"navigation":456,"path":791,"rawbody":792,"seo":793,"stem":794,"thumbnail":6,"__hash__":795},"content\u002Fchangelog\u002F2026-06-04-customers-rename.md","\"Receivers\" renamed to \"Customers\"",null,{"type":8,"value":9,"toc":762},"minimark",[10,14,19,75,79,88,98,101,105,125,187,204,210,214,217,245,260,275,279,404,413,432,435,468,472,518,522,579,583,589,621,627,631,634,673,677,682,703,707,710,714,722,726,737,741,758],[11,12,13],"p",{},"We're renaming \"Receivers\" to \"Customers\" across the entire BlindPay platform: API endpoints, SDKs, documentation, and dashboard.",[15,16,18],"h2",{"id":17},"tldr","TL;DR",[20,21,22,35,48,57,64],"ul",{},[23,24,25,26,30,31,34],"li",{},"All ",[27,28,29],"code",{},"\u002Freceivers"," endpoints now have ",[27,32,33],{},"\u002Fcustomers"," equivalents",[23,36,37,38,40,41,43,44],{},"Both ",[27,39,29],{}," and ",[27,42,33],{}," paths work identically through ",[45,46,47],"strong",{},"July 3, 2026",[23,49,50,51,53,54],{},"After that date, ",[27,52,29],{}," endpoints return ",[27,55,56],{},"301 Moved Permanently",[23,58,59,60,63],{},"IDs stay the same (",[27,61,62],{},"re_"," prefix), no data migration needed",[23,65,66,67,70,71,74],{},"SDKs add a ",[27,68,69],{},"customers"," accessor to their current majors and ",[27,72,73],{},"receivers"," is deprecated alongside, no import changes required",[15,76,78],{"id":77},"what-changed","What changed",[11,80,81,82,84,85,87],{},"Every API endpoint that previously used ",[27,83,29],{}," in its path now has a ",[27,86,33],{}," equivalent:",[89,90,95],"pre",{"className":91,"code":93,"language":94},[92],"language-text","GET    \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers                →  GET    \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\nPOST   \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers                →  POST   \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\nGET    \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers\u002F{receiver_id}  →  GET    \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\u002F{customer_id}\nPUT    \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers\u002F{receiver_id}  →  PUT    \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\u002F{customer_id}\nDELETE \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers\u002F{receiver_id}  →  DELETE \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\u002F{customer_id}\n","text",[27,96,93],{"__ignoreMap":97},"",[11,99,100],{},"This applies to all sub-resources too: bank accounts, wallets, virtual accounts, blockchain wallets, offramp wallets, and limit increases.",[15,102,104],{"id":103},"response-changes","Response changes",[11,106,107,108,110,111,113,114,117,118,120,121,124],{},"During the transition period, every customer record returned by either ",[27,109,33],{}," or ",[27,112,29],{}," carries a ",[27,115,116],{},"customer_id"," alias of its primary key. The underlying ID still uses the ",[27,119,62],{}," prefix and remains in the ",[27,122,123],{},"id"," field:",[89,126,130],{"className":127,"code":128,"language":129,"meta":97,"style":97},"language-json shiki shiki-themes github-light","{\n  \"id\": \"re_abc123456789\",\n  \"customer_id\": \"re_abc123456789\",\n  \"first_name\": \"Alice\"\n}\n","json",[27,131,132,141,158,170,181],{"__ignoreMap":97},[133,134,137],"span",{"class":135,"line":136},"line",1,[133,138,140],{"class":139},"sgsFI","{\n",[133,142,144,148,151,155],{"class":135,"line":143},2,[133,145,147],{"class":146},"sYu0t","  \"id\"",[133,149,150],{"class":139},": ",[133,152,154],{"class":153},"sYBdl","\"re_abc123456789\"",[133,156,157],{"class":139},",\n",[133,159,161,164,166,168],{"class":135,"line":160},3,[133,162,163],{"class":146},"  \"customer_id\"",[133,165,150],{"class":139},[133,167,154],{"class":153},[133,169,157],{"class":139},[133,171,173,176,178],{"class":135,"line":172},4,[133,174,175],{"class":146},"  \"first_name\"",[133,177,150],{"class":139},[133,179,180],{"class":153},"\"Alice\"\n",[133,182,184],{"class":135,"line":183},5,[133,185,186],{"class":139},"}\n",[11,188,189,190,40,193,195,196,199,200,203],{},"Payouts and payins that reference a customer expose both ",[27,191,192],{},"receiver_id",[27,194,116],{}," foreign-key fields during the transition; either accepts the same ",[27,197,198],{},"re_*"," value. Sub-resources scoped under ",[27,201,202],{},"\u002Fcustomers\u002F{id}\u002F…"," (bank accounts, wallets, virtual accounts, blockchain wallets, offramp wallets) derive the parent from the URL, so no FK alias appears in the response body.",[11,205,206,207,209],{},"After the sunset, the ",[27,208,116],{}," alias becomes the canonical field name across the API.",[15,211,213],{"id":212},"webhook-changes","Webhook changes",[11,215,216],{},"Three new webhook events fire alongside the existing ones:",[20,218,219,229,237],{},[23,220,221,224,225,228],{},[27,222,223],{},"customer.new",": fires whenever ",[27,226,227],{},"receiver.new"," fires",[23,230,231,224,234,228],{},[27,232,233],{},"customer.update",[27,235,236],{},"receiver.update",[23,238,239,224,242,228],{},[27,240,241],{},"customer.delete",[27,243,244],{},"receiver.delete",[11,246,247,248,255,256,259],{},"You ",[45,249,250,251,254],{},"must subscribe to ",[27,252,253],{},"customer.*"," before July 3, 2026",". After the sunset, ",[27,257,258],{},"receiver.*"," events stop firing entirely. If you don't migrate, your endpoint goes silent.",[11,261,262,263,265,266,268,269,271,272,274],{},"During the transition window (June 4 → July 3), every create and update emits both events: the legacy ",[27,264,258],{}," and its ",[27,267,253],{}," 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 ",[27,270,258],{}," subscription once ",[27,273,253],{}," is wired up.",[15,276,278],{"id":277},"sdk-updates","SDK updates",[280,281,282,298],"table",{},[283,284,285],"thead",{},[286,287,288,292,295],"tr",{},[289,290,291],"th",{},"SDK",[289,293,294],{},"Now (transition)",[289,296,297],{},"At\u002Fafter sunset",[299,300,301,326,343,367,385],"tbody",{},[286,302,303,307,320],{},[304,305,306],"td",{},"Node.js",[304,308,309,310,312,313,315,316,319],{},"Minor release adds ",[27,311,69],{},", marks ",[27,314,73],{}," ",[27,317,318],{},"@deprecated"," in JSDoc.",[304,321,322,323,325],{},"Next major (4.0.0) removes ",[27,324,73],{},".",[286,327,328,331,338],{},[304,329,330],{},"Python",[304,332,309,333,312,335,337],{},[27,334,69],{},[27,336,73],{}," deprecated with warning.",[304,339,340,341,325],{},"Next major (2.0.0) removes ",[27,342,73],{},[286,344,345,348,359],{},[304,346,347],{},"Go",[304,349,309,350,352,353,356,357,325],{},[27,351,69],{}," package, ",[27,354,355],{},"\u002F\u002F Deprecated:"," on ",[27,358,73],{},[304,360,361,315,364,366],{},[45,362,363],{},"No v2 planned for this rename.",[27,365,73],{}," stays as a deprecated forwarder in v1.",[286,368,369,372,381],{},[304,370,371],{},"PHP",[304,373,309,374,312,376,315,378,380],{},[27,375,69],{},[27,377,73],{},[27,379,318],{}," in PHPDoc.",[304,382,340,383,325],{},[27,384,73],{},[286,386,387,390,400],{},[304,388,389],{},"Swift",[304,391,309,392,394,395,356,398,325],{},[27,393,69],{},", ",[27,396,397],{},"@available(*, deprecated)",[27,399,73],{},[304,401,340,402,325],{},[27,403,73],{},[11,405,406,407,409,410,412],{},"No import path changes during the transition. Just update to the latest version of your current major and the ",[27,408,69],{}," accessor is there. For Node, Python, PHP, and Swift, a future major release (after sunset) removes the deprecated ",[27,411,73],{}," surface; that's when imports change in those SDKs.",[11,414,415,315,418,420,421,394,424,427,428,431],{},[45,416,417],{},"Go is treated differently.",[27,419,73],{}," stays as a thin deprecated forwarder in v1 indefinitely. ",[27,422,423],{},"gopls",[27,425,426],{},"staticcheck SA1019",", and ",[27,429,430],{},"godoc"," will flag usage; nothing breaks.",[11,433,434],{},"Method signatures are unchanged. Only the resource accessor renames. For most projects this is a single find\u002Freplace. Example in Node.js SDK:",[89,436,440],{"className":437,"code":438,"language":439,"meta":97,"style":97},"language-diff shiki shiki-themes github-light","- await blindpay.receivers.list()\n+ await blindpay.customers.list()\n\n- await blindpay.receivers.bankAccounts.create({ ... })\n+ await blindpay.customers.bankAccounts.create({ ... })\n","diff",[27,441,442,447,452,458,463],{"__ignoreMap":97},[133,443,444],{"class":135,"line":136},[133,445,446],{},"- await blindpay.receivers.list()\n",[133,448,449],{"class":135,"line":143},[133,450,451],{},"+ await blindpay.customers.list()\n",[133,453,454],{"class":135,"line":160},[133,455,457],{"emptyLinePlaceholder":456},true,"\n",[133,459,460],{"class":135,"line":172},[133,461,462],{},"- await blindpay.receivers.bankAccounts.create({ ... })\n",[133,464,465],{"class":135,"line":183},[133,466,467],{},"+ await blindpay.customers.bankAccounts.create({ ... })\n",[15,469,471],{"id":470},"what-you-need-to-do","What you need to do",[473,474,475,486,498,509],"ol",{},[23,476,477,480,481,483,484],{},[45,478,479],{},"Update your API calls"," to use ",[27,482,33],{}," instead of ",[27,485,29],{},[23,487,488,491,492,494,495,497],{},[45,489,490],{},"Update field references"," from ",[27,493,192],{}," to ",[27,496,116],{}," in your code",[23,499,500,480,503,394,505,427,507],{},[45,501,502],{},"Update webhook subscriptions",[27,504,223],{},[27,506,233],{},[27,508,241],{},[23,510,511,514,515,517],{},[45,512,513],{},"Update your SDK"," to the latest version of its current major. The ",[27,516,69],{}," accessor is added there, no import changes required",[15,519,521],{"id":520},"timeline","Timeline",[20,523,524,548,565],{},[23,525,526,150,529,531,532,40,534,536,537,40,540,543,544,547],{},[45,527,528],{},"June 4, 2026",[27,530,33],{}," endpoints live. Both ",[27,533,29],{},[27,535,33],{}," accept requests. Receiver responses include ",[27,538,539],{},"Deprecation: true",[27,541,542],{},"Sunset: Fri, 03 Jul 2026 00:00:00 GMT"," headers, plus a ",[27,545,546],{},"Link: rel=\"successor-version\""," pointing to the customer equivalent.",[23,549,550,552,553,53,555,557,558,560,561,564],{},[45,551,47],{},": Sunset date. ",[27,554,29],{},[27,556,56],{}," redirecting to ",[27,559,33],{},". SDK code calling ",[27,562,563],{},"receivers.*"," continues to work via the redirect.",[23,566,567,150,570,572,573,575,576,578],{},[45,568,569],{},"Later",[27,571,29],{}," endpoints removed entirely. New SDK majors ship for Node (v4), Python (v2), PHP (v2), and Swift (v2), dropping the deprecated ",[27,574,73],{}," surface. The Go SDK keeps ",[27,577,73],{}," as a deprecated forwarder in v1; no v2 planned for this rename. Previous SDK majors enter maintenance mode (security fixes only).",[15,580,582],{"id":581},"detect-deprecation-programmatically","Detect deprecation programmatically",[11,584,585,586,588],{},"Every ",[27,587,29],{}," response carries deprecation metadata you can monitor in tests or runtime logs:",[89,590,594],{"className":591,"code":592,"language":593,"meta":97,"style":97},"language-http shiki shiki-themes github-light","HTTP\u002F1.1 200 OK\nDeprecation: true\nSunset: Fri, 03 Jul 2026 00:00:00 GMT\nLink: \u003C\u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers>; rel=\"successor-version\"\nContent-Type: application\u002Fjson\n","http",[27,595,596,601,606,611,616],{"__ignoreMap":97},[133,597,598],{"class":135,"line":136},[133,599,600],{},"HTTP\u002F1.1 200 OK\n",[133,602,603],{"class":135,"line":143},[133,604,605],{},"Deprecation: true\n",[133,607,608],{"class":135,"line":160},[133,609,610],{},"Sunset: Fri, 03 Jul 2026 00:00:00 GMT\n",[133,612,613],{"class":135,"line":172},[133,614,615],{},"Link: \u003C\u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers>; rel=\"successor-version\"\n",[133,617,618],{"class":135,"line":183},[133,619,620],{},"Content-Type: application\u002Fjson\n",[11,622,623,624,626],{},"Useful in CI: fail a smoke test if production traffic still hits ",[27,625,539],{}," endpoints close to the sunset date.",[15,628,630],{"id":629},"verification-checklist","Verification checklist",[11,632,633],{},"Before considering your migration complete:",[20,635,636,643,649,658,664,667],{},[23,637,638,639,642],{},"Logs show zero requests to ",[27,640,641],{},"\u002Fv1\u002Finstances\u002F*\u002Freceivers*"," paths from your services",[23,644,645,646,648],{},"CI \u002F monitoring asserts no ",[27,647,539],{}," header on production responses",[23,650,651,652,394,654,427,656],{},"Webhook handlers process ",[27,653,223],{},[27,655,233],{},[27,657,241],{},[23,659,660,661],{},"No code paths reference ",[27,662,663],{},"response.receiver_id",[23,665,666],{},"SDK updated to the latest minor release of its current major",[23,668,669,670],{},"Saved dashboard URLs use ",[27,671,672],{},"\u002Fcustomers\u002F",[15,674,676],{"id":675},"faq","FAQ",[678,679,681],"h3",{"id":680},"what-if-i-dont-migrate-before-july-3-2026","What if I don't migrate before July 3, 2026?",[11,683,684,686,687,689,690,692,693,394,696,394,699,702],{},[27,685,29],{}," paths return ",[27,688,56],{}," pointing to the equivalent ",[27,691,33],{}," URL. Most HTTP clients (browsers, ",[27,694,695],{},"curl",[27,697,698],{},"requests",[27,700,701],{},"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.",[678,704,706],{"id":705},"can-i-migrate-one-resource-group-at-a-time","Can I migrate one resource group at a time?",[11,708,709],{},"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.",[678,711,713],{"id":712},"will-i-get-duplicate-webhook-events-during-the-transition","Will I get duplicate webhook events during the transition?",[11,715,716,717,40,719,721],{},"Yes, every create and update emits both ",[27,718,258],{},[27,720,253],{}," 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.",[678,723,725],{"id":724},"do-i-need-to-migrate-my-stored-ids","Do I need to migrate my stored IDs?",[11,727,728,729,731,732,40,734,736],{},"No. All IDs keep the ",[27,730,62],{}," prefix. The same ID works with both ",[27,733,29],{},[27,735,33],{}," endpoints. We are renaming the API surface, not the underlying resource.",[678,738,740],{"id":739},"how-do-i-report-issues-with-the-migration","How do I report issues with the migration?",[11,742,743,744,749,750,753,754,757],{},"Use the feedback button in the dashboard (under your profile dropdown) or email ",[745,746,748],"a",{"href":747},"mailto:support@blindpay.com","support@blindpay.com"," with ",[27,751,752],{},"migration"," in the subject. Including the request ID from a deprecated response (",[27,755,756],{},"x-blindpay-request-id"," header) speeds up the lookup.",[759,760,761],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":97,"searchDepth":143,"depth":143,"links":763},[764,765,766,767,768,769,770,771,772,773],{"id":17,"depth":143,"text":18},{"id":77,"depth":143,"text":78},{"id":103,"depth":143,"text":104},{"id":212,"depth":143,"text":213},{"id":277,"depth":143,"text":278},{"id":470,"depth":143,"text":471},{"id":520,"depth":143,"text":521},{"id":581,"depth":143,"text":582},{"id":629,"depth":143,"text":630},{"id":675,"depth":143,"text":676,"children":774},[775,776,777,778,779],{"id":680,"depth":160,"text":681},{"id":705,"depth":160,"text":706},{"id":712,"depth":160,"text":713},{"id":724,"depth":160,"text":725},{"id":739,"depth":160,"text":740},"Migration","update","2026-06-04","We're renaming \"Receivers\" to \"Customers\" across the entire BlindPay platform. Both endpoints will work during a 1-month transition period.","md",false,{"excerpt":787},{"type":8,"value":788},[789],[11,790,13],{},"\u002Fchangelog\u002F2026-06-04-customers-rename","---\ntitle: '\"Receivers\" renamed to \"Customers\"'\ndescription: We're renaming \"Receivers\" to \"Customers\" across the entire BlindPay platform. Both endpoints will work during a 1-month transition period.\ndate: 2026-06-04\ncategory: Migration\ncategoryType: update\nisChangelog: true\n---\n\nWe're renaming \"Receivers\" to \"Customers\" across the entire BlindPay platform: API endpoints, SDKs, documentation, and dashboard.\n\n\u003C!--more-->\n\n## TL;DR\n\n- All `\u002Freceivers` endpoints now have `\u002Fcustomers` equivalents\n- Both `\u002Freceivers` and `\u002Fcustomers` paths work identically through **July 3, 2026**\n- After that date, `\u002Freceivers` endpoints return `301 Moved Permanently`\n- IDs stay the same (`re_` prefix), no data migration needed\n- SDKs add a `customers` accessor to their current majors and `receivers` is deprecated alongside, no import changes required\n\n## What changed\n\nEvery API endpoint that previously used `\u002Freceivers` in its path now has a `\u002Fcustomers` equivalent:\n\n```\nGET    \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers                →  GET    \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\nPOST   \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers                →  POST   \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\nGET    \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers\u002F{receiver_id}  →  GET    \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\u002F{customer_id}\nPUT    \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers\u002F{receiver_id}  →  PUT    \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\u002F{customer_id}\nDELETE \u002Fv1\u002Finstances\u002F{instance_id}\u002Freceivers\u002F{receiver_id}  →  DELETE \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\u002F{customer_id}\n```\n\nThis applies to all sub-resources too: bank accounts, wallets, virtual accounts, blockchain wallets, offramp wallets, and limit increases.\n\n## Response changes\n\nDuring the transition period, every customer record returned by either `\u002Fcustomers` or `\u002Freceivers` carries a `customer_id` alias of its primary key. The underlying ID still uses the `re_` prefix and remains in the `id` field:\n\n```json\n{\n  \"id\": \"re_abc123456789\",\n  \"customer_id\": \"re_abc123456789\",\n  \"first_name\": \"Alice\"\n}\n```\n\nPayouts 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 `\u002Fcustomers\u002F{id}\u002F…` (bank accounts, wallets, virtual accounts, blockchain wallets, offramp wallets) derive the parent from the URL, so no FK alias appears in the response body.\n\nAfter the sunset, the `customer_id` alias becomes the canonical field name across the API.\n\n## Webhook changes\n\nThree new webhook events fire alongside the existing ones:\n\n- `customer.new`: fires whenever `receiver.new` fires\n- `customer.update`: fires whenever `receiver.update` fires\n- `customer.delete`: fires whenever `receiver.delete` fires\n\nYou **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.\n\nDuring 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.\n\n## SDK updates\n\n| SDK     | Now (transition)                                                            | At\u002Fafter sunset                                                                       |\n| ------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |\n| Node.js | Minor release adds `customers`, marks `receivers` `@deprecated` in JSDoc.   | Next major (4.0.0) removes `receivers`.                                               |\n| Python  | Minor release adds `customers`, marks `receivers` deprecated with warning.  | Next major (2.0.0) removes `receivers`.                                               |\n| Go      | Minor release adds `customers` package, `\u002F\u002F Deprecated:` on `receivers`.    | **No v2 planned for this rename.** `receivers` stays as a deprecated forwarder in v1. |\n| PHP     | Minor release adds `customers`, marks `receivers` `@deprecated` in PHPDoc.  | Next major (2.0.0) removes `receivers`.                                               |\n| Swift   | Minor release adds `customers`, `@available(*, deprecated)` on `receivers`. | Next major (2.0.0) removes `receivers`.                                               |\n\nNo 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.\n\n**Go is treated differently.** `receivers` stays as a thin deprecated forwarder in v1 indefinitely. `gopls`, `staticcheck SA1019`, and `godoc` will flag usage; nothing breaks.\n\nMethod signatures are unchanged. Only the resource accessor renames. For most projects this is a single find\u002Freplace. Example in Node.js SDK:\n\n```diff\n- await blindpay.receivers.list()\n+ await blindpay.customers.list()\n\n- await blindpay.receivers.bankAccounts.create({ ... })\n+ await blindpay.customers.bankAccounts.create({ ... })\n```\n\n## What you need to do\n\n1. **Update your API calls** to use `\u002Fcustomers` instead of `\u002Freceivers`\n2. **Update field references** from `receiver_id` to `customer_id` in your code\n3. **Update webhook subscriptions** to use `customer.new`, `customer.update`, and `customer.delete`\n4. **Update your SDK** to the latest version of its current major. The `customers` accessor is added there, no import changes required\n\n## Timeline\n\n- **June 4, 2026**: `\u002Fcustomers` endpoints live. Both `\u002Freceivers` and `\u002Fcustomers` accept requests. Receiver responses include `Deprecation: true` and `Sunset: Fri, 03 Jul 2026 00:00:00 GMT` headers, plus a `Link: rel=\"successor-version\"` pointing to the customer equivalent.\n- **July 3, 2026**: Sunset date. `\u002Freceivers` endpoints return `301 Moved Permanently` redirecting to `\u002Fcustomers`. SDK code calling `receivers.*` continues to work via the redirect.\n- **Later**: `\u002Freceivers` endpoints removed entirely. New SDK majors ship for Node (v4), Python (v2), PHP (v2), and Swift (v2), dropping the deprecated `receivers` surface. The Go SDK keeps `receivers` as a deprecated forwarder in v1; no v2 planned for this rename. Previous SDK majors enter maintenance mode (security fixes only).\n\n## Detect deprecation programmatically\n\nEvery `\u002Freceivers` response carries deprecation metadata you can monitor in tests or runtime logs:\n\n```http\nHTTP\u002F1.1 200 OK\nDeprecation: true\nSunset: Fri, 03 Jul 2026 00:00:00 GMT\nLink: \u003C\u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers>; rel=\"successor-version\"\nContent-Type: application\u002Fjson\n```\n\nUseful in CI: fail a smoke test if production traffic still hits `Deprecation: true` endpoints close to the sunset date.\n\n## Verification checklist\n\nBefore considering your migration complete:\n\n- Logs show zero requests to `\u002Fv1\u002Finstances\u002F*\u002Freceivers*` paths from your services\n- CI \u002F monitoring asserts no `Deprecation: true` header on production responses\n- Webhook handlers process `customer.new`, `customer.update`, and `customer.delete`\n- No code paths reference `response.receiver_id`\n- SDK updated to the latest minor release of its current major\n- Saved dashboard URLs use `\u002Fcustomers\u002F`\n\n## FAQ\n\n### What if I don't migrate before July 3, 2026?\n\n`\u002Freceivers` paths return `301 Moved Permanently` pointing to the equivalent `\u002Fcustomers` 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.\n\n### Can I migrate one resource group at a time?\n\nYes. 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.\n\n### Will I get duplicate webhook events during the transition?\n\nYes, 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.\n\n### Do I need to migrate my stored IDs?\n\nNo. All IDs keep the `re_` prefix. The same ID works with both `\u002Freceivers` and `\u002Fcustomers` endpoints. We are renaming the API surface, not the underlying resource.\n\n### How do I report issues with the migration?\n\nUse 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.\n",{"title":5,"description":783},"changelog\u002F2026-06-04-customers-rename","HKBXALJT2NQ5CIm4XsSZpjBp7EWEW7Sf-SWnb-84Skw",1785804333798]