We’re adding recurring ACH (bank on file) with the Web Payments SDK in sandbox. Every RECURRING_CHARGE tokenization fails with UnexpectedError (“An unexpected error occurred while authorizing the payment.”). event.detail.error is:
{"errors":[],"name":"UnexpectedError"}
Setup: sandbox, Web Payments SDK 1.85.0 (sandbox CDN), location LHHQFTBYJC0X0.
STOREworks:ach.tokenize({ intent: 'STORE', accountHolderName })through Plaid (First Platypus Bank,user_good) → CreateBankAccount →bact:2GVUNXJzbzCKWtRv3GB, statusVERIFIED, debitable, on customer2EB22S8MD76ATQBACSFJ1Q1J88.- A one-off
ach.tokenize({ intent: 'CHARGE', bankAccountId, amount, currency })on the same account proceeds normally. - Every
RECURRING_CHARGEfails identically:
// variable amount
{ intent: 'RECURRING_CHARGE', bankAccountId, startDate: '2026-10-01',
frequency: { monthly: { days: { daysOfMonth: [1] } } }, variableAmount: true }
// fixed amount: same result
{ ..., amount: '869.53', currency: 'USD' }
// daily, as in the docs: same result
{ ..., frequency: { days: 30 } }
Weekly frequency, and a startDate of today or tomorrow, fail the same way.
- The Application ID and access token belong to the same application. The sandbox personal access token (regenerated today) has
BANK_ACCOUNTS_READbut notBANK_ACCOUNTS_WRITE, which the bank-on-file guide lists as required.
Questions
- Is
RECURRING_CHARGEavailable in sandbox, and does it need enabling for our application or seller account? - Does it require
BANK_ACCOUNTS_WRITE, and if so, how do we obtain it? Personal access tokens don’t include it; is OAuth required? - Is anything else required that isn’t in the docs?