Skip to main content
POST
cURL

Generate Bank Link

How linking works

  1. Your backend calls this endpoint for a VERIFIED US customer and gets widget_url.
  2. Your app opens widget_url. The customer signs in to their bank and picks the account.
  3. The customer lands on redirect_url, whether linking worked or not.
  4. Call Fetch Bank Accounts. The account is in accounts, PROCESSING until the connection completes, then VERIFIED. No BANK webhook is sent, so poll.
  5. Create an ACH_PULL payin quotation with that account’s id as bank_id. It’s required: without it the quotation fails with No linked bank account found for the selected payment method. Zapyd debits that account, so there are no deposit instructions.
In sandbox, the hosted page isn’t available for test customers. Call Mock Bank Verification with the US customer_id, bank_status: "VERIFIED" and no bank_id: it creates a linked test account that Fetch Bank Accounts returns.

Error Codes and Messages

Authorizations

X-API-KEY
string
header
required

API Key for authentication

X-TIMESTAMP
string
header
required

Current timestamp in seconds since epoch

X-SIGNATURE
string
header
required

HMAC SHA256 signature of the request encoded in Base64

Body

application/json
customer_id
string<uuid>
required

Zapyd customer ID (UUID) of a VERIFIED US customer.

Example:

"c2cf861b-342b-4318-a90e-85cd0312e82f"

redirect_url
string<uri>
required

Where the customer returns after linking, whether it worked or not. Must be a full URL.

Example:

"https://yourapp.com/bank/return"

payment_method
enum<string>
default:ach_pull

Optional. The payin method the account is linked for. Defaults to ach_pull. Case-insensitive.

Available options:
ach_pull,
wire,
debit_card
Example:

"ach_pull"

Response

Link created

status
boolean
Example:

true

message
string
Example:

"Success"

data
object