openapi: 3.1.0 info: title: Dwolla API description: Dwolla API Documentation contact: name: Dwolla Developer Relations Team url: https://developers.dwolla.com email: api@dwolla.com version: '2.0' termsOfService: https://www.dwolla.com/legal/tos/ license: name: MIT url: https://github.com/Dwolla/dwolla-openapi/blob/master/LICENSE jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base servers: - url: https://api.dwolla.com description: Production server - url: https://api-sandbox.dwolla.com description: Sandbox server security: - clientCredentials: [] tags: - name: tokens description: Operations related to Application Access Tokens - name: root description: Root API operations - name: accounts description: Operations related to Accounts - name: customers description: Operations related to Customers - name: kba description: Operations related to Knowledge-Based Authentication - name: beneficial owners description: Operations related to Beneficial Owners - name: documents description: Operations related to Documents - name: exchanges description: Operations related to Exchanges - name: exchange sessions description: Operations related to Exchange Sessions - name: funding sources description: Operations related to Funding Sources - name: transfers description: Operations related to Transfers - name: labels description: Operations related to Labels - name: mass payments description: Operations related to Mass Payments - name: events description: Operations related to Events - name: webhook subscriptions description: Operations related to Webhook Subscriptions - name: webhooks description: Operations related to Webhooks - name: client tokens description: Operations related to Client Tokens - name: sandbox simulations description: Sandbox-only operations for simulating processing of bank transfers paths: /token: post: tags: - tokens summary: Create an application access token description: Generate an application access token using OAuth 2.0 client credentials flow for server-to-server authentication. Requires client ID and secret sent via Basic authentication header with grant_type=client_credentials in the request body. Returns a bearer access token with expiration time for authenticating API requests scoped to your application. Essential for secure API access. operationId: createApplicationAccessToken x-speakeasy-group: tokens x-speakeasy-name-override: create security: - basicAuth: [] x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/token Authorization: Basic YkVEMGJMaEFhb0pDamplbmFPVjNwMDZSeE9Eb2pyOUNFUzN1dldXcXUyeE9RYk9GeUE6WEZ0bmJIbXR3dXEwNVI1Yk91WmVOWHlqcW9RelNSc21zUU5qelFOZUFZUlRIbmhHRGw= Content-Type: application/x-www-form-urlencoded grant_type=client_credentials - lang: javascript source: | // Using DwollaV2 - https://github.com/Dwolla/dwolla-v2-node // This example assumes you've already initialized the client. Reference the SDKs page for more information: https://developers.dwolla.com/sdks-tools client.auth .client() .then(function (appToken) { return appToken.get("/"); }) .then(function (res) { console.log(JSON.stringify(res.body)); }); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python // This example assumes you've already initialized the client. Reference the SDKs page for more information: https://developers.dwolla.com/sdks-tools app_token = client.Auth.client() - lang: php source: | token(); DwollaSwagger\Configuration::$access_token = $appToken->access_token; ?> - lang: ruby source: | # Using DwollaV2 - https://github.com/Dwolla/dwolla-v2-ruby // This example assumes you've already initialized the client. Reference the SDKs page for more information: https://developers.dwolla.com/sdks-tools app_token = $dwolla.auths.client # => # access_token="..." expires_in=3600 scope="..."> requestBody: required: true description: OAuth get token request. Client credentials are sent in the Authorization header using Basic authentication. content: application/x-www-form-urlencoded: schema: type: object required: - grant_type properties: grant_type: type: string enum: - client_credentials description: Must be set to "client_credentials" example: client_credentials responses: '200': description: successful operation headers: {} content: application/json: schema: type: object required: - access_token - token_type - expires_in properties: access_token: type: string description: A new access token that is used to authenticate against resources that belong to the app itself. example: gTm0p62yYXFiB1rOdhV0TsNOinC2V2P1CMaAtojkO9JEGbv3i5 token_type: type: string description: The type of token, always "Bearer" example: Bearer expires_in: type: integer description: The lifetime of the access token, in seconds. Default is 3600. example: 3599 '401': description: Unauthorized headers: {} content: application/json: schema: type: object properties: error: type: string example: invalid_client /: get: tags: - root summary: root description: Retrieve the API root entry point to discover available resources and endpoints based on your OAuth access token permissions. Returns HAL+JSON with navigation links to accessible resources including accounts, customers, events, and webhook subscriptions depending on token scope. Essential for API exploration, dynamic resource discovery, and building adaptive client applications that respond to available permissions. operationId: getRoot x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/ Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla.get("/").then((res) => res.body._links.account.href); // => 'https://api-sandbox.dwolla.com/accounts/ad5f2162-404a-4c4c-994e-6ab6c3a13254' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python root = app_token.get('/') root.body['_links']['account']['href'] # => 'https://api-sandbox.dwolla.com/accounts/ad5f2162-404a-4c4c-994e-6ab6c3a13254' - lang: php source: | root(); $accountUrl = $root->_links["account"]->href; # => "https://api-sandbox.dwolla.com/accounts/ad5f2162-404a-4c4c-994e-6ab6c3a13254" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby root = app_token.get "/" root._links.account.href # => "https://api-sandbox.dwolla.com/accounts/ad5f2162-404a-4c4c-994e-6ab6c3a13254" parameters: - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Root' '401': description: unauthorized content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: InvalidAccessToken message: type: string example: Invalid access token. deprecated: false /accounts/{id}: get: tags: - accounts summary: Retrieve account details description: Returns basic account information for your authorized Main Dwolla Account, including account ID, name, and links to related resources such as funding sources, transfers, and customers. operationId: getAccount x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var accountUrl = "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b"; dwolla.get(accountUrl).then((res) => res.body.name); // => 'Jane Doe' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python account_url = 'https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b' account = app_token.get(account_url) account.body['name'] - lang: php source: | id($accountUrl); print($account->name); # => "Jane Doe" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby account_url = 'https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b' account = app_token.get account_url account.name # => "Jane Doe" parameters: - name: id in: path description: Account's unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Account' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to retrieve an Account by id. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /funding-sources: post: tags: - accounts summary: Create a funding source for an account description: | Create a funding source by adding a bank account to a Main Dwolla Account. This endpoint allows you to connect a checking or savings account using either manual bank account details or an exchange resource. For more information about funding sources, see the [Funding Sources API Reference](https://developers.dwolla.com/docs/api-reference/funding-sources). operationId: createFundingSource x-speakeasy-group: accounts.fundingSources x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/funding-sources Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "routingNumber": "222222226", "accountNumber": "123456789", "bankAccountType": "checking", "name": "My Bank" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var requestBody = { routingNumber: "222222226", accountNumber: "123456789", bankAccountType: "checking", name: "My Bank", }; dwolla .post("funding-sources", requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/04173e17-6398-4d36-a167-9d98c4b1f1c3' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python request_body = { 'routingNumber': '222222226', 'accountNumber': '123456789', 'bankAccountType': 'checking', 'name': 'My Bank' } funding_source = app_token.post('funding-sources', request_body) funding_source.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/04173e17-6398-4d36-a167-9d98c4b1f1c3' - lang: php source: | createFundingSource([ "routingNumber" => "222222226", "accountNumber" => "123456789", "bankAccountType" => "checking", "name" => "My Bank" ]); $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/04173e17-6398-4d36-a167-9d98c4b1f1c3" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby request_body = { routingNumber: '222222226', accountNumber: '123456789', bankAccountType: 'checking', name: 'My Bank' } funding_source = app_token.post "funding-sources", request_body funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/04173e17-6398-4d36-a167-9d98c4b1f1c3" parameters: - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters for the funding source to be created content: application/json: schema: $ref: '#/components/schemas/CreateAccountFundingSource' responses: '201': description: successful operation headers: Location: $ref: '#/components/headers/Location' '400': description: Bad request or duplicate resource headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/BadRequestSchema' - $ref: '#/components/schemas/DuplicateResourceSchema' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to create funding source. /accounts/{id}/funding-sources: get: tags: - accounts summary: List funding sources for an account description: | Get a list of all funding sources associated with a specific Main Dwolla Account. This endpoint returns both bank accounts and balance funding sources, with detailed information about each funding source's status, type, and available processing channels. operationId: listFundingSources x-speakeasy-group: accounts.fundingSources x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/funding-sources Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla .get("accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/funding-sources") .then((res) => res.body.total); // => 1 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python funding_sources = app_token.get('accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/funding-sources') funding_sources.body['total'] # => 1 - lang: php source: | getAccountFundingSources("CA366CA3-6D30-44D6-B0F3-8D86C64462A1"); $fundingSources->total; # => 1 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby funding_sources = app_token.get "accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/funding-sources" funding_sources.total # => 1 parameters: - name: id in: path description: Account's unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' - name: removed in: query description: Filter removed funding sources. Boolean value. Defaults to `true` required: false schema: type: string responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/FundingSources' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to list funding sources. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Account not found. /accounts/{id}/transfers: get: tags: - accounts summary: List and search account transfers description: Returns a paginated, searchable list of transfers associated with the specified Main Dwolla account. Supports advanced filtering by amount range, date range, transfer status, and correlation ID. Results are limited to 10,000 transfers per query; use date range filters for historical data beyond this limit. operationId: listAndSearchTransfers x-speakeasy-group: accounts.transfers x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/transfers Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla .get("accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/transfers") .then((res) => res.body.total); // => 1 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python transfers = app_token.get('accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/transfers') transfers.body['total'] # => 1 - lang: php source: | getAccountTransfers("CA366CA3-6D30-44D6-B0F3-8D86C64462A1"); $transfers->total; # => 1 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby transfers = app_token.get "accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/transfers" transfers.total # => 1 parameters: - name: id in: path description: Account's unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' - name: search in: query description: A string to search on fields `firstName`, `lastName`, `email`, `businessName`, Customer ID, and Account ID required: false schema: type: string - name: startAmount in: query description: Only include transactions with an amount equal to or greater than `startAmount` required: false schema: type: string - name: endAmount in: query description: Only include transactions with an amount equal to or less than `endAmount` required: false schema: type: string - name: startDate in: query description: Only include transactions created after this date. ISO-8601 format `YYYY-MM-DD` required: false schema: type: string - name: endDate in: query description: Only include transactions created before this date. ISO-8601 format `YYYY-MM-DD` required: false schema: type: string - name: status in: query description: Filter on transaction status. Possible values are `pending`, `processed`, `failed`, or `cancelled` required: false schema: type: string - name: correlationId in: query description: A string value to search on if `correlationId` was specified for a transaction required: false schema: type: string - name: limit in: query description: Number of search results to return. Defaults to 25 required: false schema: type: string - name: offset in: query description: Number of search results to skip. Use for pagination required: false schema: type: string responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Transfers' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Account not found. /accounts/{id}/mass-payments: get: tags: - accounts summary: List account mass payments description: Returns a paginated list of mass payments created by your Main Dwolla account. Results are sorted by creation date in descending order (newest first) and can be filtered by correlation ID. operationId: listMassPayments x-speakeasy-group: accounts.massPayments x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/mass-payments Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla .get("accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/mass-payments") .then((res) => res.body.total); // => 1 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python mass_payments = app_token.get('accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/mass-payments') mass_payments.body['total'] # => 1 - lang: php source: | getAccountMassPayments("CA366CA3-6D30-44D6-B0F3-8D86C64462A1"); $massPayments->total; # => 1 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby mass_payments = app_token.get "accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/mass-payments" mass_payments.total # => 1 parameters: - name: id in: path description: Account's unique identifier required: true style: simple explode: false schema: type: string - $ref: '#/components/parameters/Accept' - name: limit in: query description: Maximum number of results to return required: false schema: type: integer format: int32 minimum: 1 maximum: 200 default: 25 example: 25 - name: offset in: query description: How many results to skip. style: form explode: true schema: type: integer format: int32 default: 0 example: 0 - name: correlationId in: query description: Correlation ID to search by. style: form explode: true schema: type: string responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/MassPayments' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to list mass payments. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Account not found. /customers: get: tags: - customers summary: List and search customers description: Returns a paginated list of customers sorted by creation date. Supports fuzzy search across customer names, business names, and email addresses, plus exact filtering by email and verification status. Default limit is 25 customers per page, maximum 200. operationId: listAndSearchCustomers x-speakeasy-name-override: list parameters: - name: limit in: query description: How many results to return required: false schema: type: integer - name: offset in: query description: How many results to skip required: false schema: type: integer - name: search in: query description: Searches on certain fields required: false schema: type: string - name: status in: query description: Filter by customer status required: false schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Customers' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' post: tags: - customers summary: Create a customer description: Creates a new customer with different verification levels and capabilities. Supports personal verified customers (individuals), business verified customers (businesses), unverified customers, and receive-only users. Customer type determines transaction limits, verification requirements, and available features. operationId: createCustomer x-speakeasy-name-override: create parameters: - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters for customer to be created content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/CreateReceiveOnlyUser' - $ref: '#/components/schemas/CreateUnverifiedCustomer' - $ref: '#/components/schemas/CreateVerifiedPersonalCustomer' - $ref: '#/components/schemas/CreateVerifiedSolePropCustomer' - $ref: '#/components/schemas/CreateVerifiedBusinessCustomerWithController' - $ref: '#/components/schemas/CreateVerifiedBusinessCustomerWithInternationalController' responses: '201': description: successful operation headers: Location: $ref: '#/components/headers/Location' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to create customers. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: not found. /customers/{id}: get: tags: - customers summary: Retrieve a customer description: Retrieve identifying information for a specific customer. The returned data varies by customer type - verified customers include contact details, address information, and verification status, while unverified customers and receive-only users contain basic contact information only. operationId: getCustomer x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/FC451A7A-AE30-4404-AB95-E3553FCD733F Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla .get("customers/FC451A7A-AE30-4404-AB95-E3553FCD733F") .then((res) => res.body); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer = app_token.get('customers/FC451A7A-AE30-4404-AB95-E3553FCD733F') customer.body - lang: php source: | getCustomer("FC451A7A-AE30-4404-AB95-E3553FCD733F"); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer = app_token.get "customers/FC451A7A-AE30-4404-AB95-E3553FCD733F" parameters: - name: id in: path description: Customer unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/UnverifiedCustomer' - $ref: '#/components/schemas/ReceiveOnlyCustomer' - $ref: '#/components/schemas/VerifiedPersonalCustomer' - $ref: '#/components/schemas/VerifiedSolePropCustomer' - $ref: '#/components/schemas/VerifiedBusinessCustomer' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to get a customer by id. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Customer not found. post: tags: - customers summary: Update a customer description: Update Customer information, upgrade an unverified Customer to a verified Customer, suspend a Customer, deactivate a Customer, reactivate a Customer, and update a verified Customer's information to retry verification. operationId: update x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/customers/FC451A7A-AE30-4404-AB95-E3553FCD733F Content-Type: application/json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "firstName": "John", "lastName": "Doe", "email": "johndoe@example.com" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla .post("customers/FC451A7A-AE30-4404-AB95-E3553FCD733F", { firstName: "John", lastName: "Doe", email: "johndoe@example.com" }) .then((res) => res.body); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer = app_token.post('customers/FC451A7A-AE30-4404-AB95-E3553FCD733F', { 'firstName': 'John', 'lastName': 'Doe', 'email': 'johndoe@example.com' }) customer.body - lang: php source: | updateCustomer("FC451A7A-AE30-4404-AB95-E3553FCD733F", [ 'firstName' => 'John', 'lastName' => 'Doe', 'email' => 'johndoe@example.com' ]); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer = app_token.post "customers/FC451A7A-AE30-4404-AB95-E3553FCD733F", { firstName: "John", lastName: "Doe", email: "johndoe@example.com" } parameters: - name: id in: path description: Customer unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters for updating a Customer content: application/json: schema: oneOf: - $ref: '#/components/schemas/DeactivateCustomer' - $ref: '#/components/schemas/ReactivateCustomer' - $ref: '#/components/schemas/SuspendCustomer' - $ref: '#/components/schemas/UpdateUnverifiedAndReceiveOnly' - $ref: '#/components/schemas/UpdateVerifiedPersonal' - $ref: '#/components/schemas/UpdateVerifiedBusiness' - $ref: '#/components/schemas/UpgradeToUnverified' - $ref: '#/components/schemas/UpgradeToVerifiedPersonal' - $ref: '#/components/schemas/UpgradeToVerifiedBusiness' - $ref: '#/components/schemas/UpgradeToVerifiedSoleProp' - $ref: '#/components/schemas/RetryVerifiedPersonal' - $ref: '#/components/schemas/RetryVerifiedBusinessNoController' - $ref: '#/components/schemas/RetryVerifiedBusinessWithController' - $ref: '#/components/schemas/RetryVerifiedBusinessWithInternationalController' - $ref: '#/components/schemas/RetryVerifiedSoleProp' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/UnverifiedCustomer' - $ref: '#/components/schemas/ReceiveOnlyCustomer' - $ref: '#/components/schemas/VerifiedPersonalCustomer' - $ref: '#/components/schemas/VerifiedSolePropCustomer' - $ref: '#/components/schemas/VerifiedBusinessCustomer' '400': description: bad request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: badRequest message: type: string example: Duplicate customer or validation error. '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to update a customer. /business-classifications: get: tags: - customers summary: List business classifications description: Returns a directory of business and industry classifications required for creating business verified customers. Each business classification contains multiple industry classifications. The industry classification ID must be provided in the businessClassification parameter during business customer creation for verification. operationId: listBusinessClassifications x-speakeasy-group: businessClassifications x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/business-classifications Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla .get("business-classifications") .then((res) => res.body._embedded["business-classifications"][0].name); // => 'Accommodation and Food Services' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python classifications = app_token.get('business-classifications') classifications.body['_embedded']['business-classifications'][0]['name'] # => 'Accommodation and Food Services' - lang: php source: | _list(); $classifications->_embedded->{'business-classifications'}[0]->name; # => "Accommodation and Food Services" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby classifications = app_token.get "business-classifications" classifications._embedded.['business-classifications'][0].name # => "Accommodation and Food Services" parameters: - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BusinessClassifications' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /business-classifications/{id}: get: tags: - customers summary: Retrieve a business classification description: Returns a specific business classification with its embedded industry classifications. Use this endpoint to browse available industry options within a business category and obtain the industry classification ID required for the businessClassification parameter when creating business verified customers. operationId: retrieveBusinessClassification x-speakeasy-group: businessClassifications x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/business-classifications/9ed3f670-7d6f-11e3-b1ce-5404a6144203 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla .get("business-classifications/9ed3f670-7d6f-11e3-b1ce-5404a6144203") .then((res) => res.body.name); // => 'Accommodation and Food Services' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python classification = app_token.get('business-classifications/9ed3f670-7d6f-11e3-b1ce-5404a6144203') classification.body['name'] # => 'Accommodation and Food Services' - lang: php source: | getBusinessClassification("9ed3f670-7d6f-11e3-b1ce-5404a6144203"); $classification->name; # => "Accommodation and Food Services" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby classification = app_token.get "business-classifications/9ed3f670-7d6f-11e3-b1ce-5404a6144203" classification.name # => "Accommodation and Food Services" parameters: - name: id in: path description: business classification unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BusinessClassification' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: not_found message: type: string example: not found. /customers/{id}/beneficial-owners: get: tags: - beneficial owners summary: List customer beneficial owners description: Returns all beneficial owners associated with a business verified customer. Beneficial owners are individuals who directly or indirectly own 25% or more of the company's equity. Includes personal information, verification status, and address details for each owner. operationId: listBeneficialOwnersForCustomer x-speakeasy-group: customers.beneficialOwners x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/81696e5d-a593-45a6-8863-3c20ad634de5/beneficial-owners Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2"; token .get(`${customerUrl}/beneficial-owners`) .then((res) => res.body._embedded["beneficial-owners"][0].id); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' beneficial_owners = app_token.get('%s/beneficial-owners' % customer_url) beneficial_owners.body['id'] - lang: php source: | getBeneficialOwners($customerUrl); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' beneficial_owners = app_token.get "#{customer_url}/beneficial-owners" beneficial_owners._embedded['beneficial-owners'][0].id parameters: - name: id in: path description: Customer unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BeneficialOwners' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: not_found message: type: string example: not found. post: tags: - beneficial owners summary: Create customer beneficial owner description: Creates a new beneficial owner for a business verified customer. Beneficial owners are individuals who own 25% or more of the company's equity. Requires personal information, address, and SSN or passport for identity verification. operationId: createBeneficialOwnerForCustomer x-speakeasy-group: customers.beneficialOwners x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/customers/81696e5d-a593-45a6-8863-3c20ad634de5/beneficial-owners Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "firstName": "document", "lastName": "owner", "ssn": "123-46-7890", "dateOfBirth": "1960-11-30", "address": { "address1": "123 Main St.", "city": "New York", "stateProvinceRegion": "NY", "country": "US", "postalCode": "10005" } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = 'https://api-sandbox.dwolla.com/customers/07d59716-ef22-4fe6-98e8-f3190233dfb8'; var requestBody = { firstName: 'John', lastName: 'Doe', dateOfBirth: '1970-01-01', ssn: '123-56-7890', address: { address1: '99-99 33rd St', city: 'Some City', stateProvinceRegion: 'NY', country: 'US', postalCode: '11101' } }; dwolla .post(`${customerUrl}/beneficial-owners`, requestBody) .then(res => res.headers.get('location')); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { 'firstName': 'John', 'lastName': 'Doe', 'dateOfBirth': '1970-01-01', 'ssn': '123-46-7890', 'address': { 'address1': '99-99 33rd St', 'city': 'Some City', 'stateProvinceRegion': 'NY', 'country': 'US', 'postalCode': '11101' } } beneficial_owner = app_token.post('%s/beneficial-owners' % customer_url, request_body) beneficial_owner.headers['location'] - lang: php source: | addBeneficialOwner([ 'firstName' => 'document', 'lastName'=> 'owner', 'dateOfBirth' => '1990-11-11', 'ssn' => '123-34-9876', 'address' => [ 'address1' => '18749 18th st', 'address2' => 'apt 12', 'address3' => '', 'city' => 'Des Moines', 'stateProvinceRegion' => 'IA', 'postalCode' => '50265', 'country' => 'US' ], ], $verified_customer); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/81696e5d-a593-45a6-8863-3c20ad634de5' request_body = { :firstName => 'John', :lastName => 'Doe', :ssn => '123-46-7890', :dateOfBirth => '1970-01-01', :address => { :address1 => '99-99 33rd St', :city => 'Some City', :stateProvinceRegion => 'NY', :country => 'US', :postalCode => '11101' } } beneficial_owner = app_token.post "#{customer_url}/beneficial-owners", request_body beneficial_owner.response_headers[:location] parameters: - name: id in: path description: Customer ID for which to create a Beneficial Owner required: true style: simple explode: false schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters for creating a beneficial owner content: application/json: schema: oneOf: - $ref: '#/components/schemas/CreateUSBeneficialOwner' - $ref: '#/components/schemas/CreateInternationalBeneficialOwner' responses: '201': description: successful operation headers: Location: $ref: '#/components/headers/Location' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /beneficial-owners/{id}: get: tags: - beneficial owners summary: Retrieve beneficial owner description: Returns detailed information for a specific beneficial owner, including personal information, address, and verification status. The verification status indicates the owner's identity verification progress and affects the business customer's transaction capabilities. operationId: retrieveBeneficialOwner x-speakeasy-group: beneficialOwners x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/beneficial-owners/976a4c14-b183-40e9-b2df-ddbb3e794d3f Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var beneficialOwnerUrl = "https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8"; dwolla.get(beneficialOwnerUrl).then((res) => res.body.firstName); // => 'Jane' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfB8' beneficial_owner = app_token.get(beneficial_owner_url) beneficial_owner.body['firstName'] - lang: php source: | getById($beneficialOwnerUrl); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfB8' beneficial_owner = app_token.get beneficial_owner_url beneficial_owner.firstName # => "Jane" parameters: - name: id in: path description: Beneficial owner unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BeneficialOwner' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: not_found message: type: string example: not found. post: tags: - beneficial owners summary: Update beneficial owner description: Updates a beneficial owner's information to retry verification when their status is "incomplete". Only beneficial owners with incomplete verification status can be updated. Used to correct information that caused initial verification to fail. operationId: updateBeneficialOwner x-speakeasy-group: beneficialOwners x-speakeasy-name-override: update x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8 Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "firstName": "beneficial", "lastName": "owner", "ssn": "123-54-6789", "dateOfBirth": "1963-11-11", "address": { "address1": "123 Main St.", "address2": "Apt 123", "city": "Des Moines", "stateProvinceRegion": "IA", "country": "US", "postalCode": "50309" } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var beneficialOwnerUrl = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8'; var requestBody = { firstName: 'beneficial', lastName: 'owner', dateOfBirth: '1963-11-11', ssn: '123-54-6789', address: { address1: '123 Main St', city: 'Des Moines', stateProvinceRegion: 'IA', country: 'US', postalCode: '50309' } }; dwolla .post(beneficialOwnerUrl, requestBody) .then(res => res.body.id); // => '00cb67f2-768c-4ee3-ac81-73bc4faf9c2b' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8' request_body = { 'firstName': 'beneficial', 'lastName': 'owner', 'dateOfBirth': '1963-11-11', 'ssn': '123-54-6789', 'address': { 'address1': '123 Main St', 'city': 'Des Moines', 'stateProvinceRegion': 'IA', 'country': 'US', 'postalCode': '50309' } } update_beneficial_owner = app_token.post(beneficial_owner_url, request_body) update_beneficial_owner.body['id'] # => '00cb67f2-768c-4ee3-ac81-73bc4faf9c2b' - lang: php source: | update([ 'firstName' => 'beneficial', 'lastName'=> 'owner', 'dateOfBirth' => '1963-11-11', 'ssn' => '123-54-6789', 'address' => [ 'address1' => '123 Main St.', 'address2' => 'Apt 123', 'city' => 'Des Moines', 'stateProvinceRegion' => 'IA', 'postalCode' => '50309', 'country' => 'US' ], ], $beneficialOwnerUrl); $updateBeneficialOwner->id; # => "00cb67f2-768c-4ee3-ac81-73bc4faf9c2b" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8' request_body = { :firstName => 'beneficial', :lastName => 'owner', :ssn => '123-54-6789', :dateOfBirth => '1963-11-11', :address => { :address1 => '123 Main St', :city => 'Des Moines', :stateProvinceRegion => 'IA', :country => 'US', :postalCode => '50309' } } update_beneficial_owner = app_token.post beneficial_owner_url, request_body update_beneficial_owner.id # => "00cb67f2-768c-4ee3-ac81-73bc4faf9c2b" parameters: - name: id in: path description: Beneficial owner unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters for updating a beneficial owner content: application/json: schema: oneOf: - $ref: '#/components/schemas/CreateUSBeneficialOwner' - $ref: '#/components/schemas/CreateInternationalBeneficialOwner' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BeneficialOwner' '400': description: ValidationError headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ValidationErrorSchema' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to update beneficial owner. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: owner not found. delete: tags: - beneficial owners summary: Remove beneficial owner description: Permanently removes a beneficial owner from a business customer. This action is irreversible and the beneficial owner cannot be retrieved after removal. Removing a beneficial owner will change the customer's certification status to "recertify". operationId: deleteBeneficialOwner x-speakeasy-group: beneficialOwners x-speakeasy-name-override: delete x-codeSamples: - lang: bash source: | DELETE https://api-sandbox.dwolla.com/beneficial-owners/692486f8-29f6-4516-a6a5-c69fd2ce854c Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var beneficialOwnerUrl = "https://api-sandbox.dwolla.com/beneficial-owners/692486f8-29f6-4516-a6a5-c69fd2ce854c"; dwolla.delete(beneficialOwnerUrl); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/692486f8-29f6-4516-a6a5-c69fd2ce854c' app_token.delete(beneficial_owner_url) - lang: php source: | deleteById($beneficialOwner); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/692486f8-29f6-4516-a6a5-c69fd2ce854c' app_token.delete beneficial_owner_url parameters: - name: id in: path description: Beneficial owner unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: not_found message: type: string example: Beneficial owner not found. /customers/{id}/beneficial-ownership: get: tags: - beneficial owners summary: Retrieve beneficial ownership status description: Returns the certification status of beneficial ownership for a business verified customer. Status indicates whether beneficial owner information has been certified and affects the customer's ability to send funds. Possible values include uncertified, certified, and recertify. operationId: getBeneficialOwnershipStatusForCustomer x-speakeasy-group: customers.beneficialOwnership x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc/beneficial-ownership Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc"; dwolla .get(`${customerUrl}/beneficial-ownership`) .then((res) => res.body.status); // => "uncertified" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' beneficial_ownership = app_token.get('%s/beneficial-ownership' % customer_url) beneficial_ownership.body['status'] # => 'uncertified' - lang: php source: | getOwnershipStatus($newCustomer); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' beneficial_ownership = app_token.get "#{customer_url}/beneficial-ownership" beneficial_ownership.status # => "uncertified" parameters: - name: id in: path description: Customer unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BeneficialOwnership' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to get certification status. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: not_found message: type: string example: Ownership certification status not found. post: tags: - beneficial owners summary: Certify beneficial ownership description: Updates the beneficial ownership certification status to "certified", confirming that all beneficial owner information is accurate and complete. This action enables the business customer to send funds and is required to complete the verification process. operationId: certifyBeneficialOwnershipForCustomer x-speakeasy-group: customers.beneficialOwnership x-speakeasy-name-override: certify x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc/beneficial-ownership Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "status": "certified" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/e52006c3-7560-4ff1-99d5-b0f3a6f4f909"; var requestBody = { status: "certified", }; dwolla.post(`${customerUrl}/beneficial-ownership`, requestBody); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/e52006c3-7560-4ff1-99d5-b0f3a6f4f909' request_body = { "status": "certified" } app_token.post('%s/beneficial-ownership' % customer_url, request_body) - lang: php source: | changeOwnershipStatus(['status' => 'certified' ], $customerId); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/e52006c3-7560-4ff1-99d5-b0f3a6f4f909' request_body = { :status => "certified" } app_token.post "#{customer_url}/beneficial-ownership", request_body parameters: - name: id in: path description: Customer unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters for certifying beneficial ownership for a Customer content: application/json: schema: required: - status type: object properties: status: type: string responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BeneficialOwnership' '400': description: ValidationError headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ValidationErrorSchema' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Forbidden from updating beneficial ownership status for this customer. /customers/{id}/documents: get: tags: - documents summary: List documents for customer description: Returns all identity verification documents submitted for a customer. Includes document status, verification results, document type (passport, driver's license, etc.), and failure reasons if verification was rejected. Used to track document submission and verification progress during the business verification process. operationId: listCustomerDocuments x-speakeasy-group: customers.documents x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2/documents Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLfwKehyh1RTpzjUj5KzIRfDi0wKTii7DqY ... { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2/documents" } }, "_embedded": { "documents": [ { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" } }, "id": "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc", "status": "pending", "type": "passport", "created": "2015-09-29T21:42:16.000Z", "documentVerificationStatus": "pending" }, { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/documents/20988444-c7e1-40cf-ab1a-a20da878e568", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "document" } }, "id": "20988444-c7e1-40cf-ab1a-a20da878e568", "status": "reviewed", "type": "license", "created": "2019-05-30T22:01:40.000Z", "documentVerificationStatus": "rejected", "failureReason": "ScanDobMismatch", "allFailureReasons": [ { "reason": "ScanDobMismatch", "description": "Scan DOB does not match DOB on account" }, { "reason": "ScanIdExpired", "description": "ID is expired or missing expiration date" } ] } ] }, "total": 2 } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2"; dwolla .get(`${customerUrl}/documents`) .then((res) => res.body._embedded["documents"][0].id); // => '56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' documents = app_token.get('%s/documents' % customer_url) documents.body['total'] # => 2 - lang: php source: | getCustomerDocuments($customerUrl); $customer->total; # => 2 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' documents = app_token.get "#{customer_url}/documents" documents._embedded['documents'][0].id # => "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" parameters: - name: id in: path description: customer unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Documents' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - documents summary: Create a document for customer description: Uploads an identity verification document for a customer using multipart form-data. Required when a customer has "document" status during the verification process. operationId: createCustomerDocument x-speakeasy-group: customers.documents x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | curl -X POST \ -H "Authorization: Bearer tJlyMNW6e3QVbzHjeJ9JvAPsRglFjwnba4NdfCzsYJm7XbckcR" \ -H "Accept: application/vnd.dwolla.v1.hal+json" \ -H "Cache-Control: no-cache" \ -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" \ -F "documentType=passport" \ -F "file=@foo.png" \ 'https://api-sandbox.dwolla.com/customers/1de32eC7-ff0b-4c0c-9f09-19629e6788ce/documents' ... HTTP/1.1 201 Created Location: https://api-sandbox.dwolla.com/documents/11fe0bab-39bd-42ee-bb39-275afcc050d0 - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node // Using form-data - https://github.com/form-data/form-data (Not Maintained By Dwolla) var customerUrl = "https://api-sandbox.dwolla.com/customers/1de32eC7-ff0b-4c0c-9f09-19629e6788ce"; var requestBody = new FormData(); requestBody.append("file", fs.createReadStream("mclovin.jpg"), { filename: "mclovin.jpg", contentType: "image/jpeg", knownLength: fs.statSync("mclovin.jpg").size, }); requestBody.append("documentType", "license"); dwolla .post(`${customerUrl}/documents`, requestBody) .then((res) => res.headers.get("location")); // => "https://api-sandbox.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/1de32eC7-ff0b-4c0c-9f09-19629e6788ce' document = app_token.post('%s/documents' % customer_url, file = open('mclovin.jpg', 'rb'), documentType = 'license') document.headers['location'] # => 'https://api-sandbox.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16' - lang: php source: | /** * No example for this language yet. **/ - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/1de32eC7-ff0b-4c0c-9f09-19629e6788ce' file = Faraday::UploadIO.new('mclovin.jpg', 'image/jpeg') document = app_token.post "#{customer_url}/documents", file: file, documentType: 'license' document.response_headers[:location] # => "https://api.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16" parameters: - name: id in: path description: customer unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: description: Upload a document for a customer. required: true content: multipart/form-data: schema: type: object required: - documentType - file properties: documentType: type: string enum: - passport - license - idCard - other example: license file: type: string format: binary responses: '201': description: successful operation headers: Location: $ref: '#/components/headers/Location' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/MaximumNumberOfResourcesSchema' - $ref: '#/components/schemas/InvalidFileTypeSchema' - $ref: '#/components/schemas/DuplicateResourceSchema' '403': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/InvalidResourceStateSchema' - $ref: '#/components/schemas/NotAuthorizedSchema' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Customer not found. Check CustomerId. '413': description: request entity too large headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: fileTooLarge message: type: string example: Document requests are limited to 10 MiB. /beneficial-owners/{id}/documents: get: tags: - documents summary: List documents for beneficial owner description: Returns all identity verification documents submitted for a beneficial owner. Includes document status, verification results, document type (passport, driver's license, etc.), and failure reasons if verification was rejected. Used to track document submission and verification progress during the business verification process. operationId: listBeneficialOwnerDocuments x-speakeasy-group: beneficialOwners.documents x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2/documents Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLfwKehyh1RTpzjUj5KzIRfDi0wKTii7DqY ... { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2/documents" } }, "_embedded": { "documents": [ { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" } }, "id": "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc", "status": "pending", "type": "passport", "created": "2015-09-29T21:42:16.000Z", "documentVerificationStatus": "pending" }, { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/documents/20988444-c7e1-40cf-ab1a-a20da878e568", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "document" } }, "id": "20988444-c7e1-40cf-ab1a-a20da878e568", "status": "reviewed", "type": "license", "created": "2019-05-30T22:01:40.000Z", "documentVerificationStatus": "rejected", "failureReason": "ScanDobMismatch", "allFailureReasons": [ { "reason": "ScanDobMismatch", "description": "Scan DOB does not match DOB on account" }, { "reason": "ScanIdExpired", "description": "ID is expired or missing expiration date" } ] } ] }, "total": 2 } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var beneficialOwnerUrl = "https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2"; dwolla .get(`${beneficialOwnerUrl}/documents`) .then((res) => res.body._embedded["documents"][0].id); // => '56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2' documents = app_token.get('%s/documents' % beneficial_owner_url) documents.body['total'] # => 2 - lang: php source: | getBeneficialOwnerDocuments($beneficialOwnerUrl); $listDocsBeneficialOwner->total; # => 2 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2' documents = app_token.get "#{beneficial_owner_url}/documents" documents._embedded['documents'][0].id # => "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" parameters: - name: id in: path description: beneficial owner unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Documents' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - documents summary: Create a document for beneficial owner description: Uploads an identity verification document for a beneficial owner using multipart form-data. Required when a beneficial owner has "document" status during the business verification process. operationId: createBeneficialOwnerDocument x-speakeasy-group: beneficialOwners.documents x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | curl -X POST \ -H "Authorization: Bearer tJlyMNW6e3QVbzHjeJ9JvAPsRglFjwnba4NdfCzsYJm7XbckcR" \ -H "Accept: application/vnd.dwolla.v1.hal+json" \ -H "Cache-Control: no-cache" \ -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" \ -F "documentType=passport" \ -F "file=@foo.png" \ 'https://api-sandbox.dwolla.com/beneficial-owners/1de32ec7-ff0b-4c0c-9f09-19629e6788ce/documents' ... HTTP/1.1 201 Created Location: https://api-sandbox.dwolla.com/documents/11fe0bab-39bd-42ee-bb39-275afcc050d0 - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node // Using form-data - https://github.com/form-data/form-data (Not Maintained By Dwolla) var beneficialOwnerUrl = "https://api-sandbox.dwolla.com/beneficial-owners/1DE32EC7-FF0B-4C0C-9F09-19629E6788CE"; var requestBody = new FormData(); body.append("file", fs.createReadStream("mclovin.jpg"), { filename: "mclovin.jpg", contentType: "image/jpeg", knownLength: fs.statSync("mclovin.jpg").size, }); body.append("documentType", "license"); dwolla .post(`${beneficialOwnerUrl}/documents`, requestBody) .then((res) => res.headers.get("location")); // => "https://api-sandbox.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/1DE32EC7-FF0B-4C0C-9F09-19629E6788CE' document = app_token.post('%s/documents' % customer_url, file = open('mclovin.jpg', 'rb'), documentType = 'license') document.headers['location'] # => 'https://api-sandbox.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16' - lang: php source: | /** * No example for this language yet. **/ - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/1DE32EC7-FF0B-4C0C-9F09-19629E6788CE' file = Faraday::UploadIO.new('mclovin.jpg', 'image/jpeg') document = app_token.post "#{beneficial_owner_url}/documents", file: file, documentType: 'license' document.response_headers[:location] # => "https://api.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16" parameters: - name: id in: path description: beneficial owner unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: description: Upload a document for a beneficial owner. required: true content: multipart/form-data: schema: type: object required: - documentType - file properties: documentType: type: string enum: - passport - license - idCard - other example: license file: type: string format: binary responses: '201': description: document created headers: Location: $ref: '#/components/headers/Location' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/MaximumNumberOfResourcesSchema' - $ref: '#/components/schemas/InvalidFileTypeSchema' - $ref: '#/components/schemas/DuplicateResourceSchema' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' '413': description: request entity too large headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: fileTooLarge message: type: string example: Document requests are limited to 10 MiB. /documents/{id}: get: tags: - documents summary: Retrieve a document description: Returns detailed information about a specific identity verification document, including its status, type, and verification results. Used to track document submission and verification progress during the business verification process. operationId: retrieveDocument x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLfwKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" } }, "id": "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc", "status": "pending", "type": "passport", "created": "2015-09-29T21:42:16.000Z", "documentVerificationStatus": "pending" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var documentUrl = "https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc"; dwolla.get(documentUrl).then((res) => res.body.type); // => "passport" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python document_url = 'https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' document = app_token.get(document_url) document.body['type'] # => 'passport' - lang: php source: | getDocument($documentUrl); $document->type; # => "passport" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby document_url = 'https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' document = app_token.get document_url document.type # => "passport" parameters: - name: id in: path description: Document unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Document' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /customers/{id}/kba: post: tags: - kba summary: Initiate a KBA session description: Creates a new KBA (Knowledge-Based Authentication) session for a personal Verified Customer. Returns a KBA identifier that represents the session and is used to retrieve authentication questions for customer verification. operationId: initiateKbaForCustomer x-speakeasy-group: customers.kba x-speakeasy-name-override: initiate x-codeSamples: - lang: bash source: | POST https://api.dwolla.com/customers/33aa88b1-97df-424a-9043-d5f85809858b/kba Authorization: Bearer cRahPzURfaIrTKL18tmslWPqKdzkLeYJm0oB1hGJ1vMPArft1v Content-Type: application/json Accept: application/vnd.dwolla.v1.hal+json - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/61a74e62-e27d-46f1-9fa6-a8e57226bb3e"; dwolla.post(`${customerUrl}/kba`).then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/61a74e62-e27d-46f1-9fa6-a8e57226bb3e' kba = app_token.post('%s/kba' % customer_url) kba.headers['location'] # => "https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31" - lang: php source: | initiateKba($customer_url); $kba; # => "https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/ca22d192-48f1-4b72-b29d-681e9e20795d' kba = app_token.post "#{customer_url}/kba" kba.response_headers[:location] # => "https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31" parameters: - name: id in: path description: The ID of the Customer for initiating a KBA session required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '403': description: 403 Error headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/InvalidResourceStateSchema' - $ref: '#/components/schemas/ForbiddenError' '404': description: 404 Error headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /kba/{id}: get: tags: - kba summary: Retrieve KBA Questions description: Returns the KBA questions for a specific KBA session. The questions are used to verify the customer's identity during the KBA process. operationId: getKbaQuestions x-speakeasy-name-override: getQuestions x-codeSamples: - lang: bash source: | GET https://api.dwolla.com/kba/33aa88b1-97df-424a-9043-d5f85809858b Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer cRahPzURfaIrTewKL18tmslWPqKdzkLeYJm0oB1hGJ1vMPArft1v - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var kbaUrl = "https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31"; dwolla.get(kbaUrl).then((res) => res.body.id); // => '70b0e9cc-020d-4de2-9a82-a2281afa4c31' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python kba_url = 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' kba_questions = app_token.get(kba_url) kba_questions.id # => '70b0e9cc-020d-4de2-9a82-a2281afa4c31' - lang: php source: | getKbaQuestions($kbaUrl); print $kbaQuestions->id; # => "70b0e9cc-020d-4de2-9a82-a2281afa4c31" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby kba_url = 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' kba_questions = app_token.get kba_url kba_questions.id # => "70b0e9cc-020d-4de2-9a82-a2281afa4c31" parameters: - name: id in: path description: The ID of the KBA session to retrieve questions for required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object required: - _links - id - questions properties: _links: type: object required: - answer properties: answer: type: object properties: href: type: string example: https://api.dwolla.com/kba/62dac6f3-bf8f-4961-9af8-428de8ecd9a4 type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: kba id: type: string example: 62dac6f3-bf8f-4961-9af8-428de8ecd9a4 questions: type: array items: type: object required: - id - text - answers properties: id: type: string example: '2355953375' text: type: string example: In what county do you currently live? answers: type: array items: type: object required: - id - text properties: id: type: string example: '2687969295' text: type: string example: Pulaski '403': description: 403 Error headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: 404 Error headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: KBA questions not found. Check KBA id. post: tags: - kba summary: Verify KBA Questions description: Submits customer answers to KBA questions for identity verification. Requires four question-answer pairs with questionId and answerId values. Returns verification status indicating whether the customer passed or failed the KBA authentication. operationId: verifyKbaQuestions x-speakeasy-name-override: verify x-codeSamples: - lang: bash source: | POST https://api.dwolla.com/kba/33aa88b1-97df-424a-9043-d5f85809858b Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer cRahPzURfaIrTewKL18tmslWPqKdzkLeYJm0oB1hGJ1vMPArft1v { "answers": [ { "questionId": "2355953375", "answerId": "2687969335" }, { "questionId": "2355953385", "answerId": "2687969385" }, { "questionId": "2355953395", "answerId": "2687969435" }, { "questionId": "2355953405", "answerId": "2687969485" } ] } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var kbaUrl = "https://api.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31"; var requestBody = { answers: [ { questionId: "2355953375", answerId: "2687969335" }, { questionId: "2355953385", answerId: "2687969385" }, { questionId: "2355953395", answerId: "2687969435" }, { questionId: "2355953405", answerId: "2687969485" }, ], }; dwolla.post(kbaUrl, requestBody); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python kba_url = 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' request_body = { 'answers' : [ { 'questionId': "2355953375", 'answerId': "2687969335" }, { 'questionId': "2355953385", 'answerId': "2687969385" }, { 'questionId': "2355953395", 'answerId':"2687969435" }, { 'questionId': "2355953405", 'answerId': "2687969485" } ] } kba_answers = app_token.post (kba_url, request_body) - lang: php source: | answerKbaQuestions([ "answers" => [ [ "questionId" => "2355953375", "answerId" => "2687969335" ], [ "questionId" => "2355953385", "answerId" => "2687969385" ], [ "questionId" => "2355953395", "answerId" => "2687969435" ], [ "questionId" => "2355953405", "answerId" => "2687969485" ] ] ], $kbaUrl); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby kba_url = 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' request_body = { :answers => [ { :questionId => "2355953375", :answerId => "2687969335" }, { :questionId => "2355953385", :answerId => "2687969385" }, { :questionId => "2355953395", :answerId => "2687969435" }, { :questionId => "2355953405", :answerId => "2687969485" } ] } kba_answers = app_token.post kba_url, request_body parameters: - name: id in: path description: The id of the KBA session to verify questions for. required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters for verifying KBA questions content: application/json: schema: required: - answers type: object properties: answers: type: array items: type: object required: - questionId - answerId properties: questionId: type: string example: '2355953375' answerId: type: string example: '2687969335' responses: '200': description: created headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: _links: type: object properties: customer: type: object properties: href: type: string example: https://api.dwolla.com/customers/b5fd802d-d8c7-43ce-94a8-7c14485b7042 type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: customer verificationStatus: type: string example: verified '403': description: 403 Error headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/ForbiddenError' - $ref: '#/components/schemas/InvalidKbaSessionError' - $ref: '#/components/schemas/ExpiredKbaSessionError' '404': description: 404 Error headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: KBA session not found. /customers/{id}/funding-sources: get: tags: - funding sources summary: List customer funding sources description: Returns all funding sources for a customer, including bank accounts, debit card funding sources, and Dwolla balance (verified customers only). Shows verification status, limited account details, and creation dates. Card funding sources include masked card information. Supports filtering to exclude removed funding sources using the removed parameter. operationId: listCustomerFundingSources x-speakeasy-group: customers.fundingSources x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733/funding-sources Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733"; dwolla .get(`${customerUrl}/funding-sources`) .then((res) => res.body._embedded["funding-sources"][0].name); // => 'Jane Doe's Checking' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733' funding_sources = app_token.get('%s/funding-sources' % customer_url) funding_sources.body['_embedded']['funding-sources'][0]['name'] # => 'Jane Doe's Checking' - lang: php source: | getCustomerFundingSources($customerUrl); $fundingSources->_embedded->{'funding-sources'}[0]->name; # => "Jane Doe's Checking" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733' funding_sources = app_token.get "#{customer_url}/funding-sources" funding_sources._embedded['funding-sources'][0].name # => "Jane Doe's Checking" parameters: - name: id in: path description: Customer's unique identifier required: true schema: type: string - name: removed in: query description: Filter removed funding sources. Boolean value. Defaults to `true` required: false schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/FundingSources' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to list funding sources. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Customer not found. post: tags: - funding sources summary: Create customer funding source description: Creates a bank account or debit card funding source for a customer. Supports multiple methods including manual entry with routing/account numbers, instant verification using existing open banking connections, debit card addition via Exchange, and virtual account numbers. Bank funding sources require verification before transfers can be initiated. operationId: createCustomerFundingSource x-speakeasy-group: customers.fundingSources x-speakeasy-name-override: create x-codeSamples: - lang: bash label: Create Bank Funding Source source: | POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "routingNumber": "222222226", "accountNumber": "123456789", "bankAccountType": "checking", "name": "Jane Doe's Checking" } - lang: bash label: Create Debit Card Funding Source source: | POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "exchange": { "href": "https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04" } }, "name": "My Visa Debit Card", "cardDetails": { "firstName": "Jane", "lastName": "Doe", "billingAddress": { "address1": "123 Main St", "address2": "Apt 4B", "city": "Dallas", "stateProvinceRegion": "TX", "country": "US", "postalCode": "76034" } } } - lang: javascript label: Create Bank Funding Source source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; var requestBody = { routingNumber: "222222226", accountNumber: "123456789", bankAccountType: "checking", name: "Jane Doe's Checking", }; dwolla .post(`${customerUrl}/funding-sources`, requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31' - lang: javascript label: Create Debit Card Funding Source source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; var requestBody = { _links: { exchange: { href: "https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04" } }, name: "My Visa Debit Card", cardDetails: { firstName: "Jane", lastName: "Doe", billingAddress: { address1: "123 Main St", address2: "Apt 4B", city: "Dallas", stateProvinceRegion: "TX", country: "US", postalCode: "76034" } } }; dwolla .post(`${customerUrl}/funding-sources`, requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012' - lang: python label: Create Bank Funding Source source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { 'routingNumber': '222222226', 'accountNumber': '123456789', 'bankAccountType': 'checking', 'name': 'Jane Doe's Checking' } customer = app_token.post('%s/funding-sources' % customer_url, request_body) customer.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31' - lang: python label: Create Debit Card Funding Source source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { '_links': { 'exchange': { 'href': 'https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04' } }, 'name': 'My Visa Debit Card', 'cardDetails': { 'firstName': 'Jane', 'lastName': 'Doe', 'billingAddress': { 'address1': '123 Main St', 'address2': 'Apt 4B', 'city': 'Dallas', 'stateProvinceRegion': 'TX', 'country': 'US', 'postalCode': '76034' } } } customer = app_token.post('%s/funding-sources' % customer_url, request_body) customer.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012' - lang: php label: Create Bank Funding Source source: | createCustomerFundingSource([ "routingNumber" => "222222226", "accountNumber" => "123456789", "bankAccountType" => "checking", "name" => "Jane Doe's Checking" ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31" ?> - lang: php label: Create Debit Card Funding Source source: | createCustomerFundingSource([ "_links" => [ "exchange" => [ "href" => "https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04" ] ], "name" => "My Visa Debit Card", "cardDetails" => [ "firstName" => "Jane", "lastName" => "Doe", "billingAddress" => [ "address1" => "123 Main St", "address2" => "Apt 4B", "city" => "Dallas", "stateProvinceRegion" => "TX", "country" => "US", "postalCode" => "76034" ] ] ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012" ?> - lang: ruby label: Create Bank Funding Source source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { routingNumber: '222222226', accountNumber: '123456789', bankAccountType: 'checking', name: 'Jane Doe's Checking' } funding_source = app_token.post "#{customer_url}/funding-sources", request_body funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31" - lang: ruby label: Create Debit Card Funding Source source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { _links: { exchange: { href: 'https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04' } }, name: 'My Visa Debit Card', cardDetails: { firstName: 'Jane', lastName: 'Doe', billingAddress: { address1: '123 Main St', address2: 'Apt 4B', city: 'Dallas', stateProvinceRegion: 'TX', country: 'US', postalCode: '76034' } } } funding_source = app_token.post "#{customer_url}/funding-sources", request_body funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012" - lang: bash label: Create Virtual Account Number (VAN) source: | POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "name": "My First VAN", "type": "virtual", "bankAccountType": "checking" } - lang: bash label: Create Funding Source via Exchange source: | POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "exchange": { "href": "https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65" } }, "bankAccountType": "checking", "name": "My Bank Account" } - lang: javascript label: Create Virtual Account Number (VAN) source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; var requestBody = { name: "My First VAN", type: "virtual", bankAccountType: "checking", }; dwolla .post(`${customerUrl}/funding-sources`, requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/fc84d628-f694-47e8-8d57-0d5872a81afd' - lang: javascript label: Create Funding Source via Exchange source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; var requestBody = { _links: { exchange: { href: "https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65" } }, bankAccountType: "checking", name: "My Bank Account" }; dwolla .post(`${customerUrl}/funding-sources`, requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31' - lang: python label: Create Virtual Account Number (VAN) source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { 'name': 'My First VAN', 'type': 'virtual', 'bankAccountType': 'checking' } customer = app_token.post('%s/funding-sources' % customer_url, request_body) customer.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/fc84d628-f694-47e8-8d57-0d5872a81afd' - lang: python label: Create Funding Source via Exchange source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { '_links': { 'exchange': { 'href': 'https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65' } }, 'bankAccountType': 'checking', 'name': 'My Bank Account' } customer = app_token.post('%s/funding-sources' % customer_url, request_body) customer.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31' - lang: php label: Create Virtual Account Number (VAN) source: | createCustomerFundingSource([ "name" => "My First VAN", "type" => "virtual", "bankAccountType" => "checking" ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/fc84d628-f694-47e8-8d57-0d5872a81afd" ?> - lang: php label: Create Funding Source via Exchange source: | createCustomerFundingSource([ "_links" => [ "exchange" => [ "href" => "https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65" ] ], "bankAccountType" => "checking", "name" => "My Bank Account" ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31" ?> - lang: ruby label: Create Virtual Account Number (VAN) source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { name: 'My First VAN', type: 'virtual', bankAccountType: 'checking' } funding_source = app_token.post "#{customer_url}/funding-sources", request_body funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/fc84d628-f694-47e8-8d57-0d5872a81afd" - lang: ruby label: Create Funding Source via Exchange source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { _links: { exchange: { href: 'https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65' } }, bankAccountType: 'checking', name: 'My Bank Account' } funding_source = app_token.post "#{customer_url}/funding-sources", request_body funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31" parameters: - name: id in: path description: Customer's unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: description: Parameters for creating a funding source required: true content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/CreateCustomerFundingSource' responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '400': description: validation error content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/InactiveExchangeError' - $ref: '#/components/schemas/InvalidExchangeTokenError' - $ref: '#/components/schemas/DuplicateFundingSourceError' - $ref: '#/components/schemas/UnsupportedCardCountryError' - $ref: '#/components/schemas/InvalidTokenError' - $ref: '#/components/schemas/MaximumCardsExceededError' - $ref: '#/components/schemas/CardMissingRequiredFieldsError' '403': description: forbidden content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to create funding source. '404': description: not found content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Customer ID not found. Check Customer ID. /funding-sources/{id}: get: tags: - funding sources summary: Retrieve a funding source description: Returns detailed information for a specific funding source, including its type, status, and verification details. Supports bank accounts (via Open Banking), debit card funding sources, and Dwolla balance (verified customers only). Debit card funding sources include masked card details such as brand, last four digits, expiration date, and cardholder name. operationId: getFundingSource x-speakeasy-group: fundingSources x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var fundingSourceUrl = "https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31"; dwolla.get(fundingSourceUrl).then((res) => res.body.name); // => "Test checking account" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31' funding_source = app_token.get(funding_source_url) funding_source.body['name'] # => 'Test checking account' - lang: php source: | id($fundingSourceUrl); $fundingSource->name; # => "Test checking account" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31' funding_source = app_token.get funding_source_url funding_source.name # => "Test checking account" parameters: - name: id in: path description: Funding source unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/FundingSource' examples: standard_bank_account: summary: Standard bank account value: _links: self: href: https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31 type: application/vnd.dwolla.v1.hal+json resource-type: funding-source id: 49dbaa24-1580-4b1c-8b58-24e26656fa31 status: verified type: bank bankAccountType: checking name: Test checking account created: '2022-07-23T00:18:21.419Z' removed: false channels: - ach bankName: SANDBOX TEST BANK fingerprint: 5012989b55af15400e8102f95d2ec5e7ce3aef45c01613280d80a236dd8d6c settlement_account: summary: Card network settlement account value: _links: self: href: https://api-sandbox.dwolla.com/funding-sources/12345678-1234-1234-1234-123456789012 type: application/vnd.dwolla.v1.hal+json resource-type: funding-source id: 12345678-1234-1234-1234-123456789012 status: unverified type: bank bankAccountType: checking name: Checkout.com Settlement Account created: '2024-01-15T10:30:00.000Z' removed: false channels: - ach - real-time-payments bankName: ABC Bank fingerprint: 4cf31392f678cb26c62b75096e1a09d4465a801798b3d5c3729de44a4f54c794 bankUsageType: card-network card_funding_source: summary: Debit card funding source value: _links: self: href: https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012 type: application/vnd.dwolla.v1.hal+json resource-type: funding-source transfer-to-balance: href: https://api-sandbox.dwolla.com/transfers type: application/vnd.dwolla.v1.hal+json resource-type: transfer remove: href: https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012 type: application/vnd.dwolla.v1.hal+json resource-type: funding-source customer: href: https://api-sandbox.dwolla.com/customers/91f059e7-fac6-4677-bee1-49057a6e528f type: application/vnd.dwolla.v1.hal+json resource-type: customer transfer-receive: href: https://api-sandbox.dwolla.com/transfers type: application/vnd.dwolla.v1.hal+json resource-type: transfer id: 12fb2f3c-39c7-40cf-99e2-b0311ba39261 status: verified type: card name: My Visa Debit Card created: '2025-12-10T18:02:47.985Z' removed: false channels: [] fingerprint: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2 cardDetails: brand: VISA lastFour: '1519' expirationMonth: 10 expirationYear: 2027 nameOnCard: Jane Doe bin: '40247644' billingAddress: address1: 552 test city: Des Moines stateProvinceRegion: IA country: US postalCode: '50310' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Funding source not found. post: tags: - funding sources summary: Update or remove a funding source description: Updates a bank funding source's details or soft deletes it. When updating, you can change the name (any status) or modify routing/account numbers and account type (unverified status only). When removing, the funding source is soft deleted and can still be accessed but marked as removed. operationId: updateOrRemoveFundingSource x-speakeasy-group: fundingSources x-speakeasy-name-override: updateOrRemove x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "name": "Test Checking - 1234" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var fundingSourceUrl = "https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c"; var requestBody = { name: "Test Checking - 1234", }; dwolla.post(fundingSourceUrl, requestBody).then((res) => res.body.name); // => "Test Checking - 1234" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c' request_body = { 'name': 'Test Checking - 1234' } funding_source = app_token.post(funding_source_url, request_body) funding_source.body['name'] # => 'Test Checking - 1234' - lang: php source: | /** * No example for this language yet. Coming soon. **/ - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c' request_body = { "name" => "Test Checking - 1234", } funding_source = app_token.post "#{funding_source_url}", request_body funding_source.name # => "Test Checking - 1234" parameters: - name: id in: path description: Funding source unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters to update a customer funding source content: application/json: schema: oneOf: - $ref: '#/components/schemas/UpdateUnverifiedBank' - $ref: '#/components/schemas/UpdateVerifiedBank' - $ref: '#/components/schemas/RemoveBank' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object '400': description: validation error headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: validationError message: type: string example: Only funding sources of type='bank' can be updated. '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: InvalidResourceState message: type: string example: A removed bank cannot be updated. /funding-sources/{id}/micro-deposits: get: tags: - funding sources summary: Retrieve micro-deposits details description: Returns the status and details of micro-deposits for a funding source to check verification eligibility. Includes deposit status (pending, processed, failed), creation timestamp, and failure details with ACH return codes if deposits failed. Use this endpoint to determine when micro-deposits are ready for verification. operationId: getMicroDeposits x-speakeasy-group: fundingSources.microDeposits x-speakeasy-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c/micro-deposits Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var fundingSourceUrl = "https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c"; dwolla.get(`${fundingSourceUrl}/micro-deposits`).then((res) => res.body.status); // => "failed" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c' funding_source = app_token.get('%s/micro-deposits' % funding_source_url) funding_source.body['status'] # => 'failed' - lang: php source: | verifyMicroDepositsExist($fundingSourceUrl); $fundingSource->status; # => "failed" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c' funding_source = app_token.get "#{funding_source_url}/micro-deposits" funding_source.status # => "failed" parameters: - name: id in: path description: The ID of the FS that previously had micro-deposits initiated required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' created: type: string format: date-time example: '2022-12-30T20:56:53.000Z' status: type: string example: failed failure: type: object properties: code: type: string example: R03 description: type: string example: No Account/Unable to locate account '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - funding sources summary: Initiate or Verify micro-deposits description: Handles micro-deposit bank verification process. Make a request without a request body to initiate two small deposits to the customer's bank account. Include deposit amounts to verify the received values and complete verification. operationId: initiateOrVerifyMicroDeposits x-speakeasy-group: fundingSources.microDeposits x-speakeasy-name-override: initiateOrVerify x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/funding-sources/e52006c3-7560-4ff1-99d5-b0f3a6f4f909/micro-deposits Authorization: Bearer 8tJjM7iTjujLthkbVPMUcHLqMNw4uv5kG712g9j1RRBHplGpwo Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json - lang: javascript source: | var fundingSourceUrl = "https://api-sandbox.dwolla.com/funding-sources/e52006c3-7560-4ff1-99d5-b0f3a6f4f909"; dwolla.post(`${fundingSourceUrl}/micro-deposits`); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/e52006c3-7560-4ff1-99d5-b0f3a6f4f909' app_token.post('%s/micro-deposits' % funding_source_url) - lang: php source: | microDeposits(null, $fundingSourceUrl); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/e52006c3-7560-4ff1-99d5-b0f3a6f4f909' app_token.post "#{funding_source_url}/micro-deposits" parameters: - name: id in: path description: The ID of the FS to initiate or verify micro-deposit required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: false description: | Optional request body for verifying micro-deposits. - If omitted: Endpoint will initiate micro-deposits - If provided: Must contain micro-deposit amounts for verification content: application/json: schema: oneOf: - type: - object - 'null' title: InitiateMicroDeposits description: No request body is required for initiating micro-deposits. - $ref: '#/components/schemas/VerifyMicroDeposits' description: Required request body for verifying micro-deposits responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object description: Response for microdeposits operations (initiation and verification) properties: _links: type: object properties: self: type: object properties: href: type: string format: uri example: https://api-sandbox.dwolla.com/funding-sources/2e446d1b-fb3c-42a0-9691-5d1d6a4dbbf0/micro-deposits type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: micro-deposits '201': description: created headers: Location: $ref: '#/components/headers/Location' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: InvalidResourceState message: type: string example: Bank already verified. '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: The requested resource was not found. /funding-sources/{id}/balance: get: tags: - funding sources summary: Retrieve funding source balance description: Returns the current balance for a specific funding source. For bank accounts, includes available and closing balances; for Dwolla balance, includes balance and total amounts; for settlement accounts (bankUsageType = card-network), includes available balance only. Supports bank accounts (via Open Banking), Dwolla balance (verified customers only), and settlement accounts for card network processing. operationId: getFundingSourceBalance x-speakeasy-group: fundingSources.balance x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/funding-sources/c2eb3f03-1b0e-4d18-a4a2-e552cc111418/balance Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var fundingSourceUrl = "https://api-sandbox.dwolla.com/funding-sources/c2eb3f03-1b0e-4d18-a4a2-e552cc111418"; dwolla.get(`${fundingSourceUrl}/balance`).then((res) => res.body.balance.value); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/c2eb3f03-1b0e-4d18-a4a2-e552cc111418' funding_source = app_token.get('%s/balance' % funding_source_url) - lang: php source: | getBalance($fundingSourceUrl); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/c2eb3f03-1b0e-4d18-a4a2-e552cc111418' funding_source = app_token.get "#{funding_source_url}/balance" parameters: - name: id in: path description: ID of funding source to retrieve the balance for required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - title: Dwolla Balance Response description: Response for retrieving balance of a Dwolla Balance funding source type: object required: - _links - balance - total - lastUpdated properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' balance: type: object properties: value: type: string example: '4616.87' currency: type: string example: USD total: type: object properties: value: type: string example: '4616.87' currency: type: string example: USD lastUpdated: type: string example: '2017-04-18T15:20:25.880Z' - title: Bank Balance Response description: Response for retrieving balance of a bank account verified through Open Banking type: object required: - _links - available - closing - lastUpdated properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/funding-sources/42f48a64-2a9b-40df-9777-603ed2fe2764/balance type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: balance funding-source: type: object properties: href: type: string example: https://api.dwolla.com/funding-sources/42f48a64-2a9b-40df-9777-603ed2fe2764 type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: funding-source available: type: object properties: value: type: string example: '542.00' currency: type: string example: USD closing: type: object properties: value: type: string example: '542.00' currency: type: string example: USD lastUpdated: type: string example: '2024-09-09T16:39:14.219Z' - title: Settlement Account Balance Response description: Response for retrieving balance of a settlement account with bankUsageType = card-network type: object required: - _links - available properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/funding-sources/12345678-1234-1234-1234-123456789012/balance type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: balance funding-source: type: object properties: href: type: string example: https://api.dwolla.com/funding-sources/12345678-1234-1234-1234-123456789012 type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: funding-source available: type: object properties: value: type: string example: '3209.55' currency: type: string example: USD '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Funding source not found. /funding-sources/{id}/ach-routing: get: tags: - funding sources summary: Retrieve VAN account and routing numbers description: Returns the unique account and routing numbers for a Virtual Account Number (VAN) funding source. These numbers can be used by external systems to initiate ACH transactions that pull funds from or push funds to the associated Dwolla balance. operationId: getVanRouting x-speakeasy-group: fundingSources x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/funding-sources/e6d68efb-c49b-43db-8867-e1ca58c6ee8c/ach-routing Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var fundingSourceUrl = "https://api-sandbox.dwolla.com/funding-sources/e6d68efb-c49b-43db-8867-e1ca58c6ee8c/ach-routing"; dwolla.get(fundingSourceUrl).then((res) => res.body.name); // => "Test checking account" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/e6d68efb-c49b-43db-8867-e1ca58c6ee8c/ach-routing' funding_source = app_token.get(funding_source_url) funding_source.body['name'] # => 'Test checking account' - lang: php source: | id($fundingSourceUrl); $fundingSource->name; # => "Test checking account" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/e6d68efb-c49b-43db-8867-e1ca58c6ee8c/ach-routing' funding_source = app_token.get funding_source_url funding_source.name # => "Test checking account" parameters: - name: id in: path description: ID of VAN funding source to retrieve ACH details required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' accountNumber: type: string example: '9619991490430833' routingNumber: type: string example: '084106768' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Funding source not found. /on-demand-authorizations: post: tags: - funding sources summary: Create an on-demand transfer authorization description: Create an on-demand transfer authorization that allows Customers to pre-authorize variable amount ACH transfers from their bank account for future payments. This authorization is used when creating Customer funding sources to enable flexible payment processing. Returns UI text elements including authorization body text and button text for display in your application's bank account addition flow. operationId: createOnDemandTransferAuthorization x-speakeasy-group: fundingSources.onDemandTransferAuthorizations x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/on-demand-authorizations Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388" } }, "bodyText": "I agree that future payments to Company ABC inc. will be processed by the Dwolla payment system from the selected account above. In order to cancel this authorization, I will change my payment settings within my Company ABC inc. account.", "buttonText": "Agree & Continue" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla.post("on-demand-authorizations").then((res) => res.body.buttonText); // => "Agree & Continue" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python on_demand_authorization = app_token.post('on-demand-authorizations') on_demand_authorization.body['buttonText'] # => 'Agree & Continue' - lang: php source: | createAuthorization(); $onDemandAuth->_links["self"]->href; # => "https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby on_demand_authorization = app_token.post "on-demand-authorizations" on_demand_authorization.buttonText # => "Agree & Continue" parameters: - $ref: '#/components/parameters/Accept' responses: '200': description: Ok headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/OnDemandAuthorization' '403': description: 403 Error headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' /transfers: post: tags: - transfers summary: Initiate a transfer description: Initiate a transfer between funding sources from a Dwolla Account or API Customer resource. Supports ACH, Instant Payments (RTP/FedNow), Push-to-Debit Card, and wire transfers with optional expedited clearing, facilitator fees, metadata, and correlation IDs for enhanced traceability. Includes idempotency key support to prevent duplicate transfers and extensive customization options for addenda records and processing channels. Returns the location of the created transfer resource for tracking and management. operationId: initiateTransfer x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/transfers Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "source": { "href": "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4" }, "destination": { "href": "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db" } }, "amount": { "currency": "USD", "value": "1.00" }, "clearing": { "source": "standard", "destination": "next-available" }, "achDetails": { "source": { "addenda": { "values": ["ABC123_AddendaValue"] } }, "destination": { "addenda": { "values": ["ZYX987_AddendaValue"] } } }, "instantDetails": { "destination": { "remittanceData": "ABC_123 Remittance Data" } }, "fees": [ { "_links": { "charge-to": { "href": "https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8" } }, "amount": { "value": "4.00", "currency": "USD" } } ], "metadata": { "key": "value" }, "correlationId": "6d127333-69e9-4c2b-8cae-df850228e130", "processingChannel": { "destination": "instant" } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var requestBody = { _links: { source: { href: "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4", }, destination: { href: "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db", }, }, amount: { currency: "USD", value: "1.00", }, clearing: { source: "standard", destination: "next-available", }, achDetails: { source: { addenda: { values: ["ABC123_AddendaValue"], }, }, destination: { addenda: { values: ["ZYX987_AddendaValue"], }, }, }, instantDetails: { destination: { remittanceData: "ABC_123 Remittance Data", }, }, fees: [ { _links: { "charge-to": { href: "https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8", }, }, amount: { value: "4.00", currency: "USD", }, }, ], metadata: { key: "value", }, correlationId: "6d127333-69e9-4c2b-8cae-df850228e130", processingChannel: { destination: "instant", }, }; dwolla .post("transfers", requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/transfers/0e6b8c1e-7b6e-4b2e-8e2e-1b2e2e2e2e2e' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python request_body = { '_links': { 'source': { 'href': 'https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4' }, 'destination': { 'href': 'https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db' } }, 'amount': { 'currency': 'USD', 'value': '1.00' }, 'clearing': { 'source': 'standard', 'destination': 'next-available' }, 'achDetails': { 'source': { 'addenda': { 'values': ['ABC123_AddendaValue'] } }, 'destination': { 'addenda': { 'values': ['ZYX987_AddendaValue'] } } }, 'instantDetails': { 'destination': { 'remittanceData': 'ABC_123 Remittance Data' } }, 'fees': [ { '_links': { 'charge-to': { 'href': 'https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8' } }, 'amount': { 'value': '4.00', 'currency': 'USD' } } ], 'metadata': { 'key': 'value' }, 'correlationId': '6d127333-69e9-4c2b-8cae-df850228e130', 'processingChannel': { 'destination': 'instant' } } transfer = app_token.post('transfers', request_body) transfer.headers['location'] # => 'https://api-sandbox.dwolla.com/transfers/0e6b8c1e-7b6e-4b2e-8e2e-1b2e2e2e2e2e' - lang: php source: | create([ '_links' => [ 'source' => [ 'href' => 'https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4', ], 'destination' => [ 'href' => 'https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db', ] ], 'amount' => [ 'currency' => 'USD', 'value' => '1.00' ], 'clearing' => [ 'source' => 'standard', 'destination' => 'next-available' ], 'achDetails' => [ 'source' => [ 'addenda' => [ 'values' => ['ABC123_AddendaValue'] ] ], 'destination' => [ 'addenda' => [ 'values' => ['ZYX987_AddendaValue'] ] ] ], 'instantDetails' => [ 'destination' => [ 'remittanceData' => 'ABC_123 Remittance Data' ] ], 'fees' => [ [ '_links' => [ 'charge-to' => [ 'href' => 'https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8', ] ], 'amount' => [ 'value' => '4.00', 'currency' => 'USD' ] ] ], 'metadata' => [ 'key' => 'value' ], 'correlationId' => '6d127333-69e9-4c2b-8cae-df850228e130', 'processingChannel' => [ 'destination' => 'instant' ] ]); $transfer; # => "https://api-sandbox.dwolla.com/transfers/0e6b8c1e-7b6e-4b2e-8e2e-1b2e2e2e2e2e" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby request_body = { :_links => { :source => { :href => "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4" }, :destination => { :href => "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db" } }, :amount => { :currency => "USD", :value => "1.00" }, :clearing => { :source => "standard", :destination => "next-available" }, :achDetails => { :source => { :addenda => { :values => ["ABC123_AddendaValue"] } }, :destination => { :addenda => { :values => ["ZYX987_AddendaValue"] } } }, :instantDetails => { :destination => { :remittanceData => "ABC_123 Remittance Data" } }, :fees => [ { :_links => { :"charge-to" => { :href => "https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8" } }, :amount => { :value => "4.00", :currency => "USD" } } ], :metadata => { :key => "value" }, :correlationId => "6d127333-69e9-4c2b-8cae-df850228e130", :processingChannel => { :destination => "instant" } } transfer = app_token.post "transfers", request_body transfer.response_headers[:location] # => "https://api-sandbox.dwolla.com/transfers/0e6b8c1e-7b6e-4b2e-8e2e-1b2e2e2e2e2e" parameters: - $ref: '#/components/parameters/Accept' - name: Idempotency-Key schema: type: string in: header example: 19051a62-3403-11e6-ac61-9e71128cae77 requestBody: required: true description: Parameters to initiate a transfer content: application/json: schema: required: - _links - amount type: object properties: _links: type: object properties: source: type: object properties: href: type: string destination: type: object properties: href: type: string amount: $ref: '#/components/schemas/TransferAmount' metadata: type: object fees: type: array items: type: object properties: _links: type: object properties: charge-to: type: object properties: href: type: string amount: $ref: '#/components/schemas/TransferAmount' clearing: type: object properties: source: type: string destination: type: string achDetails: type: object properties: source: type: object properties: addenda: type: object properties: values: type: array items: type: string destination: type: object properties: addenda: type: object properties: values: type: array items: type: string rtpDetails: type: object description: Real-Time Payments (RTP) specific transaction details. properties: destination: type: object description: RTP details for the destination properties: remittanceData: type: string description: 'Remittance information for Real-Time Payments, providing context about the payment purpose. Acceptable characters: alphanumeric (0-9, a-z, A-Z), space, and special characters (#,.''&/-@!$%*()_+={}|:;`[]^~\")' maxLength: 140 pattern: '^[0-9a-zA-Z #,.''&/\-@!$%*()_+={}|:;`\[\]\^\~\\"]+$' example: ABC_123 Remittance Data instantDetails: type: object description: Instant Payments specific transaction details for both RTP and FedNow networks. properties: destination: type: object description: Instant payment details for the destination properties: remittanceData: type: string description: 'Remittance information for Instant Payments (RTP/FedNow), providing context about the payment purpose. Acceptable characters: alphanumeric (0-9, a-z, A-Z), space, and special characters (#,.''&/-@!$%*()_+={}|:;`[]^~\")' maxLength: 140 pattern: '^[0-9a-zA-Z #,.''&/\-@!$%*()_+={}|:;`\[\]\^\~\\"]+$' example: ABC_123 Remittance Data correlationId: type: string processingChannel: type: object properties: destination: type: string enum: - real-time-payments - instant example: instant responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/SourceNotFoundError' - $ref: '#/components/schemas/ReceiverNotFoundError' - $ref: '#/components/schemas/InvalidSourceFundingSourceError' - $ref: '#/components/schemas/SenderRestrictedError' - $ref: '#/components/schemas/ReceiverRestrictedError' - $ref: '#/components/schemas/InvalidMetadataError' - $ref: '#/components/schemas/OperationBlockedError' - $ref: '#/components/schemas/InvalidAmountLimitError' - $ref: '#/components/schemas/CannotParseAmountError' - $ref: '#/components/schemas/InsufficientFundsError' - $ref: '#/components/schemas/FacilitatorFeeAccountNotFoundError' - $ref: '#/components/schemas/FacilitatorFeeSumTooLargeError' - $ref: '#/components/schemas/FacilitatorFeeBelowMinimumError' - $ref: '#/components/schemas/HighRiskError' - $ref: '#/components/schemas/IncompatibleHoldingsError' - $ref: '#/components/schemas/DirectAccountWithoutBankError' - $ref: '#/components/schemas/SourceSameAsDestinationError' - $ref: '#/components/schemas/InvalidFacilitatorError' - $ref: '#/components/schemas/InvalidFacilitatorFeeCollectFromError' - $ref: '#/components/schemas/InvalidFacilitatorFeeCollectFromCombinationError' - $ref: '#/components/schemas/InvalidDestinationFundingSourceError' - $ref: '#/components/schemas/InvalidOrRemovedCardDestinationError' - $ref: '#/components/schemas/InvalidFacilitatorFeeAmountError' - $ref: '#/components/schemas/WeeklyReceiveLimitReachedError' - $ref: '#/components/schemas/InvalidDestinationClearingTypeError' - $ref: '#/components/schemas/InvalidAmountForDestinationClearingTypeError' - $ref: '#/components/schemas/InvalidCorrelationIdError' - $ref: '#/components/schemas/SourceAddendaMaxLengthError' - $ref: '#/components/schemas/DestinationAddendaMaxLengthError' - $ref: '#/components/schemas/AchAddendaEntriesNotEnabledForAccountError' - $ref: '#/components/schemas/PointOfSaleAddendaEntriesNotEnabledForAccountError' - $ref: '#/components/schemas/IncompatibleAddendaEntriesError' - $ref: '#/components/schemas/InvalidPointOfSaleAddendaIdentificationCodeError' - $ref: '#/components/schemas/InvalidPointOfSaleAddendaSerialNumberError' - $ref: '#/components/schemas/InvalidPointOfSaleAddendaDateError' - $ref: '#/components/schemas/InvalidPointOfSaleAddendaAddressError' - $ref: '#/components/schemas/InvalidPointOfSaleAddendaCityError' - $ref: '#/components/schemas/InvalidPointOfSaleAddendaStateError' - $ref: '#/components/schemas/TransferExpiredForFeeError' - $ref: '#/components/schemas/InvalidFeeOdfiError' - $ref: '#/components/schemas/InvalidSourceBankAccountTypeError' - $ref: '#/components/schemas/InvalidDestinationBankAccountTypeError' - $ref: '#/components/schemas/IncompatibleSourceAndDestinationTypesError' - $ref: '#/components/schemas/SourceNotCardNetworkSettlementError' - $ref: '#/components/schemas/CardSourceNotAllowedError' - $ref: '#/components/schemas/IncompatibleSourceForRtpDestinationError' - $ref: '#/components/schemas/InvalidAmountForDestinationProcessingChannelError' - $ref: '#/components/schemas/RtpFacilitatorFeeNotSupportedError' - $ref: '#/components/schemas/RtpUnverifiedSenderNotSupportedError' - $ref: '#/components/schemas/RtpPersonalToPersonalNotSupportedError' - $ref: '#/components/schemas/DestinationProcessingChannelNotSupportedError' - $ref: '#/components/schemas/DestinationRemittanceDataMaxLengthError' - $ref: '#/components/schemas/WithdrawInvalidAmountError' - $ref: '#/components/schemas/WithdrawInvalidFundingSourceError' - $ref: '#/components/schemas/WithdrawAccountRestrictedError' - $ref: '#/components/schemas/WithdrawInvalidAmountForClearingTypeError' - $ref: '#/components/schemas/WithdrawInvalidWireBeneficiaryLocalityError' - $ref: '#/components/schemas/WithdrawInvalidWireBeneficiaryRegionError' - $ref: '#/components/schemas/WithdrawInvalidWireBeneficiaryCountryError' - $ref: '#/components/schemas/WithdrawInvalidWireOriginatorToBeneficiaryError' - $ref: '#/components/schemas/WithdrawProcessingChannelNotSupportedError' - $ref: '#/components/schemas/WithdrawRtpUnverifiedSenderNotSupportedError' - $ref: '#/components/schemas/WithdrawRtpPersonalWithdrawalNotSupportedError' - $ref: '#/components/schemas/DepositAccountRestrictedError' - $ref: '#/components/schemas/WireInvalidImadError' - $ref: '#/components/schemas/WireAccountRestrictedError' - $ref: '#/components/schemas/WireNotEnabledError' - $ref: '#/components/schemas/WireAccountNotFoundError' - $ref: '#/components/schemas/PrefundingSourceNotAllowedError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/InvalidAttemptToFacilitateFundsError' - $ref: '#/components/schemas/InvalidAttemptToPayInFundsError' - $ref: '#/components/schemas/InvalidAttemptToPayOutFundsError' - $ref: '#/components/schemas/RtpAccountSettingNotEnabledError' '429': description: Too Many Requests headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/TooManyRequestsErrorError' /transfers/{id}: get: tags: - transfers summary: Retrieve a transfer description: Retrieve detailed information for a specific transfer by its unique identifier belonging to an Account or Customer. Returns transfer status, amount, creation date, clearing details, and links to source and destination funding sources for complete transaction tracking. Includes cancellation links when applicable and references to related funding transfers. Essential for monitoring transfer lifecycle and transaction reconciliation. operationId: getTransfer x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/transfers/15c6bcce-46f7-e811-8112-e8dd3bececa8 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var transferUrl = "https://api-sandbox.dwolla.com/transfers/15c6bcce-46f7-e811-8112-e8dd3bececa8"; dwolla.get(transferUrl).then((res) => res.body.status); // => 'pending' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python transfer_url = 'https://api-sandbox.dwolla.com/transfers/15c6bcce-46f7-e811-8112-e8dd3bececa8' transfer = account_token.get(transfer_url) transfer.body['status'] # => 'pending' - lang: php source: | byId($transferUrl); $transfer->status; # => "pending" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby transfer_url = 'https://api.dwolla.com/transfers/15c6bcce-46f7-e811-8112-e8dd3bececa8' transfer = app_token.get transfer_url transfer.status # => "pending" parameters: - name: id in: path description: ID of transfer to be retrieved required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Transfer' '404': description: 404 Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - transfers summary: Cancel a transfer description: Cancel a pending transfer by setting its status to cancelled. Only transfers in pending status can be cancelled before processing begins. Returns the updated transfer resource with cancelled status. Use this endpoint to stop a bank transfer from further processing. operationId: cancelTransfer x-speakeasy-name-override: cancel x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/transfers/3d48c13a-0fc6-e511-80de-0aa34a9b2388 Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "status": "cancelled" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var transferUrl = "https://api-sandbox.dwolla.com/transfers/3d48c13a-0fc6-e511-80de-0aa34a9b2388"; var requestBody = { status: "cancelled", }; dwolla.post(transfer_url, requestBody).then((res) => res.body.status); // => "cancelled" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python transfer_url = 'https://api-sandbox.dwolla.com/transfers/3d48c13a-0fc6-e511-80de-0aa34a9b2388' request_body = { 'status': 'cancelled' } transfer = app_token.post(transfer_url, request_body) transfer.body['status'] # => 'cancelled' - lang: php source: | update([ 'status' => 'cancelled', ], $transferUrl); $transfer->status; # => "cancelled" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby transfer_url = 'https://api-sandbox.dwolla.com/transfers/3d48c13a-0fc6-e511-80de-0aa34a9b2388' request_body = { "status" => "cancelled", } transfer = app_token.post "#{transfer_url}", request_body transfer.status # => "cancelled" parameters: - name: id in: path description: ID of transfer required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters to cancel a transfer content: application/json: schema: required: - status type: object properties: status: type: string const: cancelled responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object '400': description: 400 Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/BadRequestError' - $ref: '#/components/schemas/StatusInvalidError' - $ref: '#/components/schemas/StatusNotAllowedError' '404': description: 404 Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /customers/{id}/transfers: get: tags: - transfers summary: List and search transfers for a customer description: Retrieve and search transfers for a specific Customer with comprehensive filtering and pagination support. Supports searching by customer details (name, email, business name), amount ranges, date ranges, transfer status, and correlation IDs for enhanced transaction discovery. Returns paginated transfer results including status, amounts, metadata, and links to source and destination funding sources. Use this endpoint for transaction history analysis and reconciliation purposes. operationId: listCustomerTransfers x-speakeasy-group: customers.transfers x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/33e56307-6754-41cb-81e2-23a7f1072295/transfers Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "http://api-sandbox.dwolla.com/customers/33e56307-6754-41cb-81e2-23a7f1072295"; dwolla .get(`${customerUrl}/transfers`) .then((res) => res.body._embedded["transfers"][0].status); // => "pending" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'http://api-sandbox.dwolla.com/customers/33e56307-6754-41cb-81e2-23a7f1072295' transfers = app_token.get('%s/transfers' % customer_url) transfers.body['_embedded']['transfers'][0]['status'] # => 'pending' - lang: php source: | getCustomerTransfers($customerUrl); $transfers->_embedded->{'transfers'}[0]->status; # => "pending" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'http://api-sandbox.dwolla.com/customers/33e56307-6754-41cb-81e2-23a7f1072295' transfers = app_token.get "#{customer_url}/transfers" transfers._embedded['transfers'][0].status # => "pending" parameters: - name: id in: path description: Customer's unique identifier required: true schema: type: string - name: search in: query description: A string to search on fields `firstName`, `lastName`, `email`, `businessName` required: false schema: type: string - name: startAmount in: query description: Only include transactions with an amount equal to or greater than `startAmount` required: false schema: type: string - name: endAmount in: query description: Only include transactions with an amount equal to or less than `endAmount` required: false schema: type: string - name: startDate in: query description: Only include transactions created after this date. ISO-8601 format `YYYY-MM-DD` required: false schema: type: string - name: endDate in: query description: Only include transactions created before this date. ISO-8601 format `YYYY-MM-DD` required: false schema: type: string - name: status in: query description: Filter on transaction status. Possible values are `pending`, `processed`, `failed`, or `cancelled` required: false schema: type: string - name: correlationId in: query description: A string value to search on if `correlationId` was specified for a transaction required: false schema: type: string - name: limit in: query description: Number of search results to return. Defaults to 25 required: false schema: type: string - name: offset in: query description: Number of search results to skip. Use for pagination required: false schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Transfers' '404': description: 404 Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /transfers/{id}/fees: get: tags: - transfers summary: List fees for a transfer description: Retrieve detailed fee information for a specific transfer by its unique identifier. Returns the total number of fees and individual fee transaction details including amounts, status, and links to source and destination accounts. operationId: listTransferFees x-speakeasy-group: transfers.fees x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388/fees Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var transferUrl = "https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388"; dwolla.get(`${transferUrl}/fees`).then((res) => res.body.total); // => 2 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python transfer_url = 'https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388' fees = app_token.get('%s/fees' % transfer_url) fees.body['total'] # => 2 - lang: php source: | getFeesBySource($transferUrl); $transferFees->total; # => "2" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby transfer_url = 'https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388' fees = app_token.get "#{transfer_url}/fees" fees.total # => 2 parameters: - name: id in: path description: ID of transfer to retrieve fees for required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: transactions: type: array items: type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: 416a2857-c887-4cca-bd02-8c3f75c4bb0e status: type: string example: pending amount: type: object properties: value: type: string example: '2.00' currency: type: string example: USD created: type: string format: date-time example: '2016-02-22T20:46:38.777Z' total: type: integer format: int32 example: 1 '404': description: 404 Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /transfers/{id}/failure: get: tags: - transfers summary: Retrieve a transfer failure reason description: Retrieve detailed failure information for a failed bank or VAN transfer including the ACH return code, description, and explanation. Returns failure details with links to the failed funding source and associated Customer for comprehensive error analysis. Available only for transfers with failure status and accessed through the failure link from transfer retrieval. Critical for troubleshooting payment failures and understanding ACH return reasons. operationId: getTransferFailureReason x-speakeasy-group: transfers.failure x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/transfers/8997ebed-69be-e611-80ea-0aa34a9b2388/failure Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var transferUrl = "https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388"; dwolla.get(`${transferUrl}/failure`).then((res) => res.body.code); // => 'R01' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python transfer_url = 'https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388' failure = app_token.get('%s/failure' % transfer_url) failure.body['code'] # => 'R01' - lang: php source: | failureById($transferUrl); $transferFailure->code; # => "R01" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby transfer_url = 'https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388' failure = app_token.get "#{transfer_url}/failure" failure.code # => "R01" parameters: - name: id in: path description: Transfer unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object required: - code - description properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' code: type: string example: R03 description: type: string example: No Account/Unable to Locate Account explanation: type: string example: The account number does not correspond to the individual identified in the entry or a valid account. '403': description: 403 Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: 404 Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /mass-payments: post: tags: - mass payments summary: Initiate a mass payment description: Create a mass payment containing up to 5,000 individual payment items from a Dwolla Main Account or Verified Customer funding source. Supports optional metadata, correlation IDs for traceability, deferred processing, and expedited transfer options including same-day ACH clearing. Returns the location of the created mass payment resource with a unique identifier for tracking and management. operationId: initiateMassPayment x-speakeasy-group: massPayments x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/mass-payments Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY Idempotency-Key: 19051a62-3403-11e6-ac61-9e71128cae77 { "_links": { "source": { "href": "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4" } }, "achDetails": { "source": { "addenda": { "values": ["ABC123_AddendaValue"] } } }, "clearing": { "source": "next-available" }, "items": [ { "_links": { "destination": { "href": "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db" } }, "amount": { "currency": "USD", "value": "1.00" }, "clearing": { "destination": "next-available" }, "metadata": { "payment1": "payment1" }, "achDetails": { "destination": { "addenda": { "values": ["ZYX987_AddendaValue"] } } }, "correlationId": "ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841", "processingChannel": { "destination": "instant" } }, { "_links": { "destination": { "href": "https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd" } }, "amount": { "currency": "USD", "value": "5.00" }, "clearing": { "destination": "next-available" }, "metadata": { "payment2": "payment2" }, "achDetails": { "destination": { "addenda": { "values": ["ZYX987_AddendaValue"] } } } } ], "metadata": { "batch1": "batch1" }, "correlationId": "6d127333-69e9-4c2b-8cae-df850228e130" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var requestBody = { _links: { source: { href: "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4", }, }, achDetails: { source: { addenda: { values: ["ABC123_AddendaValue"], }, }, }, clearing: { source: "standard", }, items: [ { _links: { destination: { href: "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db", }, }, amount: { currency: "USD", value: "1.00", }, clearing: { destination: "next-available", }, metadata: { payment1: "payment1", }, correlationId: "ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841", achDetails: { destination: { addenda: { values: ["ABC123_AddendaValue"], }, }, }, processingChannel: { destination: "instant", }, }, { _links: { destination: { href: "https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd", }, }, amount: { currency: "USD", value: "5.00", }, clearing: { destination: "next-available", }, metadata: { payment2: "payment2", }, achDetails: { destination: { addenda: { values: ["ABC123_AddendaValue"], }, }, }, }, ], metadata: { batch1: "batch1", }, correlationId: "6d127333-69e9-4c2b-8cae-df850228e130", }; dwolla .post("mass-payments", requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/mass-payments/cf1e9e00-09cf-43da-b8b5-a43b3f6192d4' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python request_body = { '_links': { 'source': { 'href': 'https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4' } }, 'achDetails': { 'addenda': { 'values': ['ABC123_AddendaValue'] } }, 'clearing': { 'source': 'standard' }, 'items': [ { '_links': { 'destination': { 'href': 'https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db' } }, 'amount': { 'currency': 'USD', 'value': '1.00' }, 'clearing': { 'destination': 'next-available' }, 'metadata': { 'payment1': 'payment1' }, 'correlationId': 'ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841', 'achDetails': { 'addenda': { 'values': ['ABC123_AddendaValue'] } }, 'processingChannel': { 'destination': 'instant' } }, { '_links': { 'destination': { 'href': 'https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd' } }, 'amount': { 'currency': 'USD', 'value': '5.00' }, 'clearing': { 'destination': 'next-available' }, 'metadata': { 'payment2': 'payment2' }, 'achDetails': { 'addenda': { 'values': ['ABC123_AddendaValue'] } } } ], 'metadata': { 'batch1': 'batch1' }, 'correlationId': '6d127333-69e9-4c2b-8cae-df850228e130' } mass_payment = app_token.post('mass-payments', request_body) mass_payment.headers['location'] # => 'https://api-sandbox.dwolla.com/mass-payments/cf1e9e00-09cf-43da-b8b5-a43b3f6192d4' - lang: php source: | create([ '_links' => [ 'source' => [ 'href' => 'https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4', ], ], 'achDetails' => [ 'source' => [ 'addenda' => [ 'values' => ['ABC123_AddendaValue'] ] ] ], 'clearing' => [ 'source' => 'standard' ], 'items' => [ [ '_links' => [ 'destination' => [ 'href' => 'https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db', ], ], 'amount' => [ 'currency' => 'USD', 'value' => '1.00', ], 'clearing' => [ 'destination' => 'next-available' ], 'metadata' => [ 'payment1' => 'payment1', ], 'correlationId' => 'ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841', 'achDetails' => [ 'source' => [ 'addenda' => [ 'values' => ['ABC123_AddendaValue'] ] ] ], 'processingChannel' => [ 'destination' => 'instant' ] ], [ '_links' => [ 'destination' => [ 'href' => 'https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd', ], ], 'amount' => [ 'currency' => 'USD', 'value' => '5.00', ], 'clearing' => [ 'destination' => 'next-available' ], 'metadata' => [ 'payment2' => 'payment2', ], 'achDetails' => [ 'source' => [ 'addenda' => [ 'values' => ['ABC123_AddendaValue'] ] ] ] ], ], 'metadata' => [ 'batch1' => 'batch1', ], 'correlationId' => '6d127333-69e9-4c2b-8cae-df850228e130', ]); $massPayment; # => "https://api-sandbox.dwolla.com/mass-payments/cf1e9e00-09cf-43da-b8b5-a43b3f6192d4" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby request_body = { :_links => { :source => { :href => "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4" } }, :achDetails => { :source => { :addenda => { :values => ["ABC123_AddendaValue"] } } }, :clearing => { :source => "standard" }, :items => [ { :_links => { :destination => { :href => "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db" } }, :amount => { :currency => "USD", :value => "1.00" }, :clearing => { :destination => "next-available" }, :metadata => { :payment1 => "payment1" }, :correlationId => "ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841", :achDetails => { :destination => { :addenda => { :values => ["ABC123_AddendaValue"] } } }, :processingChannel => { :destination => "instant" } }, { :_links => { :destination => { :href => "https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd" } }, :amount => { :currency => "USD", :value => "5.00" }, :clearing => { :destination => "next-available" }, :metadata => { :payment2 => "payment2" }, :achDetails => { :destination => { :addenda => { :values => ["ABC123_AddendaValue"] } } } } ], :metadata => { :batch1 => "batch1" }, :correlationId => "6d127333-69e9-4c2b-8cae-df850228e130" } mass_payment = app_token.post "mass-payments", request_body mass_payment.response_headers[:location] # => "https://api-sandbox.dwolla.com/mass-payments/cf1e9e00-09cf-43da-b8b5-a43b3f6192d4" parameters: - $ref: '#/components/parameters/Accept' - name: Idempotency-Key schema: type: string in: header example: 19051a62-3403-11e6-ac61-9e71128cae77 requestBody: required: true description: Parameters for initiating a mass payment content: application/json: schema: required: - _links - items type: object properties: _links: type: object properties: source: type: object properties: href: type: string example: https://api.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4 items: type: array items: type: object properties: _links: type: object properties: destination: type: object properties: href: type: string example: https://api.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db amount: $ref: '#/components/schemas/TransferAmount' processingChannel: type: object properties: destination: type: string example: real-time-payments metadata: type: object clearing: type: object properties: destination: type: string example: next-available achDetails: type: object properties: destination: type: object properties: addenda: type: object properties: values: type: array items: type: string example: XYZ987_AddendaValue correlationId: type: string example: ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841 status: type: string example: deferred achDetails: type: object properties: source: type: object properties: addenda: type: object properties: values: type: array items: type: string example: ZYX987_AddendaValue clearing: type: object properties: source: type: string example: next-available metadata: type: object correlationId: type: string example: ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841 responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to create mass payment /mass-payments/{id}: get: tags: - mass payments summary: Retrieve a mass payment description: Retrieve detailed information for a mass payment by its unique identifier. Returns the current processing status (pending, processing, or complete), creation date, metadata, and links to the source funding source and payment items. Use this endpoint to monitor mass payment processing progress and determine when to check individual item results. operationId: getMassPayment x-speakeasy-group: massPayments x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var massPaymentUrl = "https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563"; dwolla.get(massPaymentUrl).then((res) => res.body.status); // => 'processing' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563' mass_payment = app_token.get(mass_payment_url) mass_payment.body['status'] # => 'processing' - lang: php source: | byId($massPaymentUrl); $massPayment->status; # => "processing" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby mass_payment_url = "https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563" mass_payment = app_token.get mass_payment_url mass_payment.status # => "processing" parameters: - name: id in: path description: Mass payment unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/MassPayment' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to retrieve mass payment '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Mass payment not found post: tags: - mass payments summary: Update a mass payment description: Update the status of a deferred mass payment to control its processing lifecycle. Set status to `pending` to trigger processing and begin fund transfers, or `cancelled` to permanently cancel the mass payment before processing begins. Only applies to mass payments created with deferred status. Returns the updated mass payment resource with the new status. operationId: updateMassPayment x-speakeasy-group: massPayments x-speakeasy-name-override: update x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/mass-payments/692486f8-29f6-4516-a6a5-c69fd2ce854c Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "status": "pending" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var massPaymentUrl = "https://api-sandbox.dwolla.com/mass-payments/692486f8-29f6-4516-a6a5-c69fd2ce854c"; var requestBody = { status: "pending", }; dwolla.post(massPaymentUrl, requestBody).then((res) => res.body.status); // => "pending" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/692486f8-29f6-4516-a6a5-c69fd2ce854c' request_body = { 'status': 'pending' } mass_payments = app_token.post('mass-payments', request_body) mass_payments.body['status'] # => 'pending' - lang: php source: | /** * No example for this language yet. Coming soon. **/ - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/692486f8-29f6-4516-a6a5-c69fd2ce854c' request_body = { "status" => "pending", } mass_payment = app_token.post "#{mass_payment_url}", request_body mass_payment.status # => "pending" parameters: - name: id in: path description: ID of mass payment to update required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters for updating a mass payment content: application/json: schema: required: - status type: object properties: status: type: string example: pending responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/MassPayment' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to update mass payment '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Mass payment not found /mass-payments/{id}/items: get: tags: - mass payments summary: List items for a mass payment description: Retrieve individual payment items within a mass payment with optional status filtering and pagination support. Each item represents a distinct payment with status indicators (failed, pending, success) showing whether a transfer was successfully created. Returns paginated item details including amount, destination, metadata, and error information for failed items. Supports filtering by status and standard pagination. operationId: listMassPaymentItems x-speakeasy-group: massPayments.items x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563/items Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var massPaymentUrl = "https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563"; dwolla.get(`${massPaymentUrl}/items`).then((res) => res.body.total); // => 2 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563' mass_payment_items = app_token.get('%s/items' % mass_payment_url) mass_payment_items.body['total'] # => "2" - lang: php source: | getMassPaymentItems($massPaymentUrl); $massPaymentItems->total; # => "2" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563' mass_payment_items = app_token.get "#{mass_payment_url}/items" mass_payment_items.total # => 2 parameters: - name: id in: path description: Mass payment unique identifier required: true schema: type: string - name: limit in: query description: How many results to return required: false schema: type: string - name: offset in: query description: How many results to skip required: false schema: type: string - name: status in: query description: Filter by item status required: false schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563/items first: type: object properties: href: type: string example: https://api.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563/items?limit=25&offset=0 last: type: object properties: href: type: string example: https://api.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563/items?limit=25&offset=0 _embedded: type: object properties: items: type: array items: $ref: '#/components/schemas/MassPaymentItem' total: type: integer format: int32 example: 3 '403': description: Not authorized to list mass payment items headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to list mass payment items. '404': description: Mass payment not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Mass payment not found. /mass-payment-items/{itemId}: get: tags: - mass payments summary: Retrieve mass payment item description: Retrieve detailed information for a specific mass payment item by its unique identifier. Returns item status, amount, metadata, and links to the parent mass payment, associated transfer, and destination funding source. Use this endpoint to check the processing status and details of an individual item within a mass payment batch. operationId: getMassPaymentItem x-speakeasy-group: massPayments.items x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var massPaymentItemUrl = "https://api-sandbox.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388"; dwolla.get(massPaymentItemUrl).then((res) => res.body.status); // => 'success' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python mass_payment_item_url = 'https://api-sandbox.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388' mass_payment_item = app_token.get(mass_payment_item_url) mass_payment_item.body['status'] # => 'success' - lang: php source: | byId($massPaymentItemUrl); $massPaymentItem->status; # => "success" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby mass_payment_item_url = 'https://api-sandbox.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388' mass_payment_item = app_token.get mass_payment_item_url mass_payment_item.status # => "success" parameters: - name: itemId in: path description: ID of item to be retrieved in mass payment required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: success operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/MassPaymentItem' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to retrieve mass payment item '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Mass payment item not found /customers/{id}/mass-payments: get: tags: - mass payments summary: List mass payments for customer description: Retrieve all previously created mass payments for a Verified Customer account with optional correlation ID filtering and pagination support. Mass payments are returned ordered by date created with most recent appearing first. Returns paginated results including mass payment status, metadata, source funding information, and item links. Supports standard pagination parameters and correlation ID search for enhanced traceability. operationId: listCustomerMassPayments x-speakeasy-group: customers.massPayments x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/39e21228-5958-4c4f-96fe-48a4bf11332d/mass-payments Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/ca32853c-48fa-40be-ae75-77b37504581b"; dwolla .get(`${customerUrl}/mass-payments`, { limit: 10 }) .then((res) => res.body._embedded["mass-payments"][0].status); // => "complete" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/ca32853c-48fa-40be-ae75-77b37504581b' mass_payments = app_token.get('%s/mass-payments' % customer_url) mass_payments.body['_embedded']['mass-payments'][0]['status'] # => 'complete' - lang: php source: | getByCustomer($customerUrl); $masspayments->_embedded->{'mass-payments'}[0]->status; # => "complete" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/ca32853c-48fa-40be-ae75-77b37504581b' mass_payments = app_token.get "#{customer_url}/mass-payments", limit: 10 mass_payments._embedded['mass-payments'][0].status # => "complete" parameters: - name: id in: path description: Customer ID to get mass payments for required: true schema: type: string - name: correlationId in: query description: A string value to search on if `correlationId` was specified for a transaction required: false schema: type: string - name: limit in: query description: Number of search results to return. Defaults to 25 required: false schema: type: integer - name: offset in: query description: Number of search results to skip. Use for pagination required: false schema: type: integer - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/MassPayments' '403': description: Not authorized to list mass payments headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotAuthorized message: type: string example: Not authorized to list mass payments. '404': description: Customer not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Customer not found. /labels/{id}: get: tags: - labels summary: Retrieve a label description: Retrieve details for a specific Label used to categorize and track funds within your account. Returns Label information including unique identifier, current amount with currency, and creation timestamp. operationId: getLabel x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var labelUrl = "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc"; dwolla.get(labelUrl).then((res) => res.body.id); // => '7e042ffe-e25e-40d2-b86e-748b98845ecc' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python label_url = 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' label = app_token.get(label_url) label.body['id'] # => '7e042ffe-e25e-40d2-b86e-748b98845ecc' - lang: php source: | getLabel($labelUrl); $label->id; # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby label_url = 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' label = app_token.get label_url label.id # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" parameters: - name: id in: path description: Label unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Label' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' delete: tags: - labels summary: Remove a label description: Delete a Label to stop tracking funds and remove it from your account. Returns success status if the Label is successfully removed. Use this to streamline your account management and remove unused Labels from your system. operationId: removeLabel x-speakeasy-name-override: remove x-codeSamples: - lang: bash source: | DELETE https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var labelUrl = "https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc"; dwolla.delete(labelUrl); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python label_url = 'https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc' app_token.delete(label_url) - lang: php source: | removeLabel('https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc'); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby label_url = 'https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc' app_token.delete label_url parameters: - name: id in: path description: A label unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Label' '403': description: forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: InvalidResourceState message: type: string example: Amount must be zero to remove label. '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /customers/{id}/labels: get: tags: - labels summary: List labels for a customer description: Returns all labels for a specified Verified Customer, sorted by creation date (most recent first). Supports pagination with limit and offset parameters. Each label includes its current amount and creation timestamp. operationId: listCustomerLabels x-speakeasy-group: customers.labels x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/315a9456-3750-44bf-8b41-487b10d1d4bb/labels Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733"; dwolla .get(`${customerUrl}/labels`) .then((res) => res.body._embedded["labels"][0].id); // => '7e042ffe-e25e-40d2-b86e-748b98845ecc' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/315a9456-3750-44bf-8b41-487b10d1d4bb' labels = app_token.get('%s/labels' % customer_url) labels.body['_embedded']['labels'][0]['id'] # => '7e042ffe-e25e-40d2-b86e-748b98845ecc' - lang: php source: | getLabelsForCustomer($customerUrl); $labels->_embedded->{'labels'}[0]->id; # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/315a9456-3750-44bf-8b41-487b10d1d4bb' labels = app_token.get "#{customer_url}/labels" labels._embedded['labels'][0].id # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" parameters: - name: id in: path description: ID of customer required: true schema: type: string - name: limit in: query description: How many results to return required: false schema: type: string - name: offset in: query description: How many results to skip required: false schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: success operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Labels' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to list customer labels '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Customer not found post: tags: - labels summary: Create a label for a customer description: Creates a new label for a Verified Customer with a specified amount. Labels help organize and track funds within a customer's balance. Returns the location of the created label resource in the response header. operationId: createCustomerLabel x-speakeasy-group: customers.labels x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/labels Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "amount": { "currency": "USD", "value": "10.00" } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; var requestBody = { amount: { currency: "USD", value: "10.00", }, }; dwolla .post(`${customerUrl}/labels`, requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/labels/375c6781-2a17-476c-84f7-db7d2f6ffb31' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { 'amount': { 'currency': 'USD', 'value': '10.00' } } label = app_token.post('%s/labels' % customer_url, request_body) label.headers['location'] # => 'https://api-sandbox.dwolla.com/labels/375c6781-2a17-476c-84f7-db7d2f6ffb31' - lang: php source: | createLabel([ 'amount' => [ 'currency' => 'USD', 'value' => '10.00' ] ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); $label; # => "https://api-sandbox.dwolla.com/labels/375c6781-2a17-476c-84f7-db7d2f6ffb31" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' request_body = { :amount => { :currency => "USD", :value => "10.00" } } label = app_token.post "#{customer_url}/labels", request_body label.response_headers[:location] # => "https://api-sandbox.dwolla.com/labels/375c6781-2a17-476c-84f7-db7d2f6ffb31" parameters: - name: id in: path description: ID of customer to create a label for required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters to create a customer label content: application/json: schema: required: - amount type: object properties: amount: type: object properties: currency: type: string example: USD value: type: string example: '12.34' responses: '201': description: create headers: Location: $ref: '#/components/headers/Location' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to create customer label '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Customer not found /labels/{id}/ledger-entries: get: tags: - labels summary: List label ledger entries description: Returns all ledger entries for a specific Label, sorted by creation date (newest first). Supports pagination with limit and offset parameters. Each ledger entry includes its amount, currency, and creation timestamp. operationId: listLabelLedgerEntries x-speakeasy-group: labels.ledgerEntries x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc/ledger-entries Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var labelUrl = "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc"; dwolla .get(`${labelUrl}/ledger-entries`) .then((res) => res.body._embedded["ledger-entries"][0].id); // => '32d68709-62dd-43d6-a6df-562f4baec526' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python label_url = 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' ledger_entries = app_token.get('%s/ledger-entries' % label_url) ledger_entries.body['_embedded']['ledger-entries'][0]['id'] # => '32d68709-62dd-43d6-a6df-562f4baec526' - lang: php source: | getLedgerEntriesForLabel($labelUrl); $ledgerEntries->_embedded->{'ledger-entries'}[0]->id; # => "32d68709-62dd-43d6-a6df-562f4baec526" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby label_url = 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' ledger_entries = app_token.get "#{label_url}/ledger-entries" ledger_entries._embedded['ledger-entries'][0].id # => "32d68709-62dd-43d6-a6df-562f4baec526" parameters: - name: id in: path description: A label unique identifier required: true schema: type: string - name: limit in: query description: How many results to return required: false schema: type: integer - name: offset in: query description: How many results to skip required: false schema: type: integer - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/LabelLedgerEntries' '400': description: Bad request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - labels summary: Create a label ledger entry description: Create a new ledger entry to track fund adjustments on a Label by specifying a positive or negative amount value. Returns the location of the created ledger entry in the response header. Label amounts cannot go negative, so validation errors occur if the entry would result in a negative Label balance. operationId: createLabelLedgerEntry x-speakeasy-group: labels.ledgerEntries x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f/ledger-entries Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "amount": { "value": "-5.00", "currency": "USD" } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var labelUrl = "https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f"; var requestBody = { amount: { currency: "USD", value: "-5.00", }, }; dwolla .post(`${labelUrl}/ledger-entries`, requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/ledger-entries/76e5541d-18f4-e811-8112-e8dd3bececa8' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python label_url = 'https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f' request_body = { 'amount': { 'currency': 'USD', 'value': '-5.00' } } ledger_entry = app_token.post('%s/ledger-entries' % label_url, request_body) ledger_entry.headers['location'] # => 'https://api-sandbox.dwolla.com/ledger-entries/76e5541d-18f4-e811-8112-e8dd3bececa8' - lang: php source: | addLedgerEntry([ 'amount' => [ 'currency' => 'USD', 'value' => '-5.00' ] ], "https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f"); $label; # => "https://api-sandbox.dwolla.com/ledger-entries/76e5541d-18f4-e811-8112-e8dd3bececa8" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby label_url = 'https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f' request_body = { :amount => { :currency => "USD", :value => "-5.00" } } ledger_entry = app_token.post "#{label_url}/ledger-entries", request_body ledger_entry.response_headers[:location] # => "https://api-sandbox.dwolla.com/ledger-entries/76e5541d-18f4-e811-8112-e8dd3bececa8" parameters: - name: id in: path description: The Id of the Label to update. required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters to create a label ledger entry content: application/json: schema: required: - amount type: object properties: amount: type: object required: - value - currency properties: value: type: string description: Amount of funds to increase or decrease for a Label. To decrease funds in a Label a string numeric value will be supplied and prepended with a "-" operator. example: '-5.00' currency: type: string description: Currency code for the amount example: USD responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '400': description: Bad request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /ledger-entries/{ledgerEntryId}: get: tags: - labels summary: Retrieve a label ledger entry description: Returns detailed information for a specific ledger entry on a Label, including its amount, currency, and creation timestamp. operationId: getLabelLedgerEntry x-speakeasy-group: labels.ledgerEntries x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/ledger-entries/32d68709-62dd-43d6-a6df-562f4baec526 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var ledgerEntryUrl = "https://api-sandbox.dwolla.com/ledger-entries/32d68709-62dd-43d6-a6df-562f4baec526"; dwolla.get(ledgerEntryUrl).then((res) => res.body.id); // => '32d68709-62dd-43d6-a6df-562f4baec526' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python ledger_entry_url = 'https://api-sandbox.dwolla.com/ledger-entries/32d68709-62dd-43d6-a6df-562f4baec526' ledger_entry = app_token.get(ledger_entry_url) ledger_entry.body['id'] # => '32d68709-62dd-43d6-a6df-562f4baec526' - lang: php source: | getLedgerEntry($ledgerEntryUrl); $ledgerEntry->id; # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby ledger_entry_url = 'https://api-sandbox.dwolla.com/ledger-entries/32d68709-62dd-43d6-a6df-562f4baec526' ledger_entry = app_token.get ledger_entry_url ledger_entry.id # => "32d68709-62dd-43d6-a6df-562f4baec526" parameters: - name: ledgerEntryId in: path description: A label ledger entry unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/LabelLedgerEntry' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /label-reallocations: post: tags: - labels summary: Create a label reallocation description: Reallocates funds between two labels belonging to the same Verified Customer. Moves the specified amount from the source label to the destination label, creating ledger entries for both. The reallocation only succeeds if the source label has sufficient funds. operationId: createLabelReallocation x-speakeasy-group: labels.reallocations x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/label-reallocations Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links":{ "from": { "href": "https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45" }, "to": { "href": "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc" } }, "amount": { "value": "15.00", "currency": "USD" } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var requestBody = { _links: { from: { href: "https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45", }, to: { href: "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc", }, }, amount: { currency: "USD", value: "1.00", }, }; dwolla .post("label-reallocations", requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python request_body = { '_links': { 'from': { 'href': 'https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45' }, 'to': { 'href': 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' } }, 'amount': { 'currency': 'USD', 'value': '15.00' } } labelReallocation = app_token.post('label-reallocations', request_body) labelReallocation.headers['location'] # => 'https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21' - lang: php source: | reallocateLabel([ '_links' => [ 'from' => [ 'href' => 'https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45', ], 'to' => [ 'href' => 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' ] ], 'amount' => [ 'currency' => 'USD', 'value' => '15.00' ] ]); $labelReallocation; # => "https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby request_body = { :_links => { :from => { :href => "https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45" }, :to => { :href => "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc" } }, :amount => { :currency => "USD", :value => "15.00" } } labelReallocation = app_token.post "label-reallocations", request_body labelReallocation.response_headers[:location] # => "https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21" parameters: - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters to create a label reallocation content: application/json: schema: required: - _links - amount type: object properties: _links: type: object properties: from: type: object properties: href: type: string example: https://api.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45 to: type: object properties: href: type: string example: https://api.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc amount: type: object properties: currency: type: string example: USD value: type: string example: '15.00' responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: Forbidden message: type: string example: Not authorized to create label reallocation '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Label not found /label-reallocations/{reallocationId}: get: tags: - labels summary: Retrieve a label reallocation description: Retrieve details for a specific label reallocation that transfers funds between Labels. Returns reallocation information including source and destination Labels, amount transferred, status, and creation timestamp. Use this to track and audit fund movements between different Labels. operationId: retrieveLabelReallocation x-speakeasy-group: labels.reallocations x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var labelReallocationUrl = "https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21"; dwolla.get(labelReallocationUrl).then((res) => res.body.created); // => '2019-05-16T13:41:31.036Z' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python label_reallocation_url = 'https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21' label_reallocation = app_token.get(label_reallocation_url) label_reallocation.body['created'] # => '2019-05-16T13:41:31.036Z' - lang: php source: | getLabelReallocation($labelReallocationUrl); $labelReallocation->created; # => "2019-05-16T13:41:31.036Z" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby label_reallocation_url = 'https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21' label_reallocation = app_token.get label_reallocation_url label_reallocation.created # => "2019-05-16T13:41:31.036Z" parameters: - name: reallocationId in: path description: Label reallocation unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21 type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: label-reallocation to-ledger-entry: type: object properties: href: type: string example: https://api.dwolla.com/ledger-entries/d8a4bf7a-3fa0-48b9-873c-765d7375c59f type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: ledger-entry from-ledger-entry: type: object properties: href: type: string example: https://api.dwolla.com/ledger-entries/f6a44994-b4da-48e3-bd10-d3a168e6a77d type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: ledger-entry created: type: string format: date-time example: '2022-05-16T13:41:31.036Z' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /events: get: tags: - events summary: List events description: Returns a paginated list of events representing state changes to resources in your Dwolla application. Events track actions on customers, transfers, funding sources, and other resources, sorted by creation date (newest first). Events are retained for 30 days and are essential for webhook notifications and system activity monitoring. operationId: listEvents x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/events Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY ... { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/events" }, "first": { "href": "https://api-sandbox.dwolla.com/events?limit=25&offset=0" }, "last": { "href": "https://api-sandbox.dwolla.com/events?limit=25&offset=150" }, "next": { "href": "https://api-sandbox.dwolla.com/events?limit=25&offset=25" } }, "_embedded": { "events": [ { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/events/78e57644-56e4-4da2-b743-059479f2e80f" }, "resource": { "href": "https://api-sandbox.dwolla.com/transfers/47CFDDB4-1E74-E511-80DB-0AA34A9B2388" }, "account": { "href": "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b" } }, "id": "78e57644-56e4-4da2-b743-059479f2e80f", "created": "2015-10-16T15:58:18.000Z", "topic": "bank_transfer_created", "resourceId": "47CFDDB4-1E74-E511-80DB-0AA34A9B2388" }, { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/events/f8e70f48-b7ff-47d0-9d3d-62a099363a76" }, "resource": { "href": "https://api-sandbox.dwolla.com/transfers/48CFDDB4-1E74-E511-80DB-0AA34A9B2388" }, "account": { "href": "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b" } }, "id": "f8e70f48-b7ff-47d0-9d3d-62a099363a76", "created": "2015-10-16T15:58:15.000Z", "topic": "transfer_created", "resourceId": "48CFDDB4-1E74-E511-80DB-0AA34A9B2388" }, { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/events/9f0167e0-dce6-4a1a-ad26-30015d6f1cc1" }, "resource": { "href": "https://api-sandbox.dwolla.com/transfers/08A166BC-1B74-E511-80DB-0AA34A9B2388" }, "account": { "href": "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b" } }, "id": "9f0167e0-dce6-4a1a-ad26-30015d6f1cc1", "created": "2015-10-16T15:37:03.000Z", "topic": "bank_transfer_created", "resourceId": "08A166BC-1B74-E511-80DB-0AA34A9B2388" } ] }, "total": 3 } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla.get("events").then((res) => res.body.total); // => 3 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python events = app_token.get('events') events.body['total'] # => 3 - lang: php source: | events(); $events->total; # => 3 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby events = app_token.get "events" events.total # => 3 parameters: - name: limit in: query description: How many results to return required: false schema: type: integer - name: offset in: query description: How many results to skip required: false schema: type: integer - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Events' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /events/{id}: get: tags: - events summary: Retrieve event description: Returns detailed information for a specific event representing a state change that occurred on a resource in your Dwolla application. Includes the event topic, timestamp, resource links, and correlation ID if applicable. operationId: getEvent x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY ... { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095" }, "resource": { "href": "https://api-sandbox.dwolla.com/transfers/09A166BC-1B74-E511-80DB-0AA34A9B2388" }, "account": { "href": "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b" }, "customer": { "href": "https://api-sandbox.dwolla.com/customers/07d59716-ef22-4fe6-98e8-f3190233dfb8" } }, "id": "81f6e13c-557c-4449-9331-da5c65e61095", "created": "2015-10-16T15:37:02.000Z", "topic": "customer_transfer_created", "resourceId": "09A166BC-1B74-E511-80DB-0AA34A9B2388" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var eventUrl = "https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095"; dwolla.get(eventUrl).then((res) => res.body.topic); // => 'customer_transfer_created' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python event_url = 'https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095' event = app_token.get(event_url) event.body['topic'] # => 'customer_transfer_created' - lang: php source: | id($eventUrl); $event->topic; # => "customer_transfer_created" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby event_url = 'https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095' event = app_token.get event_url event.topic # => "customer_transfer_created" parameters: - name: id in: path description: ID of application event to get required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Event' '404': description: not found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /webhook-subscriptions: get: tags: - webhook subscriptions summary: List webhook subscriptions description: Retrieve all webhook subscriptions that belong to an application including their configuration details and status. Returns subscription details including webhook endpoints, status, creation dates, and links to associated webhooks with total count. Essential for webhook management and monitoring subscription health. operationId: listWebhookSubscriptions x-speakeasy-group: webhookSubscriptions x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/webhook-subscriptions Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node dwolla.get("webhook-subscriptions").then((res) => res.body.total); // => 1 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python webhook_subscriptions = app_token.get('webhook-subscriptions') webhook_subscriptions.body['total'] # => 1 - lang: php source: | _list(); $retrieved->total; # => 1 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby webhook_subscriptions = app_token.get "webhook-subscriptions" webhook_subscriptions.total # => 1 parameters: - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/webhook-subscriptions _embedded: type: object properties: webhook-subscriptions: type: array items: $ref: '#/components/schemas/WebhookSubscription' total: type: integer format: int32 example: 1 '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - webhook subscriptions summary: Create a webhook subscription description: Create a webhook subscription to deliver webhook notifications to a specified URL endpoint for your application. Requires a destination URL where Dwolla will send notifications and a secret key for webhook validation and security. Returns the location of the created subscription resource. Essential for establishing real-time event notifications and automated integrations with Dwolla's payment processing events. operationId: createWebhookSubscription x-speakeasy-group: webhookSubscriptions x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/webhook-subscriptions Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer 0Sn0W6kzNicvoWhDbQcVSKLRUpGjIdlPSEYyrHqrDDoRnQwE7Q { "url": "http://myapplication.com/webhooks", "secret": "sshhhhhh" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var requestBody = { url: "http://myawesomeapplication.com/destination", secret: "your webhook secret", }; dwolla .post("webhook-subscriptions", requestBody) .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python request_body = { 'url': 'http://myapplication.com/webhooks', 'secret': 'sshhhhhh' } subscription = app_token.post('webhook-subscriptions', request_body) subscription.headers['location'] # => 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' - lang: php source: | create(array ( 'url' => 'http://myapplication.com/webhooks', 'secret' => 'sshhhhhh', )); $subscription; # => "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby request_body = { :url => "http://myawesomeapplication.com/destination", :secret => "your webhook secret" } subscription = app_token.post "webhook-subscriptions", request_body subscription.response_headers[:location] # => "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216" parameters: - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters to create a webhook subscriptions content: application/json: schema: required: - url - secret type: object properties: url: type: string example: http://myapplication.com/webhooks secret: type: string example: sshhhhhh responses: '201': description: create headers: Location: $ref: '#/components/headers/Location' '400': description: Bad request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/InvalidUrlFormatError' - $ref: '#/components/schemas/SecretTooLongError' - $ref: '#/components/schemas/MaxSubscriptionsReachedError' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' '429': description: Too Many Requests headers: {} content: application/vnd.dwolla.v1.hal: schema: $ref: '#/components/schemas/TooManyRequestsError' /webhook-subscriptions/{id}: get: tags: - webhook subscriptions summary: Retrieve a webhook subscription description: Retrieve detailed information for a specific webhook subscription by its unique identifier. Returns subscription configuration including URL endpoint, creation date, and links to associated webhooks for comprehensive subscription management. Essential for monitoring webhook subscription status and accessing webhook delivery history. operationId: getWebhookSubscription x-speakeasy-group: webhookSubscriptions x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var webhookSubscriptionUrl = "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216"; dwolla.get(webhookSubscriptionUrl).then((res) => res.body.created); // => '2016-04-20T15:49:50.340Z' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' webhook_subscription = app_token.get(webhook_subscription_url) webhook_subscription.body['created'] # => '2015-10-28T16:20:47+00:00' - lang: php source: | id('https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216'); $retrieved->created; # => 2015-10-28T16:20:47+00:00 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' webhook_subscription = app_token.get webhook_subscription_url webhook_subscription.created # => 2015-10-28T16:20:47+00:00 parameters: - name: id in: path description: Webhook subscription unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/WebhookSubscription' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - webhook subscriptions summary: Update a webhook subscription description: Update a webhook subscription to pause or resume webhook delivery notifications. Allows toggling the paused status to temporarily stop webhook notifications without deleting the subscription. Returns the updated subscription resource with the new paused status. Use this endpoint to manage webhook delivery during maintenance or troubleshooting periods. operationId: updateWebhookSubscription x-speakeasy-group: webhookSubscriptions x-speakeasy-name-override: update x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216 Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer 0Sn0W6kzNicvoWhDbQcVSKLRUpGjIdlPSEYyrHqrDDoRnQwE7Q { "paused": true } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var webhookSubscriptionUrl = "https://api-sandbox.dwolla.com/webhook-subscriptions/692486f8-29f6-4516-a6a5-c69fd2ce854c"; var requestBody = { paused: true, }; dwolla.post(webhookSubscriptionUrl, requestBody).then((res) => res.body.paused); // => 'true' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' request_body = { 'paused': true } subscription = app_token.post(webhook_subscription_url, request_body) subscription.body['paused'] # => true - lang: php source: | updateSubscription(array ( 'paused' => true ), $webhookSubscriptionUrl); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' request_body = { :paused => true } subscription = app_token.post "#{webhook_subscription_url}", request_body parameters: - name: id in: path description: Webhook unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true description: Parameters to update a webhook subscription content: application/json: schema: required: - paused type: object properties: paused: type: boolean example: true responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/WebhookSubscription' '400': description: Bad Request headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' delete: tags: - webhook subscriptions summary: Delete a webhook subscription description: Delete a webhook subscription to permanently remove webhook notifications for your application. This action stops all future webhook deliveries and cannot be undone. Returns the deleted subscription resource for confirmation. Use this endpoint when webhook notifications are no longer needed or when cleaning up unused subscriptions. operationId: delete x-speakeasy-group: webhookSubscriptions x-codeSamples: - lang: bash source: | DELETE https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var webhookSubscriptionUrl = "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216"; dwolla.delete(webhookSubscriptionUrl); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' app_token.delete(webhook_subscription_url) - lang: php source: | deleteById('https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216'); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' app_token.delete webhook_subscription_url parameters: - name: id in: path description: Webhook unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/WebhookSubscription' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /webhook-subscriptions/{id}/webhooks: get: tags: - webhook subscriptions summary: List webhooks for a webhook subscription description: Retrieve all fired webhooks for a specific webhook subscription with comprehensive filtering and pagination support. Returns webhook delivery history including topics, attempts, request/response details, and delivery status over a rolling 30-day period. Supports filtering by resource ID, date ranges, and pagination parameters for detailed webhook delivery analysis. Critical for debugging webhook delivery issues and monitoring event notification success rates. operationId: listWebhooks x-speakeasy-group: webhookSubscriptions.webhooks x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/webhook-subscriptions/10d4133e-b308-4646-b276-40d9d36def1c/webhooks Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var webhookSubscriptionUrl = "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216"; dwolla.get(`${webhookSubscriptionUrl}/webhooks`).then((res) => res.body.total); // => 5 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' hooks = app_token.get('%s/webhooks' % webhook_subscription_url) hooks.body['total'] # => 5 - lang: php source: | hooksById('https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216'); $hooks->total; # => 5 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' hooks = app_token.get "#{webhook_subscription_url}/webhooks" hooks.total # => 5 parameters: - name: id in: path description: Webhook subscription unique identifier required: true schema: type: string - name: limit in: query description: How many results to return required: false schema: type: string - name: offset in: query description: How many results to skip required: false schema: type: string - name: startDate in: query description: Only include webhooks created after this date. ISO-8601 format `YYYY-MM-DD` required: false schema: type: string - name: endDate in: query description: Only include webhooks created before this date. ISO-8601 format `YYYY-MM-DD` required: false schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83/webhooks first: type: object properties: href: type: string example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83/webhooks?limit=25&offset=0 last: type: object properties: href: type: string example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83/webhooks?limit=25&offset=150 next: type: object properties: href: type: string example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83/webhooks?limit=25&offset=25 _embedded: type: object properties: webhooks: type: array items: $ref: '#/components/schemas/Webhook' total: type: integer format: int32 example: 1 '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /webhooks/{id}: get: tags: - webhooks summary: Retrieve a webhook description: Retrieve detailed information for a specific webhook by its unique identifier including delivery attempts and response data. Returns webhook details with topic, account information, delivery attempts containing request/response history, and links to subscription and retry resources. Essential for debugging webhook delivery issues, analyzing response data, and monitoring notification processing status. operationId: getWebhook x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8 Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var webhookUrl = "https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8"; dwolla.get(webhookUrl).then((res) => res.body.topic); // => 'transfer_created' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' webhook = app_token.get(webhook_url) webhook.body['topic'] # => 'transfer_created' - lang: php source: | id($webhookUrl); $webhook->topic; # => "transfer_created" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' webhook = app_token.get webhook_url webhook.topic # => "transfer_created" parameters: - name: id in: path description: Webhook unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Webhook' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /webhooks/{id}/retries: get: tags: - webhooks summary: List retries for a webhook description: Retrieve all retry attempts for a specific webhook including timestamps and delivery details. Returns a list of retry attempts with unique identifiers, timestamps, and links to the parent webhook with total count. Essential for tracking webhook delivery failures, analyzing retry patterns, and debugging webhook notification issues to ensure reliable event processing. operationId: listWebhookRetries x-speakeasy-group: webhooks.retries x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var webhookUrl = "https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8"; dwolla.get(`${webhookUrl}/retries`).then((res) => res.body.total); // => 1 - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' retries = app_token.get('%s/retries' % webhook_url) retries.body['total'] # => 1 - lang: php source: | retriesById($webhookUrl); $retries->total; # => 1 ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' retries = app_token.get "#{webhook_url}/retries" retries.total # => 1 parameters: - name: id in: path description: Webhook unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/WebhookRetries' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - webhooks summary: Retry a webhook description: Retry a webhook by its unique identifier to redeliver the notification to your endpoint. Creates a new retry attempt and returns the location of the new webhook resource. Essential for recovering from webhook delivery failures and ensuring reliable event notification processing in your application. operationId: retryWebhook x-speakeasy-name-override: retry x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var webhookUrl = "https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8"; dwolla.post(`${webhookUrl}/retries`); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' app_token.post('%s/retries' % webhook_url) - lang: php source: | retryWebhook($webhookUrl); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' app_token.post "#{webhook_url}/retries" parameters: - name: id in: path description: Webhook unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /sandbox-simulations: post: tags: - sandbox simulations summary: Sandbox simulations (bank transfers, VAN transfers, or customer verification directives) description: | Sandbox-only endpoint with three modes: **Simulate bank transfer processing** — Omit the body or send an empty JSON object. Processes or fails the last 500 bank transfers on the authorized application or Sandbox account (and initiated micro-deposits). If webhooks are configured, events are delivered. If a bank-to-bank transaction involves two users, call this twice to process debit and credit sides. Returns **200** with a HAL document including `total`. **Simulate VAN (virtual) transfers** — Send a JSON body with `type` set to `virtual` and a `transfers` array (up to 10 items). External transfers are created and processed immediately. Returns **202 Accepted**. **Simulate verification directives** — For a business Verified Customer in **`retry`** or **`document`** status, send `type`: `customer-verification`, `_links.customer.href` pointing at that customer, and `errorCode` set to one of: `PersonalIDRequired`, `POBoxNotAllowed`, `AddressNotAssociatedWithBusiness`, `EINDocumentRequired`. Returns **200** with HAL `_links.self` and `errorCode`. Then **GET** the Customer; the same code appears in `_embedded.errors` for end-to-end testing. operationId: simulateBankTransferProcessing x-speakeasy-name-override: simulate x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/sandbox-simulations Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer {Your access token} parameters: - $ref: '#/components/parameters/Accept' requestBody: required: false description: | Optional. For bank transfer processing, omit the body or send `{}`. For VAN simulation, send `type`: `virtual` and a `transfers` array. For verification directives, send `type`: `customer-verification`, `_links.customer`, and `errorCode` (see schema). content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/SandboxSimulationRequest' responses: '200': description: | Success. **Bank transfer processing** returns HAL with `total`. **Customer verification directives** return HAL `_links.self` and `errorCode` (retrieve the Customer for `_embedded.errors`). content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/SandboxSimulationBankProcessingResponse' - $ref: '#/components/schemas/SandboxSimulationCustomerVerificationResponse' examples: bankTransferProcessing: summary: Bank transfer processing value: _links: self: href: https://api-sandbox.dwolla.com/sandbox-simulations type: application/vnd.dwolla.v1.hal+json resource-type: sandbox-simulation total: 8 customerVerificationDirective: summary: Customer verification directive simulation value: _links: self: href: https://api-sandbox.dwolla.com/sandbox-simulations type: application/vnd.dwolla.v1.hal+json resource-type: sandbox-simulation errorCode: AddressNotAssociatedWithBusiness '202': description: | Accepted. Virtual (VAN) transfer simulation: requested transfers were accepted for immediate processing in Sandbox. '400': description: | Bad Request. content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '401': description: unauthorized content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: InvalidAccessToken message: type: string example: Invalid access token. '403': description: forbidden content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to simulate transfer processing. /exchange-partners: get: tags: - exchanges summary: List exchange partners description: Returns a list of all supported exchange partners. Each partner includes a unique ID, name, and status indicating whether they are active or inactive. operationId: listExchangePartners x-speakeasy-group: exchangePartners x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api.dwolla.com/exchange-partners Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY ... { "_links": { "self": { "href": "https://api.dwolla.com/exchange-partners", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange-partner" } }, "_embedded": { "exchange-partners": [ { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/exchange-partners/9b55a4b3-34ae-4607-b2d1-622f1eed77f9", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange-partner" } }, "id": "9b55a4b3-34ae-4607-b2d1-622f1eed77f9", "name": "Finicity", "status": "active" }, { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange-partner" } }, "id": "292317ec-e252-47d8-93c3-2d128e037aa4", "name": "MX", "status": "active" } ] }, "total": 2 } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node token.get("exchange-partners").then((res) => res.body._embedded["exchange-partners"][0].id); // => '9b55a4b3-34ae-4607-b2d1-622f1eed77f9' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python exchange_partners = app_token.get('exchange-partners') exchange_partners.body['_embedded']['exchange-partners'][0]['id'] # => '9b55a4b3-34ae-4607-b2d1-622f1eed77f9' - lang: php source: | getExchangePartners(); $exchangePartners->_embedded->{"exchange-partners"}[0]->id; # => "9b55a4b3-34ae-4607-b2d1-622f1eed77f9" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby exchange_partners = app_token.get "exchange-partners" exchange_partners._embedded['exchange-partners'][0].id # => "9b55a4b3-34ae-4607-b2d1-622f1eed77f9" parameters: - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ExchangePartners' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' /exchange-partners/{id}: get: tags: - exchanges summary: Retrieve exchange partner description: Returns details for a specific open banking provider that integrates with Dwolla. Includes partner name, status, and creation date. Use this to verify partner availability before creating exchanges and funding sources. operationId: getExchangePartner x-speakeasy-group: exchangePartners x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY ... { "_links": { "self": { "href": "https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange-partner" }, "funding-source": { "href": "https://api.dwolla.com/funding-sources", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "funding-source" } }, "id": "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a", "name": "MX", "status": "active", "created": "2022-08-30T19:31:59.106Z" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var exchangePartnerUrl = "https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a"; dwolla.get(exchangePartnerUrl).then((res) => res.body.id); // => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python exchange_partner_url = 'https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' exchange_partner = app_token.get(exchange_partner_url) exchange_partner.body['id'] # => 'e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' - lang: php source: | id($exchangePartnerUrl); $exchangePartner->id; # => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby exchange_partner_url = 'https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' exchange_partner = app_token.get exchange_partner_url exchange_partner.id # => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" parameters: - name: id in: path description: Exchange Partner resource unique identifier. required: true schema: type: string example: 292317ec-e252-47d8-93c3-2d128e037aa4 - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ExchangePartner' '404': description: Not Found content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /exchanges: get: tags: - exchanges summary: List exchanges for an account description: Returns all exchanges for your Dwolla account. Exchanges represent connections between external bank accounts and your account through open banking partners. Includes exchange status, creation date, and associated partner information. operationId: listAccountExchanges x-speakeasy-group: accounts.exchanges x-speakeasy-name-override: list parameters: - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Exchanges' '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' post: tags: - exchanges summary: Create an exchange for an account description: | Create an exchange for an account. The request body will vary based on the exchange partner. For Finicity, the request body will include finicity-specific fields. For MX Secure Exchange, the request body will include a token. For Flinks Secure Exchange, the request body will include a token. For Plaid Secure Exchange, the request body will include a token. operationId: createAccountExchange x-speakeasy-group: accounts.exchanges x-speakeasy-name-override: create requestBody: required: true description: Parameters for creating an exchange content: application/json: schema: oneOf: - $ref: '#/components/schemas/CreateFinicitySecureExchange' - $ref: '#/components/schemas/CreateTokenBasedExchange' responses: '201': description: Created headers: Location: $ref: '#/components/headers/Location' example: https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d content: application/vnd.dwolla.v1.hal+json: schema: type: object '400': description: Bad Request content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/InvalidExchangeToken' - $ref: '#/components/schemas/InvalidExchange' '401': description: Invalid Scope content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: InvalidExchange message: type: string example: The exchange is no longer active. '403': description: Forbidden headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /exchanges/{id}: get: tags: - exchanges summary: Retrieve exchange resource description: Returns details for a specific exchange connection between Dwolla and an open banking partner for a customer's bank account. Includes exchange status, creation date, and links to the associated customer and exchange partner. operationId: getExchange x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY ... { "_links": { "self": { "href": "https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange" }, "exchange-partner": { "href": "https://api.dwolla.com/exchange-partners/9b55a4b3-34ae-4607-b2d1-622f1eed77f9", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange-partner" } }, "id": "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a", "status": "active", "created": "2022-10-21T21:41:03.283Z" } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var exchangeUrl = "https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a"; token.get(exchangeUrl).then((res) => res.body.id); // => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python exchange_url = 'https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' exchange = app_token.get(exchange_url) exchange.body['id'] # => 'e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' - lang: php source: | getExchange($exchangeUrl); $exchange->id; # => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby exchange_url = 'https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' exchange = app_token.get exchange_url exchange.id # => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" parameters: - name: id in: path description: Exchange resource unique identifier. required: true schema: type: string example: e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation headers: {} content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Exchange' '401': description: Invalid Scope headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: InvalidScope message: type: string example: The scopes for retrieving an exchange resource is not enabled for this application. Reach out to Dwolla for more information. '404': description: Not Found headers: {} content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: The requested resource was not found. Check Exchange ID. /customers/{id}/exchanges: get: tags: - exchanges summary: List exchanges for a customer description: Returns all exchanges for a specific customer. Exchanges represent connections between the customer's external bank accounts and open banking partners. Includes exchange status, creation date, and links to associated funding sources and partners. operationId: listCustomerExchanges x-speakeasy-group: customers.exchanges x-speakeasy-name-override: list x-codeSamples: - lang: bash source: | GET https://api-sandbox.dwolla.com/customers/9fc74373-a5c7-40e4-aa59-d5f4c86a24ea/exchanges Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY ... { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/exchanges", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange" } }, "_embedded": { "exchanges": [ { "_links": { "self": { "href": "https://api-sandbox.dwolla.com/exchanges/92822961-3a7f-42c0-b0cc-7ffef05717fa", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange" }, "exchange-partner": { "href": "https://api-sandbox.dwolla.com/exchange-partners/bca8d065-49a5-475b-a6b4-509bc8504d22", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "exchange-partner" }, "funding-sources": { "href": "https://api-sandbox.dwolla.com/funding-sources", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "funding-source" }, "customer": { "href": "https://api-sandbox.dwolla.com/customers/9fc74373-a5c7-40e4-aa59-d5f4c86a24ea", "type": "application/vnd.dwolla.v1.hal+json", "resource-type": "customer" } }, "id": "92822961-3a7f-42c0-b0cc-7ffef05717fa", "status": "active", "created": "2022-10-19T17:44:44.864Z" } ] }, "total": 1 } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2"; token.get(`${customerUrl}/exchanges`).then((res) => res.body._embedded["exchanges"][0].id); // => '56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' exchanges = app_token.get('%s/exchanges' % customer_url) exchanges.body['_embedded']['exchanges'][0]['id'] # => '56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' - lang: php source: | getCustomerExchanges($customerUrl); $exchanges->_embedded->{"exchanges"}[0]->id; # => "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' exchanges = app_token.get "#{customer_url}/exchanges" exchanges._embedded['exchanges'][0].id # => "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" parameters: - name: id in: path description: The ID of the Customer to list exchanges for required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/Exchanges' '404': description: Not Found content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: Customer ID not found. Check Customer ID. post: tags: - exchanges summary: Create an exchange for a customer description: Creates an exchange connection between a customer and Dwolla. Request body varies by partner (Plaid, MX, Flinks, Finicity, Checkout.com). For bank accounts, use Plaid, MX, Flinks, or Finicity to establish secure access to the customer's bank account data. For debit cards (Push to Card), use Checkout.com and pass the payment ID from Checkout.com Flow. operationId: createCustomerExchange x-speakeasy-group: customers.exchanges x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchanges Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "exchange-partner": { "href": "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" } }, "token": "somePlaidProcessorToken" } HTTP/1.1 201 Created Location: https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980"; var requestBody = { _links: { "exchange-partner": { href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef", }, }, token: "somePlaidProcessorToken", }; dwolla.post(`${customerUrl}/exchanges`, requestBody).then((res) => res.headers.get("location")); // => 'https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980' request_body = { '_links': { 'exchange-partner': { 'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef' } }, 'token': 'somePlaidProcessorToken' } exchange = app_token.post('%s/exchanges' % customer_url, request_body) exchange.headers['location'] # => 'https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d' - lang: php source: | createCustomerExchange(new CreateExchangeRequest([ "_links" => [ "exchange-partner" => [ "href" => "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" ] ], "token" => "somePlaidProcessorToken" ]), $customerUrl); $exchange; # => https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980' request_body = { _links: { 'exchange-partner': { href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" } }, token: 'somePlaidProcessorToken' } exchange = app_token.post "#{customer_url}/exchanges", request_body exchange.response_headers[:location] # => "https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d" parameters: - name: id in: path description: The ID of the customer to create an exchange for required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: true content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/CreateFinicitySecureExchange' - $ref: '#/components/schemas/CreateTokenBasedExchange' - $ref: '#/components/schemas/CreateMXOpenBankingExchange' - $ref: '#/components/schemas/CreatePlaidOpenBankingExchange' responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' example: https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d '400': description: Bad Request content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/InvalidExchangeToken' - $ref: '#/components/schemas/InvalidExchange' '401': description: Unauthorized content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - type: object properties: code: type: string example: InvalidExchangeToken message: type: string example: The exchange token is not valid to perform this operation. Either the token is expired or invalid, or the products permissions to the token are invalid or expired. - type: object properties: code: type: string example: InvalidScope message: type: string example: The scopes for creating an exchange resource for a customer is not enabled for this application. Reach out to Dwolla for more information. '404': description: Not Found content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /customers/{id}/exchange-sessions: post: tags: - exchange sessions summary: Create customer exchange session description: | Creates an exchange session for a customer. Use cases include: - **Plaid / MX**: Instant bank account verification (open banking). For faster verification as compared to traditional micro-deposits. - **Checkout.com**: Debit card capture for Push to Card. Create a session, then retrieve it to get `externalProviderSessionData` (payment session) for the Checkout.com Flow component. operationId: createCustomerExchangeSession x-speakeasy-group: customers.exchangeSessions x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | # Plaid Web Example POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "exchange-partner": { "href": "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" } } } # Plaid Android Example POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "exchange-partner": { "href": "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" }, "redirect-url": { "href": "com.example.app123" } } } # Plaid iOS Example POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "exchange-partner": { "href": "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" }, "redirect-url": { "href": "https://example.com/app123" } } } # MX Example POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "exchange-partner": { "href": "https://api.dwolla.com/exchange-partners/2164407f-33c3-4555-a6a1-40d5e9e58744" } } } # Checkout.com (Push to Card / debit card) Example POST https://api-sandbox.dwolla.com/customers/bb0e1dc7-f2ea-4cca-b053-4049d49a1c0d/exchange-sessions Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer your_dwolla_access_token { "_links": { "exchange-partner": { "href": "https://api-sandbox.dwolla.com/exchange-partners/d652517d-9c02-4ea4-87af-2977e6cf3850" } } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node // Plaid Web Example var customerUrl = "https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980"; var requestBodyPlaidWeb = { _links: { "exchange-partner": { href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef", }, }, }; dwolla .post(`${customerUrl}/exchange-sessions`, requestBodyPlaidWeb) .then((res) => res.headers.get("location")); // Plaid Android Example var requestBodyPlaidAndroid = { _links: { "exchange-partner": { href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef", }, "redirect-url": { href: "com.example.app123", }, }, }; dwolla .post(`${customerUrl}/exchange-sessions`, requestBodyPlaidAndroid) .then((res) => res.headers.get("location")); // Plaid iOS Example var requestBodyPlaidIOS = { _links: { "exchange-partner": { href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef", }, "redirect-url": { href: "https://example.com/app123", }, }, }; dwolla .post(`${customerUrl}/exchange-sessions`, requestBodyPlaidIOS) .then((res) => res.headers.get("location")); // MX Example var requestBodyMX = { _links: { "exchange-partner": { href: "https://api.dwolla.com/exchange-partners/2164407f-33c3-4555-a6a1-40d5e9e58744", }, }, }; dwolla .post(`${customerUrl}/exchange-sessions`, requestBodyMX) .then((res) => res.headers.get("location")); - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python # Plaid Web Example customer_url = 'https://api.dwolla.com/customer/74a207b2-b7b7-4efa-8bf8-582148e7b980' request_body_plaid_web = { '_links': { 'exchange-partner': { 'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef' } } } exchange = app_token.post('%s/exchange-sessions' % customer_url, request_body_plaid_web) exchange.headers['location'] # Plaid Android Example request_body_plaid_android = { '_links': { 'exchange-partner': { 'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef' }, 'redirect-url': { 'href': 'com.example.app123' } } } exchange = app_token.post('%s/exchange-sessions' % customer_url, request_body_plaid_android) exchange.headers['location'] # Plaid iOS Example request_body_plaid_ios = { '_links': { 'exchange-partner': { 'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef' }, 'redirect-url': { 'href': 'https://example.com/app123' } } } exchange = app_token.post('%s/exchange-sessions' % customer_url, request_body_plaid_ios) exchange.headers['location'] # MX Example request_body_mx = { '_links': { 'exchange-partner': { 'href': 'https://api.dwolla.com/exchange-partners/2164407f-33c3-4555-a6a1-40d5e9e58744' } } } exchange = app_token.post('%s/exchange-sessions' % customer_url, request_body_mx) exchange.headers['location'] - lang: php source: | /** * No example for this language yet. **/ - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby # Plaid Web Example customer_url = 'https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980' request_body_plaid_web = { _links: { 'exchange-partner': { href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" } } } exchange = app_token.post "#{customer_url}/exchange-sessions", request_body_plaid_web exchange.response_headers[:location] # Plaid Android Example request_body_plaid_android = { _links: { 'exchange-partner': { href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" }, 'redirect-url': { href: "com.example.app123" } } } exchange = app_token.post "#{customer_url}/exchange-sessions", request_body_plaid_android exchange.response_headers[:location] # Plaid iOS Example request_body_plaid_ios = { _links: { 'exchange-partner': { href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" }, 'redirect-url': { href: "https://example.com/app123" } } } exchange = app_token.post "#{customer_url}/exchange-sessions", request_body_plaid_ios exchange.response_headers[:location] # MX Example request_body_mx = { _links: { 'exchange-partner': { href: "https://api.dwolla.com/exchange-partners/2164407f-33c3-4555-a6a1-40d5e9e58744" } } } exchange = app_token.post "#{customer_url}/exchange-sessions", request_body_mx exchange.response_headers[:location] parameters: - name: id in: path description: Customer's unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: description: Parameters for creating an exchange session required: true content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/CreateCustomerExchangeSessionWithRedirect' - $ref: '#/components/schemas/CreateCustomerExchangeSessionForWeb' responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '400': description: validation error content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: /_links/exchange-partner/href is invalid - type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: /_links/redirect-url/href is invalid - type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: The provided redirect URL must exactly match one of the configured URLs for the account '401': description: unauthorized content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: InvalidScope message: type: string example: Missing or invalid scopes for requested endpoint '403': description: forbidden content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - type: object required: - code - message properties: code: type: string example: forbidden message: type: string example: The exchange partner specified does not support this product - type: object required: - code - message properties: code: type: string example: forbidden message: type: string example: Exchange sessions with this exchange partner are not enabled for your account '404': description: Not Found content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/NotFoundError' /exchange-sessions/{id}: get: tags: - exchange sessions summary: Retrieve exchange session description: | Returns details of a previously created exchange session. Response varies by partner: - **MX**: `_links.external-provider-session.href` (redirect URL for verification). - **Plaid**: `externalProviderSessionToken` (token to initialize Plaid Link). - **Checkout.com**: `externalProviderSessionData` with `id`, `payment_session_secret`, and `payment_session_token` to initialize the Checkout.com Flow component for debit card capture (Push to Card). operationId: retrieveCustomerExchangeSession x-speakeasy-group: exchangeSessions x-speakeasy-name-override: get x-codeSamples: - lang: bash source: | GET https://api.dwolla.com/exchange-sessions/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var exchangeSessionUrl = "https://api.dwolla.com/exchange-sessions/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a"; dwolla .get(exchangeSessionUrl) .then((res) => res.body._links["external-provider-session"].href); // MX => redirect URL // For Plaid: .then((res) => res.body.externalProviderSessionToken) // For Checkout.com (Push to Card): .then((res) => res.body.externalProviderSessionData) // => { id, payment_session_secret, payment_session_token } - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python exchange_session_url = 'https://api.dwolla.com/exchange-sessions/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' exchange_session = app_token.get(exchange_session_url) exchange_session.body['_links']['external-provider-session']['href'] # MX => redirect URL # For Plaid: exchange_session.body['externalProviderSessionToken'] # For Checkout.com: exchange_session.body['externalProviderSessionData'] # => { id, payment_session_secret, payment_session_token } - lang: php source: | /** * No example for this language yet. **/ - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby exchange_session_url = 'https://api.dwolla.com/exchange-sessions/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' exchange_session = app_token.get exchange_session_url exchange_session['_links']['external-provider-session']['href'] # MX => redirect URL # For Plaid: exchange_session['externalProviderSessionToken'] # For Checkout.com: exchange_session['externalProviderSessionData'] # => { id, payment_session_secret, payment_session_token } parameters: - name: id in: path description: Exchange session's unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ExchangeSession' '403': description: forbidden content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to retrieve exchange session. '404': description: not found content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: notFound message: type: string example: Exchange session not found. /exchanges/{id}/exchange-sessions: post: tags: - exchange sessions summary: Create re-authentication exchange session description: Creates a re-authentication exchange session to refresh a user's bank account connection when their existing authorization is no longer valid. Required when receiving an UpdateCredentials error during bank balance checks or when user re-authentication is needed. operationId: createReAuthExchangeSession x-speakeasy-group: exchanges.exchangeSessions x-speakeasy-name-override: createReAuth x-codeSamples: - lang: bash source: | POST https://api.dwolla.com/exchanges/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "_links": { "redirect-url": { "href": "https://www.yourdomain.com/iav-callback" } } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var exchangeUrl = "https://api.dwolla.com/exchanges/74a207b2-b7b7-4efa-8bf8-582148e7b980"; var requestBody = { _links: { "redirect-url": { href: "https://www.yourdomain.com/iav-callback", }, }, }; dwolla .post(`${exchangeUrl}/exchange-sessions`, requestBody) .then((res) => res.headers.get("location")); // => 'https://api.dwolla.com/exchange-sessions/fcd15e5f-8d13-4570-a9b7-7fb49e55941d' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python exchange_url = 'https://api.dwolla.com/exchanges/74a207b2-b7b7-4efa-8bf8-582148e7b980' request_body = { '_links': { 'redirect-url': { 'href': 'https://www.yourdomain.com/iav-callback' } } } reauthExchange = app_token.post('%s/exchange-sessions' % exchange_url, request_body) reauthExchange.headers['location'] # => 'https://api.dwolla.com/exchange-sessions/fcd15e5f-8d13-4570-a9b7-7fb49e55941d' - lang: php source: | /** * No example for this language yet. **/ - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby exchange_url = 'https://api.dwolla.com/exchanges/74a207b2-b7b7-4efa-8bf8-582148e7b980' request_body = { _links: { 'redirect-url': { href: "https://www.yourdomain.com/iav-callback" } } } reauthExchange = app_token.post "#{exchange_url}/exchange-sessions", request_body reauthExchange.response_headers[:location] # => "https://api.dwolla.com/exchange-sessions/fcd15e5f-8d13-4570-a9b7-7fb49e55941d" parameters: - name: id in: path description: Exchange's unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' requestBody: required: false description: | Request body containing the redirect URL. Required for: - Plaid mobile sessions Not required for: - Plaid web sessions content: application/vnd.dwolla.v1.hal+json: schema: oneOf: - $ref: '#/components/schemas/CreateReAuthExchangeSessionForWeb' - $ref: '#/components/schemas/CreateReAuthExchangeSessionWithRedirect' responses: '201': description: created headers: Location: $ref: '#/components/headers/Location' '400': description: validation error content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: ValidationError message: type: string example: Invalid request parameters '403': description: forbidden content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: forbidden message: type: string example: Not authorized to create re-authentication exchange session. /customers/{id}/available-exchange-connections: get: tags: - exchange sessions summary: List available exchange connections description: Returns available exchange connections for a customer's bank accounts authorized through MX Connect. Each connection includes an account name and availableConnectionToken required to create exchanges and funding sources for transfers. operationId: listAvailableExchangeConnections x-speakeasy-group: customers x-speakeasy-name-override: listAvailableConnections x-codeSamples: - lang: bash source: | GET https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694/available-exchange-connections Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var customerUrl = "https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694"; dwolla .get(`${customerUrl}/available-exchange-connections`) .then( (res) => res.body._embedded["available-exchange-connections"][0] .availableConnectionToken ); // => 'eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0=' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python customer_url = 'https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694' available_exchange_connection = app_token.get('%s/available-exchange-connections' % customer_url) available_exchange_connection.body['_embedded']['available-exchange-connections'][0]['availableConnectionToken'] # => 'eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0=' - lang: php source: | /** * No example for this language yet. **/ - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby customer_url = 'https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694' available_exchange_connections = app_token.get "#{customer_url}/available-exchange-connections" available_exchange_connections._embedded['available-exchange-connections'][0].availableConnectionToken # => "eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0=" parameters: - name: id in: path description: Customer's unique identifier required: true schema: type: string - $ref: '#/components/parameters/Accept' responses: '200': description: successful operation content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/AvailableExchangeConnections' '404': description: not found content: application/vnd.dwolla.v1.hal+json: schema: type: object properties: code: type: string example: NotFound message: type: string example: The requested resource was not found. Check Customer ID. /client-tokens: post: tags: - client tokens summary: Create a client token description: Create a client token for secure authentication within Dwolla Drop-in components. Requires a granular permission action and a Customer link to define what operations the end user can perform within the component. Returns a short-lived token for configuring client-side Drop-in components including customer creation, verification, funding source management, and payment processing. Essential for implementing secure, embeddable UI components without exposing application credentials to the frontend. operationId: createClientToken x-speakeasy-group: clientTokens x-speakeasy-name-override: create x-codeSamples: - lang: bash source: | POST https://api-sandbox.dwolla.com/client-tokens Accept: application/vnd.dwolla.v1.hal+json Content-Type: application/json Authorization: Bearer {{token}} { "action": "customer.update", "_links": { "customer": { "href": "https://api-sandbox.dwolla.com/customers/{{customerId}}" } } } - lang: javascript source: | // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node var requestBody = { _links: { customer: { href: "https://api-sandbox.dwolla.com/customers/707177c3-bf15-4e7e-b37c-55c3898d9bf4", }, }, action: "customer.update", }; dwolla.post("/client-tokens", requestBody).then((res) => res.body.token); // => '4adF858jPeQ9RnojMHdqSD2KwsvmhO7Ti7cI5woOiBGCpH5krY' - lang: python source: | # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python request_body = { '_links': { 'customer': { 'href': 'https://api-sandbox.dwolla.com/customers/707177c3-bf15-4e7e-b37c-55c3898d9bf4' } }, 'action': 'customer.update' } client_token = app_token.post('client-tokens', request_body) client_token.body['token'] # => '4adF858jPeQ9RnojMHdqSD2KwsvmhO7Ti7cI5woOiBGCpH5krY' - lang: php source: | array ( 'customer' => array ( 'href' => 'https://api-sandbox.dwolla.com/customers/8779a1f7-7a98-4a86-921e-83539f6c895e', ), ), 'action' => 'customer.update' ); $clientTokensApi = new DwollaSwagger\TokensApi($apiClient); $clientToken = $clientTokensApi->clientTokens($request_body); ?> - lang: ruby source: | # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby request_body = { :_links => { :customer => { :href => "https://api-sandbox.dwolla.com/customers/707177c3-bf15-4e7e-b37c-55c3898d9bf4" } }, :action => "customer.update" } client_token = app_token.post "client-tokens", request_body client_token.token # => "4adF858jPeQ9RnojMHdqSD2KwsvmhO7Ti7cI5woOiBGCpH5krY" parameters: - $ref: '#/components/parameters/Accept' requestBody: required: true content: application/json: schema: type: object required: - action - _links properties: action: type: string description: A granular permission for the Customer performing an action within a drop-in component example: customer.update _links: type: object required: - customer properties: customer: type: object required: - href properties: href: type: string format: uri description: Link to the Customer performing the action example: https://api-sandbox.dwolla.com/customers/707177c3-bf15-4e7e-b37c-55c3898d9bf4 responses: '200': description: Client token created successfully content: application/vnd.dwolla.v1.hal+json: schema: type: object required: - token properties: token: type: string description: The client token that can be used with drop-in components example: 4adF858jPeQ9RnojMHdqSD2KwsvmhO7Ti7cI5woOiBGCpH5krY '400': description: Bad Request content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/BadRequestError' '403': description: Forbidden content: application/vnd.dwolla.v1.hal+json: schema: $ref: '#/components/schemas/ForbiddenError' components: securitySchemes: clientCredentials: type: oauth2 flows: clientCredentials: tokenUrl: /token x-speakeasy-token-endpoint-authentication: client_secret_basic scopes: {} parameters: Accept: name: Accept in: header required: true description: The media type of the response. Must be application/vnd.dwolla.v1.hal+json schema: type: string enum: - application/vnd.dwolla.v1.hal+json default: application/vnd.dwolla.v1.hal+json schemas: HalLink: title: HalLink type: object properties: href: type: string example: https://api.dwolla.com type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: resource-type Root: title: Root type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' Account: title: Account type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: 2e21f010-3023-4891-aced-ed726d7cd5e1 name: type: string example: Jane Doe's Business timezoneOffset: type: number example: -6 type: type: string example: Commercial NotFoundError: title: NotFoundError description: Error response schema for 404 NotFound type: object required: - code - message properties: code: type: string example: NotFound message: type: string example: The requested resource was not found. CreateAccountFundingSource: title: CreateAccountFundingSource type: object properties: _links: type: object properties: exchange: type: object properties: href: type: string name: type: string bankAccountType: type: string enum: - checking - savings accountNumber: type: string routingNumber: type: string channels: type: array items: type: string required: - name - bankAccountType - accountNumber - routingNumber BadRequestSchema: title: BadRequestSchema type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. DuplicateResourceSchema: title: DuplicateResourceSchema type: object required: - code - message properties: code: type: string example: DuplicateResource message: type: string example: 'Bank already exists: id=df8392e5-4c06-42ed-b247-c098ed6f5a11' _links: type: object properties: about: type: object properties: href: type: string example: https://api.dwolla.com/funding-sources/df8392e5-4c06-42ed-b247-c098ed6f5a11 type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: funding-source FundingSource: title: FundingSource type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e status: type: string example: unverified type: type: string example: bank bankAccountType: type: string example: checking name: type: string example: My bank created: type: string format: date-time example: '2022-07-23T00:18:21.419Z' removed: type: boolean example: true channels: type: array description: Payment processing channels supported by this funding source items: type: string enum: - ach - real-time-payments - wire - external example: ach bankName: type: string example: SANDBOX TEST BANK fingerprint: type: string example: 5012989b55af15400e8102f95d2ec5e7ce3aef45c01613280d80a236dd8d6c bankUsageType: type: string description: The usage type of the bank account. Indicates if this is a settlement account for card network processors. enum: - card-network example: card-network cardDetails: type: object description: Card-specific details. Only present when type is 'card'. properties: brand: type: string description: The card brand/network (e.g., Visa, Mastercard, American Express) example: Visa lastFour: type: string description: The last four digits of the card number example: '1234' expirationMonth: type: integer description: The card expiration month (1-12) example: 12 minimum: 1 maximum: 12 expirationYear: type: integer description: The card expiration year (4-digit year) example: 2026 nameOnCard: type: string description: The cardholder name as it appears on the card example: John Doe bin: type: string description: Bank Identification Number (BIN) - the first 6-8 digits of the card number example: '40247644' billingAddress: type: object description: The billing address associated with the card properties: address1: type: string description: First line of the street address example: 552 test address2: type: string description: Second line of the street address (optional) example: Apt 4B address3: type: string description: Third line of the street address (optional) example: Unit 101 city: type: string description: City name example: Des Moines stateProvinceRegion: type: string description: Two-letter state, province, or region code example: IA country: type: string description: Two-letter country code (ISO 3166-1 alpha-2) example: US postalCode: type: string description: Postal code or ZIP code example: '50310' FundingSources: title: FundingSources type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: funding-sources: type: array items: $ref: '#/components/schemas/FundingSource' total: type: integer format: int32 example: 3 Transfer: title: Transfer type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: 15c6bcce-46f7-e811-8112-e8dd3bececa8 status: type: string example: pending amount: type: object properties: value: type: string example: '42.00' currency: type: string example: USD created: type: string format: date-time example: '2018-12-03T22:00:22.970Z' clearing: type: object properties: source: type: string example: standard destination: type: string example: same-day metadata: type: object properties: paymentId: type: string example: '12345678' note: type: string example: Payment for completed work Dec. 1 achDetails: type: object description: ACH-specific details for the transfer. Present when transfer was processed via ACH network. properties: source: type: object description: Information sent to the source/originating bank account along with the transfer properties: addenda: type: object description: Contains addenda information for the transfer properties: values: type: array items: type: string example: ABC123_AddendaValue description: An array containing a single string addenda value beneficiaryName: type: string description: Beneficiary of the transaction's name. In general, should match the user onboarded to the Platform's name example: John Doe companyEntryDescription: type: string description: Describes the purpose of the transaction example: PAYMENT enum: - REVERSAL - RECLAIM - NO CHECK - AUTOENROLL - REDEPCHECK - RETURN FEE - RETRY PMNT - HEALTHCARE - PAYMENT companyId: type: string description: Numeric identifier of originator example: '1234567890' companyName: type: string description: Name of the originator example: Acme Corporation effectiveDate: type: string format: date description: The date when the ACH transaction becomes effective, formatted as YYYY-MM-DD. This is typically the settlement date for the transaction example: '2021-12-01' postingData: type: string description: Suggested memo line format for bank statements, structured as companyName:companyDiscretionaryData:beneficiaryName example: Acme Corporation:Payment Reference:John Doe routingNumber: type: string description: Routing number of Originating Depository Financial Institution (ODFI). Identifies the financial institution that originated the ACH transaction example: '222222226' traceId: type: string description: A unique identifier for tracing the ACH transaction through the banking network. Used for transaction tracking and reconciliation purposes example: '222222225926346' destination: type: object description: Information sent to the destination/receiving bank account along with the transfer properties: addenda: type: object description: Contains addenda information for the transfer properties: values: type: array items: type: string example: ZYX987_AddendaValue description: An array containing a single string addenda value beneficiaryName: type: string description: Beneficiary of the transaction's name. In general, should match the user onboarded to the Platform's name example: Jane Smith companyEntryDescription: type: string description: Describes the purpose of the transaction example: PAYMENT enum: - REVERSAL - RECLAIM - NO CHECK - AUTOENROLL - REDEPCHECK - RETURN FEE - RETRY PMNT - HEALTHCARE - PAYMENT companyId: type: string description: Numeric identifier of originator example: '1234567890' companyName: type: string description: Name of the originator example: Acme Corporation effectiveDate: type: string format: date description: The date when the ACH transaction becomes effective, formatted as YYYY-MM-DD. This is typically the settlement date for the transaction example: '2021-12-01' postingData: type: string description: Suggested memo line format for bank statements, structured as companyName:companyDiscretionaryData:beneficiaryName example: Acme Corporation:Payment Reference:Jane Smith routingNumber: type: string description: Routing number of Originating Depository Financial Institution (ODFI). Identifies the financial institution that originated the ACH transaction example: '222222226' traceId: type: string description: A unique identifier for tracing the ACH transaction through the banking network. Used for transaction tracking and reconciliation purposes example: '222222225926346' rtpDetails: type: object description: Real-Time Payments (RTP) network specific details. Present when transfer was processed via RTP network. properties: destination: type: object description: RTP destination details with network identifiers properties: remittanceData: type: string description: Remittance information included in the transfer request example: ABC_123 Remittance Data networkId: type: string description: Unique identifier for the transfer within the RTP network example: 20210617021214273T1BG27487110796028 endToEndReferenceId: type: string description: End-to-end reference identifier for the RTP transfer example: E2E-RTP-20210617-001 fedNowDetails: type: object description: FedNow Service network specific details. Present when transfer was processed via FedNow network. properties: destination: type: object description: FedNow destination details with network identifiers properties: remittanceData: type: string description: Remittance information included in the transfer request example: ABC_123 Remittance Data networkId: type: string description: Unique identifier for the transfer within the FedNow network example: 20240115123456789FEDNOW123456 endToEndReferenceId: type: string description: End-to-end reference identifier for the FedNow transfer example: E2E-FEDNOW-20240115-001 correlationId: type: string example: 8a2cdc8d-629d-4a24-98ac-40b735229fe2 processingChannel: type: object properties: destination: type: string enum: - real-time-payments - fed-now description: The payment network used to process the transfer example: real-time-payments Transfers: title: Transfers type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: transfers: type: array items: $ref: '#/components/schemas/Transfer' total: type: integer example: 100 TransferAmount: title: TransferAmount type: object required: - value - currency properties: value: type: string example: '5.00' currency: type: string example: USD MassPayment: title: MassPayment type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: 11ac4051-7b76-44fc-87ab-ae23012393f0 status: type: string example: complete created: type: string format: date-time example: '2022-01-20T17:41:41.000Z' metaData: type: object total: $ref: '#/components/schemas/TransferAmount' totalFees: $ref: '#/components/schemas/TransferAmount' correlationId: type: string example: CID-8a2cdc8d-629d-4a24-98ac-40b735229fe2 MassPayments: title: MassPayments type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: mass-payments: type: array items: $ref: '#/components/schemas/MassPayment' total: type: integer example: 100 BaseCustomer: title: BaseCustomer description: Base schema containing common fields for all customer types type: object required: - _links - id - firstName - lastName - email - created properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: c41125c5-99c4-4303-a9f6-d066d28a61e3 firstName: type: string example: Jane lastName: type: string example: Doe email: type: string example: janedoe@mail.com correlationId: type: string example: CID-abe2bb3d-d2ff-433b-95a3-0debd960ed25 created: type: string format: date-time example: '2022-10-07T16:46:13.023Z' UnverifiedCustomer: title: UnverifiedCustomer description: Unverified customer - basic customer type with no KYC verification allOf: - $ref: '#/components/schemas/BaseCustomer' - type: object required: - type - status properties: type: type: string enum: - unverified example: unverified status: type: string enum: - unverified - suspended - deactivated example: unverified businessName: type: string example: Jane Corp llc ReceiveOnlyCustomer: title: ReceiveOnlyCustomer description: Receive-only user - can only receive funds, not send allOf: - $ref: '#/components/schemas/BaseCustomer' - type: object required: - type - status properties: type: type: string enum: - receive-only example: receive-only status: type: string enum: - unverified - suspended - deactivated example: unverified businessName: type: string example: Jane Corp llc VerifiedPersonalCustomer: title: VerifiedPersonalCustomer description: Verified personal customer - fully KYC verified individual with send and receive capabilities allOf: - $ref: '#/components/schemas/BaseCustomer' - type: object required: - type - status - address1 - city - state - postalCode properties: type: type: string enum: - personal example: personal status: type: string enum: - verified - suspended - deactivated - document - retry - kba example: verified address1: type: string example: 123 Main Street address2: type: string example: Ste 123 city: type: string example: Des Moines state: type: string example: IA postalCode: type: string example: '50309' VerifiedSolePropCustomer: title: VerifiedSolePropCustomer description: Verified sole proprietorship customer - distinguished from VerifiedBusinessCustomer by businessType=soleProprietorship allOf: - $ref: '#/components/schemas/BaseCustomer' - type: object required: - type - status - address1 - city - state - postalCode - businessName - businessType - businessClassification properties: type: type: string enum: - business example: business status: type: string enum: - verified - suspended - deactivated - document - retry example: verified address1: type: string example: 123 Main Street address2: type: string example: Ste 123 city: type: string example: Des Moines state: type: string example: IA postalCode: type: string example: '50309' businessName: type: string example: Jane Corp businessType: type: string enum: - soleProprietorship example: soleProprietorship businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 VerifiedBusinessCustomer: title: VerifiedBusinessCustomer description: Verified business customer (LLC, Corporation, Partnership) - distinguished from VerifiedSolePropCustomer by presence of a controller object allOf: - $ref: '#/components/schemas/BaseCustomer' - type: object required: - type - status - address1 - city - state - postalCode - businessName - businessType - businessClassification - controller properties: type: type: string enum: - business example: business status: type: string enum: - verified - suspended - deactivated - document - retry example: verified address1: type: string example: 123 Main Street address2: type: string example: Ste 123 city: type: string example: Des Moines state: type: string example: IA postalCode: type: string example: '50309' phone: type: string example: '555555555' website: type: string example: https://www.dwolla.com businessName: type: string example: Jane Corp doingBusinessAs: type: string example: Jane's Coffee and Sweets businessType: type: string enum: - llc - corporation - partnership example: llc businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 controller: type: object required: - firstName - lastName - title - address properties: firstName: type: string example: John lastName: type: string example: Controller title: type: string example: CEO address: type: object properties: address1: type: string example: 462 Main Street address2: type: string example: Suite 123 address3: type: string example: Unit 123 city: type: string example: Des Moines postalCode: type: string example: '50309' country: type: string example: USA stateProvinceRegion: type: string example: IA Customers: title: Customers type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: customers: type: array items: oneOf: - $ref: '#/components/schemas/UnverifiedCustomer' - $ref: '#/components/schemas/ReceiveOnlyCustomer' - $ref: '#/components/schemas/VerifiedPersonalCustomer' - $ref: '#/components/schemas/VerifiedSolePropCustomer' - $ref: '#/components/schemas/VerifiedBusinessCustomer' total: type: integer example: 2 ForbiddenError: title: ForbiddenError description: Error response schema for 403 Forbidden type: object required: - code - message properties: code: type: string example: Forbidden message: type: string example: The supplied credentials are not authorized for this resource. CreateReceiveOnlyUser: title: CreateReceiveOnlyUser description: Create a Receive Only User type: object required: - firstName - lastName - email - type properties: firstName: type: string example: Account lastName: type: string example: Admin email: type: string example: accountAdmin@email.com type: type: string const: receive-only ipAddress: type: string example: 143.156.7.8 phone: type: string example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 businessName: type: string example: Jane Corp llc CreateUnverifiedCustomer: title: CreateUnverifiedCustomer description: Create an Unverified Customer type: object required: - firstName - lastName - email - type properties: firstName: type: string example: Account lastName: type: string example: Admin email: type: string example: accountAdmin@email.com type: type: string const: unverified ipAddress: type: string example: 143.156.7.8 phone: type: string example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 businessName: type: string example: Jane Corp llc CreateVerifiedPersonalCustomer: title: CreateVerifiedPersonalCustomer description: Create a Verified Personal customer type: object required: - firstName - lastName - email - address1 - city - state - postalCode - dateOfBirth - type - ssn properties: firstName: type: string example: Account lastName: type: string example: Admin email: type: string example: accountAdmin@email.com ipAddress: type: string example: 143.156.7.8 phone: type: string example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 type: type: string const: personal address1: type: string example: 99-99 33rd St address2: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' ssn: type: string example: '1234' dateOfBirth: type: string example: '1980-09-12' CreateVerifiedSolePropCustomer: title: CreateVerifiedSolePropCustomer description: Create a Verified Business customer (Sole Proprietorship) type: object required: - firstName - lastName - email - address1 - city - state - postalCode - dateOfBirth - type - ssn - businessType - businessName - businessClassification properties: firstName: type: string example: John lastName: type: string example: Doe email: type: string example: johndoe@email.com ipAddress: type: string example: 143.156.7.8 phone: type: string example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 type: type: string const: business address1: type: string example: 99-99 33rd St address2: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' ssn: type: string example: '1234' dateOfBirth: type: string example: '1980-09-12' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessName: type: string example: Jane Corp doingBusinessAs: type: string example: Jane's Electronics ein: type: string example: 00-0000000 website: type: string example: https://www.domain.com businessType: type: string const: soleProprietorship InternationalAddress: title: InternationalAddress type: object required: - address1 - city - country - stateProvinceRegion properties: address1: type: string example: 462 Main Street address2: type: string example: Suite 123 address3: type: string example: Unit 123 city: type: string example: Des Moines postalCode: type: string example: '50309' country: type: string example: USA stateProvinceRegion: type: string example: IA CreateVerifiedBusinessCustomerWithController: title: CreateVerifiedBusinessCustomerWithController description: Create a Verified Business customer with a US controller type: object required: - firstName - lastName - email - address1 - city - state - postalCode - type - businessType - controller - businessName - businessClassification - ein properties: firstName: type: string example: Jane lastName: type: string example: Business email: type: string example: jane.business@email.com ipAddress: type: string example: 143.156.7.8 phone: type: string example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 type: type: string const: business address1: type: string example: 99-99 33rd St address2: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessName: type: string example: Jane Corp doingBusinessAs: type: string example: Jane's Electronics ein: type: string example: 00-0000000 website: type: string example: https://www.domain.com controller: type: object required: - firstName - lastName - title - dateOfBirth - address - ssn properties: firstName: type: string example: John lastName: type: string example: Controller title: type: string example: CEO dateOfBirth: type: string example: '1980-01-31' address: $ref: '#/components/schemas/InternationalAddress' ssn: type: string example: '1234' businessType: type: string enum: - llc - corporation - partnership example: llc Passport: title: Passport type: object required: - number - country properties: number: type: string country: type: string CreateVerifiedBusinessCustomerWithInternationalController: title: CreateVerifiedBusinessCustomerWithInternationalController description: Create a Verified Business customer with an international (non US) controller type: object required: - firstName - lastName - email - address1 - city - state - postalCode - type - businessType - controller - businessName - businessClassification - ein properties: firstName: type: string example: Jane lastName: type: string example: Business email: type: string example: jane.business@email.com ipAddress: type: string example: 143.156.7.8 phone: type: string example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 type: type: string const: business address1: type: string example: 99-99 33rd St address2: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessName: type: string example: Jane Corp doingBusinessAs: type: string example: Jane's Electronics ein: type: string example: 00-0000000 website: type: string example: https://www.domain.com controller: type: object required: - firstName - lastName - title - dateOfBirth - address - passport properties: firstName: type: string example: John lastName: type: string example: Controller title: type: string example: CEO dateOfBirth: type: string example: '1980-01-31' address: $ref: '#/components/schemas/InternationalAddress' passport: $ref: '#/components/schemas/Passport' businessType: type: string enum: - llc - corporation - partnership example: llc BadRequestError: title: BadRequestError description: Error response schema for 400 Bad Request type: object required: - code - message properties: code: type: string example: BadRequest message: type: string example: The request body contains bad syntax or is incomplete. DeactivateCustomer: title: DeactivateCustomer description: Deactivate a Customer type: object required: - status properties: status: type: string example: deactivated ReactivateCustomer: title: ReactivateCustomer description: Reactivate a Customer type: object required: - status properties: status: type: string example: reactivated SuspendCustomer: title: SuspendCustomer description: Suspend a Customer type: object required: - status properties: status: type: string example: suspended UpdateUnverifiedAndReceiveOnly: title: UpdateUnverifiedAndReceiveOnly description: Update Unverified Customer or Receive Only User Information type: object properties: firstName: type: string example: John lastName: type: string example: Doe email: type: string example: accountAdmin@email.com businessName: type: string example: Jane Corp UpdateVerifiedPersonal: title: UpdateVerifiedPersonal description: Update Verified Personal Customer Information type: object properties: email: type: string example: accountAdmin@email.com ipAddress: type: string example: 143.156.7.8 address1: type: string example: 123 Main Street address2: type: string example: XYZ Suite city: type: string example: Des Moines state: type: string example: IA postalCode: type: string example: '50309' phone: type: string example: '5555555555' UpdateVerifiedBusiness: title: UpdateVerifiedBusiness description: Update Verified Business Customer Information (both Sole Proprietorship and Non-Sole Proprietorship) allOf: - $ref: '#/components/schemas/UpdateVerifiedPersonal' - type: object properties: doingBusinessAs: type: string example: Jane's Electronics website: type: string example: https://www.domain.com UpgradeToUnverified: title: UpgradeToUnverified description: Upgrade Receive Only User to Unverified Customer type: object required: - type properties: type: type: string example: unverified UpgradeToVerifiedPersonal: title: UpgradeToVerifiedPersonal description: Upgrade Unverified Customer to Verified Personal Customer type: object required: - firstName - lastName - email - address1 - city - state - postalCode - dateOfBirth - type - ssn properties: firstName: type: string example: John lastName: type: string example: Doe email: type: string example: johndoe@email.net ipAddress: type: string example: 10.10.10.10 type: type: string example: personal address1: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' dateOfBirth: type: string example: '1970-01-01' ssn: type: string example: '1234' UpgradeToVerifiedBusiness: title: UpgradeToVerifiedBusiness description: Upgrade Unverified Customer to Verified Business Customer type: object required: - firstName - lastName - email - type - address1 - city - state - postalCode - controller - businessClassification - businessType - businessName - ein properties: firstName: type: string example: Account lastName: type: string example: Admin email: type: string example: accountAdmin@email.com ipAddress: type: string example: 143.156.7.8 type: type: string example: business address1: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' controller: type: object required: - firstName - lastName - title - dateOfBirth - address properties: firstName: type: string example: John lastName: type: string example: Controller title: type: string example: CEO ssn: type: string example: '6789' dateOfBirth: type: string example: '1980-01-31' address: type: object required: - address1 - city - stateProvinceRegion - postalCode - country properties: address1: type: string example: 1749 18th st address2: type: string example: apt 12 city: type: string example: Des Moines stateProvinceRegion: type: string example: IA postalCode: type: string example: '50266' country: type: string example: US businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessType: type: string example: llc businessName: type: string example: Jane Corp ein: type: string example: 00-0000000 UpgradeToVerifiedSoleProp: title: UpgradeToVerifiedSoleProp description: Upgrade Unverified Customer to Verified Business Customer (Sole Proprietorship) type: object required: - firstName - lastName - email - type - dateOfBirth - ssn - address1 - city - state - postalCode - businessClassification - businessType - businessName - ein properties: firstName: type: string example: Business lastName: type: string example: Owner email: type: string example: solePropBusiness@email.com ipAddress: type: string example: 143.156.7.8 type: type: string example: business dateOfBirth: type: string example: '1980-01-31' ssn: type: string example: '6789' address1: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessType: type: string example: soleProprietorship businessName: type: string example: Jane Corp ein: type: string example: 00-0000000 RetryVerifiedPersonal: title: RetryVerifiedPersonal description: Retry Verification for Verified Personal Customer type: object required: - firstName - lastName - email - address1 - city - state - postalCode - dateOfBirth - type - ssn properties: firstName: type: string example: John lastName: type: string example: Doe email: type: string example: johndoe@email.net ipAddress: type: string example: 10.10.10.10 type: type: string example: personal address1: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' dateOfBirth: type: string example: '1970-01-01' ssn: type: string example: '1234' RetryVerifiedBusinessNoController: title: RetryVerifiedBusinessNoController description: Retry Verification for Verified Business Customer where only Business Details need to be retried type: object required: - firstName - lastName - email - type - address1 - city - state - postalCode - businessClassification - businessType - businessName - ein properties: firstName: type: string example: Account lastName: type: string example: Admin email: type: string example: accountAdmin@email.com ipAddress: type: string example: 143.156.7.8 type: type: string example: business address1: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessType: type: string example: llc businessName: type: string example: Jane Corp ein: type: string example: 00-0000000 RetryVerifiedBusinessWithController: title: RetryVerifiedBusinessWithController description: Retry Verification for Verified Business Customer where Business Details as well as Controller Details need to be retried type: object required: - firstName - lastName - email - type - address1 - city - state - postalCode - controller - businessClassification - businessType - businessName - ein properties: firstName: type: string example: Account lastName: type: string example: Admin email: type: string example: accountAdmin@email.com ipAddress: type: string example: 143.156.7.8 type: type: string example: business address1: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' controller: type: object required: - firstName - lastName - title - ssn - dateOfBirth - address properties: firstName: type: string example: John lastName: type: string example: Controller title: type: string example: CEO ssn: type: string example: '123456789' dateOfBirth: type: string example: '1980-01-31' address: type: object required: - address1 - city - stateProvinceRegion - postalCode - country properties: address1: type: string example: 1749 18th st address2: type: string example: apt 12 city: type: string example: Des Moines stateProvinceRegion: type: string example: IA postalCode: type: string example: '50266' country: type: string example: US businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessType: type: string example: llc businessName: type: string example: Jane Corp ein: type: string example: 00-0000000 RetryVerifiedBusinessWithInternationalController: title: RetryVerifiedBusinessWithInternationalController description: Retry Verification for Verified Business Customer where Business Details as well as International Controller Details need to be retried type: object required: - firstName - lastName - email - type - address1 - city - state - postalCode - controller - businessClassification - businessType - businessName - ein properties: firstName: type: string example: Account lastName: type: string example: Admin email: type: string example: accountAdmin@email.com ipAddress: type: string example: 143.156.7.8 type: type: string example: business address1: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' controller: type: object required: - firstName - lastName - title - dateOfBirth - address - passport properties: firstName: type: string example: John lastName: type: string example: Controller title: type: string example: CEO dateOfBirth: type: string example: '1980-01-31' address: type: object required: - address1 - city - country - stateProvinceRegion properties: address1: type: string example: 462 Main Street address2: type: string example: Suite 123 address3: type: string example: Unit 123 city: type: string example: Des Moines postalCode: type: string example: '50309' country: type: string example: USA stateProvinceRegion: type: string example: IA passport: type: object required: - number - country properties: number: type: string country: type: string businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessType: type: string example: llc businessName: type: string example: Jane Corp ein: type: string example: 00-0000000 RetryVerifiedSoleProp: title: RetryVerifiedSoleProp description: Retry Verification for Verified Business Customer (Sole Proprietorship) type: object required: - firstName - lastName - email - type - dateOfBirth - ssn - address1 - city - state - postalCode - businessClassification - businessType - businessName - ein properties: firstName: type: string example: Business lastName: type: string example: Owner email: type: string example: solePropBusiness@email.com ipAddress: type: string example: 143.156.7.8 type: type: string example: business dateOfBirth: type: string example: '1980-01-31' ssn: type: string example: '6789' address1: type: string example: 99-99 33rd St city: type: string example: Some City state: type: string example: NY postalCode: type: string example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 businessType: type: string example: soleProprietorship businessName: type: string example: Jane Corp ein: type: string example: 00-0000000 BusinessClassification: title: BusinessClassification type: object properties: _links: type: object properties: self: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: industry-classifications: type: array items: type: object properties: id: type: string example: 9ed3f66b-7d6f-11e3-95ac-5404a6144203 name: type: string example: Wineries id: type: string example: 9ed3f669-7d6f-11e3-b545-5404a6144203 name: type: string example: Food retail and service BusinessClassifications: title: BusinessClassifications type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: business-classifications: type: array items: $ref: '#/components/schemas/BusinessClassification' total: type: integer format: int32 example: 3 BeneficialOwner: title: BeneficialOwner description: Request body model for a Beneficial Owner type: object required: - _links - id - firstName - lastName - address - verificationStatus - created properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e firstName: type: string example: John lastName: type: string example: Doe address: $ref: '#/components/schemas/InternationalAddress' verificationStatus: type: string enum: - verified - document - incomplete example: verified created: type: string format: date-time example: '2022-07-23T00:18:21.419Z' BeneficialOwners: title: BeneficialOwners description: Request model for list beneficial owners type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: beneficial-owners: type: array items: $ref: '#/components/schemas/BeneficialOwner' CreateUSBeneficialOwner: title: CreateUSBeneficialOwner description: Create a US Beneficial Owner (identified by SSN). For US-based beneficial owners only. Use SSN for identity verification instead of passport. required: - firstName - lastName - dateOfBirth - address - ssn type: object properties: firstName: type: string example: John lastName: type: string example: Doe dateOfBirth: type: string example: '1980-01-31' address: $ref: '#/components/schemas/InternationalAddress' ssn: type: string example: '123456789' CreateInternationalBeneficialOwner: title: CreateInternationalBeneficialOwner description: Create an International Beneficial Owner (identified by Passport). For non-US beneficial owners who don't have a US SSN. Requires passport information for identity verification. required: - firstName - lastName - dateOfBirth - address - passport type: object properties: firstName: type: string example: Jane lastName: type: string example: Smith dateOfBirth: type: string example: '1985-03-15' address: $ref: '#/components/schemas/InternationalAddress' passport: $ref: '#/components/schemas/Passport' ValidationErrorSchema: title: ValidationErrorSchema type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. BeneficialOwnership: title: BeneficialOwnership type: object required: - _links - status properties: _links: type: object properties: self: $ref: '#/components/schemas/HalLink' status: type: string enum: - uncertified - certified - recertify example: uncertified Document: title: Document description: Identity verification document for a customer or beneficial owner type: object required: - _links - id - status - documentVerificationStatus - type - created properties: _links: type: object properties: self: $ref: '#/components/schemas/HalLink' id: type: string description: Unique identifier for the document example: 56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc status: type: string description: Current status of the document upload enum: - pending - reviewed example: reviewed type: type: string description: Type of identity document uploaded enum: - passport - license - idCard - other example: passport created: type: string format: date-time description: ISO-8601 timestamp when the document was uploaded example: '2015-09-29T21:42:16.000Z' documentVerificationStatus: type: string description: Verification status of the document after review enum: - pending - accepted - rejected example: rejected failureReason: type: string description: Primary reason why document verification failed (if rejected) example: ScanDobMismatch allFailureReasons: type: array description: Complete list of all failure reasons if document verification was rejected items: type: object required: - reason - description properties: reason: type: string description: Failure reason code example: ScanDobMismatch description: type: string description: Human-readable explanation of the failure reason example: Scan DOB does not match DOB on account Documents: title: Documents type: object required: - _links - _embedded - total properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object required: - documents properties: documents: type: array items: $ref: '#/components/schemas/Document' total: type: integer example: 2 MaximumNumberOfResourcesSchema: title: MaximumNumberOfResourcesSchema type: object required: - code - message properties: code: type: string example: maximumNumberOfResources message: type: string example: Max of four files upload allowed. Please wait for Dwolla to manually check the documents. InvalidFileTypeSchema: title: InvalidFileTypeSchema type: object required: - code - message properties: code: type: string example: invalidFileType message: type: string example: 'File types supported: Personal IDs - .jpg, .jpeg or .png. Business Documents - .jpg, .jpeg, .png, or .pdf.' InvalidResourceStateSchema: title: InvalidResourceStateSchema type: object required: - code - message properties: code: type: string example: invalidResourceState message: type: string example: Resource cannot be modified. Document creation not allowed for already verified Customers or non-verified Customer types. NotAuthorizedSchema: title: NotAuthorizedSchema type: object required: - code - message properties: code: type: string example: notAuthorized message: type: string example: Not authorized to create documents. InvalidKbaSessionError: title: InvalidKbaSessionError type: object required: - code - message properties: code: type: string example: InvalidResourceState message: type: string example: The kba session is no longer valid. ExpiredKbaSessionError: title: ExpiredKbaSessionError type: object required: - code - message properties: code: type: string example: InvalidResourceState message: type: string example: The kba session has expired. CreateCustomerBankFundingSourceWithAccountNumbers: title: CreateCustomerBankFundingSourceWithAccountNumbers type: object description: Schema for creating a basic bank funding source using routing and account numbers. This is the traditional method of adding a bank account. required: - routingNumber - accountNumber - bankAccountType - name properties: routingNumber: type: string description: A bank routing number that identifies a bank or credit union in the U.S. example: '222222226' accountNumber: type: string description: The bank account number example: '123456789' bankAccountType: type: string enum: - checking - savings - general-ledger - loan description: Type of bank account example: checking name: type: string description: Arbitrary nickname for the funding source. Must be 50 characters or less. example: Jane Doe's Checking verified: type: boolean description: Use when creating an unverified bank account. enum: - false example: false channels: type: array items: type: string enum: - wire description: An array containing a list of processing channels. ACH is the default processing channel for bank transfers. _links: type: object properties: on-demand-authorization: type: object required: - href properties: href: type: string format: uri example: https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388 CreateCustomerBankFundingSourceWithPlaid: title: CreateCustomerBankFundingSourceWithPlaid type: object description: Schema for creating a bank funding source using a Plaid processor token. required: - plaidToken - bankAccountType - name properties: plaidToken: type: string description: A processor token obtained from Plaid for adding and verifying a bank example: processor-sandbox-plaidauth-123456 bankAccountType: type: string enum: - checking - savings description: Type of bank account example: checking name: type: string description: Arbitrary nickname for the funding source. Must be 50 characters or less. example: Jane Doe's Checking channels: type: array items: type: string enum: - wire description: An array containing a list of processing channels. ACH is the default processing channel for bank transfers. _links: type: object properties: on-demand-authorization: type: object required: - href properties: href: type: string format: uri example: https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388 CreateCustomerExchangeFundingSource: title: CreateCustomerExchangeFundingSource type: object description: Schema for creating a funding source using an exchange resource. This method is used when the bank account information is obtained via Instant Account Verification (IAV) through an exchange partner (like Plaid, MX, or Finicity). required: - _links - bankAccountType - name properties: _links: type: object required: - exchange properties: exchange: type: object required: - href properties: href: type: string format: uri example: https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65 on-demand-authorization: type: object required: - href properties: href: type: string format: uri example: https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388 bankAccountType: type: string enum: - checking - savings description: Type of bank account example: checking name: type: string description: Arbitrary nickname for the funding source. Must be 50 characters or less. example: Jane Doe's Checking CreateCustomerVirtualAccountFundingSource: title: CreateCustomerVirtualAccountFundingSource type: object description: Schema for creating a Virtual Account Number (VAN) . VANs are unique account numbers for receiving external transactions into a Dwolla Balance. required: - name - type - bankAccountType properties: name: type: string description: Arbitrary nickname for the funding source. Must be 50 characters or less. example: My First VAN type: type: string enum: - virtual description: Type of funding source. Must be set to "virtual" for VAN creation. example: virtual bankAccountType: type: string enum: - checking description: Type of bank account. Must be "checking" for Virtual Account Numbers. example: checking CreateCustomerCardFundingSourceWithExchange: title: CreateCustomerCardFundingSourceWithExchange type: object description: Schema for creating a debit card funding source using an Exchange. Used for Push to Card. required: - _links - name - cardDetails properties: _links: type: object required: - exchange properties: exchange: type: object required: - href properties: href: type: string format: uri description: URL of the Exchange resource created with a card token example: https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04 name: type: string description: Arbitrary nickname for the debit card funding source. Must be 50 characters or less. example: My Visa Debit Card cardDetails: type: object required: - firstName - lastName - billingAddress properties: firstName: type: string description: Cardholder first name example: Jane lastName: type: string description: Cardholder last name example: Doe billingAddress: type: object description: The billing address associated with the card required: - address1 - city - stateProvinceRegion - country - postalCode properties: address1: type: string description: First line of the street address. Must be 50 characters or less. example: 123 Main St address2: type: string description: Second line of the street address (optional). Must be 100 characters or less. example: Apt 4B address3: type: string description: Third line of the street address (optional). Must be 100 characters or less. example: Unit 101 city: type: string description: City name. Must be 50 characters or less. example: Dallas stateProvinceRegion: type: string description: Two-letter state, province, or region code. example: TX country: type: string description: Two-letter country code (ISO 3166-1 alpha-2) example: US postalCode: type: string description: Postal code or ZIP code example: '76034' CreateCustomerFundingSource: title: Create Customer Funding Source description: | Parameters for creating customer funding sources using different methods: - Bank Account: Traditional method using routing/account numbers - Exchange: Using IAV through exchange partners (Plaid, MX, etc.) - Virtual Account: Creating Virtual Account Numbers (VANs) - Card: Creating debit card funding sources using tokenized card data oneOf: - $ref: '#/components/schemas/CreateCustomerBankFundingSourceWithAccountNumbers' - $ref: '#/components/schemas/CreateCustomerBankFundingSourceWithPlaid' - $ref: '#/components/schemas/CreateCustomerExchangeFundingSource' - $ref: '#/components/schemas/CreateCustomerVirtualAccountFundingSource' - $ref: '#/components/schemas/CreateCustomerCardFundingSourceWithExchange' InactiveExchangeError: title: InactiveExchangeError type: object required: - code - message properties: code: type: string example: InactiveExchange message: type: string example: The Exchange was removed or disabled. InvalidExchangeTokenError: title: InvalidExchangeTokenError type: object required: - code - message properties: code: type: string example: InvalidExchangeToken message: type: string example: The exchange token is not valid to perform this operation. DuplicateFundingSourceError: title: DuplicateFundingSourceError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Duplicate funding source or validation error. Authorization already associated to a funding source. UnsupportedCardCountryError: title: UnsupportedCardCountryError type: object description: Error returned when attempting to create a debit card funding source from an unsupported country required: - code - message - _embedded properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object required: - errors properties: errors: type: array items: type: object required: - code - message - path properties: code: type: string example: Invalid message: type: string example: The card's country is not supported. path: type: string example: /token _links: type: object example: {} InvalidTokenError: title: InvalidTokenError type: object description: Error returned when creating an Exchange with an invalid token, or when the card data is invalid required: - code - message - _embedded properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object required: - errors properties: errors: type: array items: type: object required: - code - message - path properties: code: type: string example: Invalid message: type: string example: The card data is invalid. path: type: string example: /token _links: type: object example: {} MaximumCardsExceededError: title: MaximumCardsExceededError type: object description: Error returned when a customer has exceeded the maximum number of debit card funding sources required: - code - message - _embedded properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object required: - errors properties: errors: type: array items: type: object required: - code - message - path properties: code: type: string example: Invalid message: type: string example: The maximum number of cards has been exceeded. path: type: string example: /_links/exchange CardMissingRequiredFieldsError: title: CardMissingRequiredFieldsError type: object description: Error returned when required fields are missing when creating an Exchange or a debit card funding source required: - code - message - _embedded properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object required: - errors properties: errors: type: array items: type: object required: - code - message - path properties: code: type: string example: Required message: type: string example: Token is required. path: type: string example: /token UpdateUnverifiedBank: title: UpdateUnverifiedBank description: Request body for updating information of an unverified bank funding source type: object required: - name properties: routingNumber: type: string example: '222222226' accountNumber: type: string example: '123456789' bankAccountType: type: string example: checking name: type: string example: Jane Doe’s Checking UpdateVerifiedBank: title: UpdateVerifiedBank description: Request body for updating information of a Verified bank funding source type: object required: - name properties: name: type: string example: Jane Doe’s Checking RemoveBank: title: RemoveBank description: Request body for removing a bank funding source type: object required: - removed properties: removed: type: boolean example: true VerifyMicroDeposits: title: VerifyMicroDeposits description: Request body for verifying micro-deposits type: object required: - amount1 - amount2 properties: amount1: type: object required: - value - currency properties: value: type: string example: '0.02' currency: type: string example: USD amount2: type: object required: - value - currency properties: value: type: string example: '0.03' currency: type: string example: USD OnDemandAuthorization: title: OnDemandAuthorization type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388 bodyText: type: string example: I agree that future payments to Company ABC inc. will be processed by the Dwolla payment system from the selected account above. In order to cancel this authorization, I will change my payment settings within my Company ABC inc. account. buttonText: type: string example: Agree & Continue SourceNotFoundError: title: SourceNotFoundError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Funding source not found. path: type: string example: /_links/source/href _links: type: object example: {} ReceiverNotFoundError: title: ReceiverNotFoundError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Receiver not found. path: type: string example: /_links/destination/href _links: type: object example: {} InvalidSourceFundingSourceError: title: InvalidSourceFundingSourceError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Invalid funding source. path: type: string example: /_links/source/href _links: type: object example: {} SenderRestrictedError: title: SenderRestrictedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Sender restricted. path: type: string example: /_links/source/href _links: type: object example: {} ReceiverRestrictedError: title: ReceiverRestrictedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Receiver restricted. path: type: string example: /_links/destination/href _links: type: object example: {} InvalidMetadataError: title: InvalidMetadataError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Invalid metadata. path: type: string example: /metadata _links: type: object example: {} OperationBlockedError: title: OperationBlockedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Receiver cannot receive from sender. path: type: string example: /_links/destination/href _links: type: object example: {} InvalidAmountLimitError: title: InvalidAmountLimitError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Invalid amount. The supplied amount is greater than your transaction limit. path: type: string example: /amount/value _links: type: object example: {} CannotParseAmountError: title: CannotParseAmountError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Invalid amount. The supplied amount must be a positive number. path: type: string example: /amount/value _links: type: object example: {} InsufficientFundsError: title: InsufficientFundsError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InsufficientFunds message: type: string example: Insufficient funds. path: type: string example: /_links/source/href _links: type: object example: {} FacilitatorFeeAccountNotFoundError: title: FacilitatorFeeAccountNotFoundError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Facilitator fee account not found. path: type: string example: '' _links: type: object example: {} FacilitatorFeeSumTooLargeError: title: FacilitatorFeeSumTooLargeError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Facilitator fee sum too large. path: type: string example: '' _links: type: object example: {} FacilitatorFeeBelowMinimumError: title: FacilitatorFeeBelowMinimumError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Facilitator fee below minimum. path: type: string example: '' _links: type: object example: {} HighRiskError: title: HighRiskError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Due to account restrictions, we are unable to process this transaction. path: type: string example: /_links/destination/href _links: type: object example: {} IncompatibleHoldingsError: title: IncompatibleHoldingsError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Receiver cannot receive from sender. path: type: string example: /_links/destination/href _links: type: object example: {} DirectAccountWithoutBankError: title: DirectAccountWithoutBankError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: RequiresFundingSource message: type: string example: Receiver requires funding source. path: type: string example: /_links/destination/href _links: type: object example: {} SourceSameAsDestinationError: title: SourceSameAsDestinationError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Receiver cannot be the owner of the source funding source. path: type: string example: /_links/destination/href _links: type: object example: {} InvalidFacilitatorError: title: InvalidFacilitatorError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Account cannot facilitate this transaction. path: type: string example: '' _links: type: object example: {} InvalidFacilitatorFeeCollectFromError: title: InvalidFacilitatorFeeCollectFromError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Unable to charge fee to specified destination. path: type: string example: /fees/_links/charge-to/href _links: type: object example: {} InvalidFacilitatorFeeCollectFromCombinationError: title: InvalidFacilitatorFeeCollectFromCombinationError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Currently, all fees must be paid by same destination." path: type: string example: /fees/_links/charge-to/href _links: type: object example: {} InvalidDestinationFundingSourceError: title: InvalidDestinationFundingSourceError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Invalid destination funding source. path: type: string example: /_links/destination/href _links: type: object example: {} InvalidOrRemovedCardDestinationError: title: InvalidOrRemovedCardDestinationError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Destination funding source is either removed or does not exist. path: type: string example: /_links/destination/href _links: type: object example: {} InvalidFacilitatorFeeAmountError: title: InvalidFacilitatorFeeAmountError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Invalid facilitator fee amount. path: type: string example: /fees/_links/charge-to/href _links: type: object example: {} WeeklyReceiveLimitReachedError: title: WeeklyReceiveLimitReachedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Destination customer has reached its weekly receive limit. path: type: string example: /_links/destination/href _links: type: object example: {} InvalidDestinationClearingTypeError: title: InvalidDestinationClearingTypeError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Destination clearing type is currently not enabled. path: type: string example: /clearing/destination _links: type: object example: {} InvalidAmountForDestinationClearingTypeError: title: InvalidAmountForDestinationClearingTypeError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Amount is above the allowed threshold for the specified destination clearing type. path: type: string example: /amount/value _links: type: object example: {} InvalidCorrelationIdError: title: InvalidCorrelationIdError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Correlation id must be at least one character and up to 255 characters when supplied. path: type: string example: /correlationId _links: type: object example: {} SourceAddendaMaxLengthError: title: SourceAddendaMaxLengthError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Ach addenda entries can be up to 80 characters when supplied. path: type: string example: /achDetails/source/addenda/values _links: type: object example: {} DestinationAddendaMaxLengthError: title: DestinationAddendaMaxLengthError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Ach addenda entries can be up to 80 characters when supplied. path: type: string example: /achDetails/destination/addenda/values _links: type: object example: {} AchAddendaEntriesNotEnabledForAccountError: title: AchAddendaEntriesNotEnabledForAccountError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Supplying ach addenda entries is currently not enabled. path: type: string example: '' _links: type: object example: {} PointOfSaleAddendaEntriesNotEnabledForAccountError: title: PointOfSaleAddendaEntriesNotEnabledForAccountError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Supplying point of sale addenda entries is currently not enabled. path: type: string example: '' _links: type: object example: {} IncompatibleAddendaEntriesError: title: IncompatibleAddendaEntriesError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Addenda must not include both 'values' and 'pointOfSale addenda path: type: string example: /achDetails/source/addenda/pointOfSale _links: type: object example: {} InvalidPointOfSaleAddendaIdentificationCodeError: title: InvalidPointOfSaleAddendaIdentificationCodeError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Identification code on a Point of Sale addenda entry is required and can be up to 6 characters. path: type: string example: /achDetails/source/addenda/pointOfSale/identificationCode _links: type: object example: {} InvalidPointOfSaleAddendaSerialNumberError: title: InvalidPointOfSaleAddendaSerialNumberError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Serial number on a Point of Sale addenda entry is required and can be up to 6 characters. path: type: string example: /achDetails/source/addenda/pointOfSale/serialNumber _links: type: object example: {} InvalidPointOfSaleAddendaDateError: title: InvalidPointOfSaleAddendaDateError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: 'Date on a Point of Sale addenda entry is required and should be ISO-8601 format: YYYY-MM-DD.' path: type: string example: /achDetails/source/addenda/pointOfSale/date _links: type: object example: {} InvalidPointOfSaleAddendaAddressError: title: InvalidPointOfSaleAddendaAddressError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Address on a Point of Sale addenda entry is required and can be up to 27 characters. path: type: string example: /achDetails/source/addenda/pointOfSale/address _links: type: object example: {} InvalidPointOfSaleAddendaCityError: title: InvalidPointOfSaleAddendaCityError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: City on a Point of Sale addenda entry is required and can be up to 15 characters. path: type: string example: /achDetails/source/addenda/pointOfSale/city _links: type: object example: {} InvalidPointOfSaleAddendaStateError: title: InvalidPointOfSaleAddendaStateError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: State on a Point of Sale addenda entry is required and should be a valid 2-letter abbreviation. path: type: string example: /achDetails/source/addenda/pointOfSale/state _links: type: object example: {} TransferExpiredForFeeError: title: TransferExpiredForFeeError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Return fees can only be charged within 45 days of the original transfer's settlement date. path: type: string example: /_links/failed-transfer/href _links: type: object example: {} InvalidFeeOdfiError: title: InvalidFeeOdfiError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Transfer ineligible. path: type: string example: /_links/failed-transfer/href _links: type: object example: {} InvalidSourceBankAccountTypeError: title: InvalidBankAccountTypeError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Invalid bank account type path: type: string example: /_links/source/href _links: type: object example: {} InvalidDestinationBankAccountTypeError: title: InvalidDestinationBankAccountTypeError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Invalid bank account type path: type: string example: /_links/destination/href _links: type: object example: {} IncompatibleSourceAndDestinationTypesError: title: IncompatibleSourceAndDestinationTypesError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Card type funding sources can only accept payments directly from a balance path: type: string example: /_links/destination/href _links: type: object example: {} SourceNotCardNetworkSettlementError: title: SourceNotCardNetworkSettlementError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Source funding source does not support card payouts. path: type: string example: /_links/source/href _links: type: object example: {} CardSourceNotAllowedError: title: CardSourceNotAllowedError description: Error returned when attempting to use a debit card funding source as the transfer source type: object required: - code - message - _embedded additionalProperties: false properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object required: - errors properties: errors: type: array items: type: object required: - code - message - path properties: code: type: string enum: - NotAllowed example: NotAllowed message: type: string enum: - Cards cannot be used as a source for transfers. example: Cards cannot be used as a source for transfers. path: type: string enum: - /_links/source/href example: /_links/source/href _links: type: object example: {} IncompatibleSourceForRtpDestinationError: title: IncompatibleSourceForRtpDestinationError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Transfers using the Real Time Payments processing channel must be funded by a balance path: type: string example: /_links/destination/href _links: type: object example: {} InvalidAmountForDestinationProcessingChannelError: title: InvalidAmountForDestinationProcessingChannelError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Amount is greater than the allowed threshold for the specified destination processing channel. path: type: string example: /amount/value _links: type: object example: {} RtpFacilitatorFeeNotSupportedError: title: RtpFacilitatorFeeNotSupportedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Real Time Payments does not currently support facilitator fees path: type: string example: '' _links: type: object example: {} RtpUnverifiedSenderNotSupportedError: title: RtpUnverifiedSenderNotSupportedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Real Time Payments does not currently support unverified senders path: type: string example: '' _links: type: object example: {} RtpPersonalToPersonalNotSupportedError: title: RtpPersonalToPersonalNotSupportedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Real Time Payments does not currently support transfers between personal accounts path: type: string example: '' _links: type: object example: {} DestinationProcessingChannelNotSupportedError: title: DestinationProcessingChannelNotSupportedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Destination funding source does not support processing channel path: type: string example: /processingChannel/destination _links: type: object example: {} DestinationRemittanceDataMaxLengthError: title: DestinationRemittanceDataMaxLengthError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Remittance data entries can be up to 140 characters when supplied. path: type: string example: /rtpDetails/destination/remittanceData _links: type: object example: {} WithdrawInvalidAmountError: title: WithdrawInvalidAmountError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Invalid amount. path: type: string example: /amount/value _links: type: object example: {} WithdrawInvalidFundingSourceError: title: WithdrawInvalidFundingSourceError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Destination funding source is either removed or does not exist. path: type: string example: /_links/destination/href _links: type: object example: {} WithdrawAccountRestrictedError: title: WithdrawAccountRestrictedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Account or customer restricted. path: type: string example: /_links/source/href _links: type: object example: {} WithdrawInvalidAmountForClearingTypeError: title: WithdrawInvalidAmountForClearingTypeError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Amount is above the allowed threshold for the specified clearing type. path: type: string example: /amount/value _links: type: object example: {} WithdrawInvalidWireBeneficiaryLocalityError: title: WithdrawInvalidWireBeneficiaryLocalityError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Beneficiary locality must not exceed 35 characters and contain only alphanumeric, white space, '.' or '#' characters. path: type: string example: /wireInstructions/beneficiaryLocality _links: type: object example: {} WithdrawInvalidWireBeneficiaryRegionError: title: WithdrawInvalidWireBeneficiaryRegionError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Beneficiary region must not exceed 35 characters and contain only alphanumeric, white space, '.' or '#' characters. path: type: string example: /wireInstructions/beneficiaryRegion _links: type: object example: {} WithdrawInvalidWireBeneficiaryCountryError: title: WithdrawInvalidWireBeneficiaryCountryError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Beneficiary country must not exceed 35 characters and contain only alphanumeric, white space, '.' or '#' characters. path: type: string example: /wireInstructions/beneficiaryCountry _links: type: object example: {} WithdrawInvalidWireOriginatorToBeneficiaryError: title: WithdrawInvalidWireOriginatorToBeneficiaryError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Originator to beneficiary items must not exceed 35 characters and contain only alphanumeric, white space, '.' or '#' characters. path: type: string example: /wireInstructions/originatorToBeneficiary _links: type: object example: {} WithdrawProcessingChannelNotSupportedError: title: WithdrawProcessingChannelNotSupportedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Unsupported processing channel. path: type: string example: /_links/destination/href _links: type: object example: {} WithdrawRtpUnverifiedSenderNotSupportedError: title: WithdrawRtpUnverifiedSenderNotSupportedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Real Time Payments does not currently support unverified senders path: type: string example: '' _links: type: object example: {} WithdrawRtpPersonalWithdrawalNotSupportedError: title: WithdrawRtpPersonalWithdrawalNotSupportedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Real Time Payments withdrawal from a personal account is currently not supported path: type: string example: '' _links: type: object example: {} DepositAccountRestrictedError: title: DepositAccountRestrictedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Account is restricted. path: type: string example: /_links/destination/href _links: type: object example: {} WireInvalidImadError: title: WireInvalidImadError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Missing or invalid IMAD. path: type: string example: /imad _links: type: object example: {} WireAccountRestrictedError: title: WireAccountRestrictedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Restricted message: type: string example: Account or customer restricted. path: type: string example: /_links/destination/href _links: type: object example: {} WireNotEnabledError: title: WireNotEnabledError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Wire transfers are currently not enabled. path: type: string example: /_links/source/href _links: type: object example: {} WireAccountNotFoundError: title: WireAccountNotFoundError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotFound message: type: string example: Account or customer invalid. path: type: string example: /_links/destination/href _links: type: object example: {} PrefundingSourceNotAllowedError: title: PrefundingSourceNotAllowedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Only the prefunding account owner is able to prefund the account. path: type: string example: /_links/source/href _links: type: object example: {} InvalidAttemptToFacilitateFundsError: title: InvalidAttemptToFacilitateFundsError type: object required: - code - message properties: code: type: string example: Forbidden message: type: string example: 'Invalid Funds Flow: this operation requires the funds flow ''Facilitate'' to be enabled' InvalidAttemptToPayInFundsError: title: InvalidAttemptToPayInFundsError type: object required: - code - message properties: code: type: string example: Forbidden message: type: string example: 'Invalid Funds Flow: this operation requires the funds flow ''Receive'' to be enabled' InvalidAttemptToPayOutFundsError: title: InvalidAttemptToPayOutFundsError type: object required: - code - message properties: code: type: string example: Forbidden message: type: string example: 'Invalid Funds Flow: this operation requires the funds flow ''Send'' to be enabled' RtpAccountSettingNotEnabledError: title: RtpAccountSettingNotEnabledError type: object required: - code - message properties: code: type: string example: Forbidden message: type: string example: Real Time Payments not enabled for this account TooManyRequestsErrorError: title: TooManyRequestsErrorError type: object required: - code - message properties: code: type: string example: TooManyRequests message: type: string example: Concurrent transfers with the given funding source are not supported. Please wait a short period of time before re-attempting the request. StatusInvalidError: title: StatusInvalidError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: Invalid message: type: string example: Status invalid. path: type: string example: /status _links: type: object example: {} StatusNotAllowedError: title: StatusNotAllowedError type: object required: - code - message properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: NotAllowed message: type: string example: Status not allowed. path: type: string example: /status _links: type: object example: {} MassPaymentItem: title: MassPaymentItem type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388 mass-payment: type: object properties: href: type: string example: https://api.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563 destination: type: object properties: href: type: string example: https://api.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd transfer: type: object properties: href: type: string example: https://api.dwolla.com/transfers/fa3999db-41ed-e511-80df-0aa34a9b2388 id: type: string example: 2f845bc9-41ed-e511-80df-0aa34a9b2388 status: type: string example: success amount: type: object properties: value: type: string example: '1.00' currency: type: string example: USD metadata: type: object properties: item1: type: string example: item1 processingChannel: type: object properties: destination: type: string example: real-time-payments Label: title: Label type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: 7e042ffe-e25e-40d2-b86e-748b98845ecc created: type: string format: date-time example: '2022-05-15T22:19:09.635Z' amount: type: object properties: value: type: string example: '10.00' currency: type: string example: USD Labels: title: Labels type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: labels: type: array items: $ref: '#/components/schemas/Label' total: type: integer example: 100 LabelLedgerEntry: title: LabelLedgerEntry type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: 32d68709-62dd-43d6-a6df-562f4baec526 amount: type: object properties: value: type: string example: '-5.00' currency: type: string example: USD created: type: string format: date-time example: '2019-05-16T01:54:58.062Z' LabelLedgerEntries: title: LabelLedgerEntries type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: ledger-entries: type: array items: $ref: '#/components/schemas/LabelLedgerEntry' total: type: integer example: 100 Event: title: Event type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: 81f6e13c-557c-4449-9331-da5c65e61095 created: type: string format: date-time example: '2015-10-16T15:37:02.000Z' topic: type: string example: customer_transfer_created resourceId: type: string example: 09A166BC-1B74-E511-80DB-0AA34A9B2388 Events: title: Events type: object properties: _links: type: object additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: events: type: array items: $ref: '#/components/schemas/Event' total: type: integer format: int32 example: 3 WebhookSubscription: title: WebhookSubscription type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/webhook-subscriptions/077dfffb-4852-412f-96b6-0fe668066589 webhooks: type: object properties: href: type: string example: https://api.dwolla.com/webhook-subscriptions/077dfffb-4852-412f-96b6-0fe668066589/webhooks id: type: string example: 077dfffb-4852-412f-96b6-0fe668066589 url: type: string example: http://myapplication.com/webhooks paused: type: boolean example: true created: type: string format: date-time example: '2022-10-28T16:20:47+00:00' InvalidUrlFormatError: title: InvalidUrlFormatError type: object properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Url must be a valid url. path: type: string example: /url _links: type: object example: {} SecretTooLongError: title: SecretTooLongError type: object properties: code: type: string example: ValidationError message: type: string example: Validation error(s) present. See embedded errors list for more details. _embedded: type: object properties: errors: type: array items: type: object properties: code: type: string example: InvalidFormat message: type: string example: Secret must be 128 or fewer characters. path: type: string example: /secret _links: type: object example: {} MaxSubscriptionsReachedError: title: MaxSubscriptionsReachedError type: object properties: code: type: string example: MaxNumberOfResources message: type: string example: The maximum number of subscriptions has been reached. TooManyRequestsError: title: TooManyRequestsError type: object properties: code: type: string example: Too Many Requests message: type: string example: Please wait a short period of time before re-attempting the request. Webhook: title: Webhook type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8 subscription: type: object properties: href: type: string example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83 retry: type: object properties: href: type: string example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries event: type: object properties: href: type: string example: https://api.dwolla.com/events/03c7e14c-7f15-44a2-bcf7-83f2f7e95d50 id: type: string example: 9ece9660-aa34-41eb-80d7-0125d53b45e8 topic: type: string example: transfer_created accountId: type: string example: ca32853c-48fa-40be-ae75-77b37504581b eventId: type: string example: 03c7e14c-7f15-44a2-bcf7-83f2f7e95d50 subscriptionId: type: string example: a0943041-7a5c-4e8f-92de-b55711ef3a83 attempts: type: array items: type: object properties: id: type: string example: d4d16621-c6b0-40cb-8dc3-0469fa9dc4e8 request: type: object properties: timestamp: type: string format: date-time example: '2022-10-27T17:07:34.304Z' url: type: string example: https://myapp.runscope.net headers: type: array items: type: object properties: name: type: string example: X-Dwolla-Topic value: type: string example: transfer_created body: type: string example: id:03c7e14c-7f15-44a2-bcf7-83f2f7e95d50resourceId:81BA6F36-CD7C-E511-80DB-0AA34A9B2388topic:transfer_createdtimestamp:2022-10-27T17:07:34.207Z_links:self:href:https://api.dwolla.com/events/03c7e14c-7f15-44a2-bcf7-83f2f7e95d50account:href:https://api.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581bresource:href:https://api.dwolla.com/transfers/81BA6F36-CD7C-E511-80DB-0AA34A9B2388 response: type: object properties: timestamp: type: string format: date-time example: '2022-10-27T17:07:34.308Z' headers: type: array items: type: object properties: name: type: string example: Date value: type: string example: Tue 27 Oct 2022 17:07:34 GMT statusCode: type: integer format: int32 example: 200 body: type: string example: body:id:03c7e14c-7f15-44a2-bcf7-83f2f7e95d50resourceId:81BA6F36-CD7C-E511-80DB-0AA34A9B2388topic:transfer_createdtimestamp:2022-10-27T17:07:34.207Z_links:self:href:https://api.dwolla.com/events/03c7e14c-7f15-44a2-bcf7-83f2f7e95d50account:href:https://api.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581bresource:href:https://api.dwolla.com/transfers/81BA6F36-CD7C-E511-80DB-0AA34A9B2388files:[]form:fragment:headers:Connection:[close]Content-Length:[453]Content-Type:[application/json; charset=UTF-8]Host:[myapp.runscope.net]User-Agent:[dwolla-webhooks/1.0]X-Dwolla-Topic:[transfer_created]X-Request-Signature:[bd93780bd7e1ad77ab821094aaa0f9e3dece5ee3]host:myapp.runscope.netmethod:POSTparams:path:/region:us5runscope_host:prod078.runscope.inscheme:httpssource:capturesource_ip:52.24.10.184timestamp:1.4459656543078682e+09url:https://myapp.runscope.net/ WebhookRetries: title: WebhookRetries type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries _embedded: type: object properties: retries: type: array items: type: object properties: _links: type: object properties: self: type: object properties: href: type: string example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries/5aa27a0f-cf99-418d-a3ee-67c0ff99a494 webhook: type: object properties: href: type: string example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8 id: type: string example: 5aa27a0f-cf99-418d-a3ee-67c0ff99a494 timestamp: type: string format: date-time example: '2022-11-02T17:43:26.000Z' total: type: integer format: int32 example: 1 SandboxSimulationVirtualTransferItem: title: SandboxSimulationVirtualTransferItem description: One simulated external (VAN) transfer in a sandbox-simulations request. type: object required: - _link - amount properties: _link: type: object description: Link wrapper for the destination funding source (Dwolla HAL-style single link). required: - destination properties: destination: type: object required: - href properties: href: type: string format: uri example: https://api-sandbox.dwolla.com/funding-sources/5880e310-675a-4ce3-87d9-a475cc565e09 amount: $ref: '#/components/schemas/TransferAmount' SandboxSimulationVirtualAccountTransfersRequest: title: SandboxSimulationVirtualAccountTransfersRequest description: | Simulate Virtual Account Number (VAN) / external transfers in Sandbox. Up to 10 transfers per request; transfers are created and processed immediately. Successful response is 202 Accepted. type: object required: - type - transfers properties: type: type: string const: virtual description: Must be set to virtual for VAN transfer simulation. transfers: type: array description: Transfers to simulate (max 10 per request). minItems: 1 maxItems: 10 items: $ref: '#/components/schemas/SandboxSimulationVirtualTransferItem' SandboxSimulationCustomerVerificationRequest: title: SandboxSimulationCustomerVerificationRequest description: | Simulate a verification directive for a business Verified Customer in Sandbox. The customer must be in `retry` or `document` status. After a successful call, retrieve the Customer resource; the given `errorCode` appears under `_embedded.errors`. See Dwolla documentation for verification directive meanings. type: object required: - type - _links - errorCode properties: type: type: string const: customer-verification description: Must be set to customer-verification for verification directive simulation. _links: type: object required: - customer properties: customer: type: object required: - href properties: href: type: string format: uri description: URL of the Sandbox customer to attach the simulated directive to. example: https://api-sandbox.dwolla.com/customers/00000000-0000-0000-0000-000000000000 errorCode: type: string description: Verification directive to simulate for the linked customer. enum: - PersonalIDRequired - POBoxNotAllowed - AddressNotAssociatedWithBusiness - EINDocumentRequired example: AddressNotAssociatedWithBusiness SandboxSimulationBankProcessingRequest: title: SandboxSimulationBankProcessingRequest description: | Omit the request body or send an empty JSON object (`{}`). Triggers processing (or failure) for the last 500 bank transfers on the authorized application or Sandbox account, and initiated micro-deposits. Successful response is 200 with a HAL body including total. type: object additionalProperties: false SandboxSimulationRequest: title: SandboxSimulationRequest description: | Bank transfer processing (omit body or `{}`), VAN transfer simulation (`type` virtual + transfers), or verification directive simulation (`type` customer-verification, customer link, and errorCode). Typed bodies are mutually exclusive; use only an omitted body or `{}` for bank processing. oneOf: - $ref: '#/components/schemas/SandboxSimulationVirtualAccountTransfersRequest' - $ref: '#/components/schemas/SandboxSimulationCustomerVerificationRequest' - $ref: '#/components/schemas/SandboxSimulationBankProcessingRequest' SandboxSimulationBankProcessingResponse: title: SandboxSimulationBankProcessingResponse description: Response when simulating bank transfer processing (200 OK). type: object required: - _links - total properties: total: type: integer format: int32 example: 8 description: Count of bank transfers (and related items) affected by the simulation run. _links: type: object required: - self properties: self: $ref: '#/components/schemas/HalLink' SandboxSimulationCustomerVerificationResponse: title: SandboxSimulationCustomerVerificationResponse description: | Response when simulating customer verification directives (200 OK). Echoes the simulated `errorCode`; retrieve the Customer resource to inspect `_embedded.errors`. type: object required: - _links - errorCode properties: _links: type: object required: - self properties: self: $ref: '#/components/schemas/HalLink' errorCode: type: string description: Verification directive that was simulated. enum: - PersonalIDRequired - POBoxNotAllowed - AddressNotAssociatedWithBusiness - EINDocumentRequired example: AddressNotAssociatedWithBusiness ExchangePartner: title: ExchangePartner type: object required: - _links - id - name - status - created properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e name: type: string enum: - MX - Plaid - Flinks - Finicity - Checkout.com example: Plaid status: type: string enum: - active example: active created: type: string format: date-time example: '2022-07-23T00:18:21.419Z' ExchangePartners: title: ExchangePartners type: object properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object properties: exchange-partners: type: array items: $ref: '#/components/schemas/ExchangePartner' total: type: integer format: int32 example: 3 Exchange: title: Exchange type: object required: - _links - id - status - created properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' id: type: string example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e status: type: string enum: - active - deactivated - removed example: active created: type: string format: date-time example: '2022-07-23T00:18:21.419Z' Exchanges: title: Exchanges type: object required: - _links - _embedded - total properties: _links: additionalProperties: $ref: '#/components/schemas/HalLink' _embedded: type: object required: - exchanges properties: exchanges: type: array items: $ref: '#/components/schemas/Exchange' total: type: integer format: int32 example: 3 CreateFinicitySecureExchange: title: CreateFinicitySecureExchange type: object required: - _links - finicity properties: _links: type: object properties: exchange-partner: type: object properties: href: type: string example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 finicity: type: object properties: profile: type: integer format: int32 example: 3 version: type: string example: '1' receiptId: type: string example: cr_4N47ou7SlppuIxq0ZUtACh10vYcloY receiptVersion: type: string example: '1' customerId: type: string example: '5454874858510164117' partnerId: type: integer format: int64 example: 2445583946651 products: type: array items: type: object properties: product: type: string example: moneyTransferDetails accountId: type: string example: '1015199035827334916' accessPeriod: type: object properties: type: type: string example: timeframe startTime: type: string format: date example: '2022-07-06' endTime: type: string format: date-time example: '2022-08-16T06:06:20Z' timestamp: type: string format: date-time example: '2022-07-11T06:06:23Z' CreateTokenBasedExchange: title: CreateTokenBasedExchange description: Create an exchange using a token. Supports MX, Plaid, and Flinks secure exchange flows, and Checkout.com for Push to Card (debit card). type: object required: - _links - token properties: _links: type: object required: - exchange-partner properties: exchange-partner: type: object properties: href: type: string example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 token: type: string description: Connection or processor token from the exchange partner (e.g., Plaid, MX, Flinks), or payment ID (pay_xxx) from Checkout.com Flow for Push to Card example: sandbox-token-abc123 InvalidExchangeToken: title: InvalidExchangeToken type: object required: - code - message properties: code: type: string example: InvalidExchangeToken message: type: string example: Exchange token is expired. InvalidExchange: title: InvalidExchange type: object required: - code - message properties: code: type: string example: InvalidExchange message: type: string example: The exchange is no longer active. CreateMXOpenBankingExchange: title: CreateMXOpenBankingExchange type: object required: - _links - mx properties: _links: type: object required: - exchange-partner properties: exchange-partner: type: object required: - href properties: href: type: string format: uri example: https://api.dwolla.com/exchange-partners/bca8d065-49a5-475b-a6b4-509bc8504d22 mx: type: object required: - availableConnectionToken properties: availableConnectionToken: type: string description: The MX connection token for the available connection example: eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0= CreatePlaidOpenBankingExchange: title: CreatePlaidOpenBankingExchange type: object required: - _links - plaid properties: _links: type: object required: - exchange-partner properties: exchange-partner: type: object required: - href properties: href: type: string format: uri example: https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef plaid: type: object required: - publicToken properties: publicToken: type: string description: The Plaid public token for the connection example: public-production-d5456acb-01d5-4932-9783-e4c883cf1c0c CreateCustomerExchangeSessionWithRedirect: title: CreateCustomerExchangeSessionWithRedirect description: Create exchange session with redirect URL (required for mobile sessions with Plaid) type: object required: - _links properties: _links: type: object required: - exchange-partner - redirect-url properties: exchange-partner: type: object required: - href properties: href: type: string format: uri example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 redirect-url: type: object required: - href properties: href: type: string format: uri description: | Required for Plaid mobile sessions. For Android: use app URI scheme (e.g., com.example.app123) For iOS: use HTTPS URL (e.g., https://example.com/app123) example: https://example.com/app123 CreateCustomerExchangeSessionForWeb: title: CreateCustomerExchangeSessionForWeb description: Create exchange session for web (MX and Plaid web sessions where redirect-url is not required) type: object required: - _links properties: _links: type: object required: - exchange-partner properties: exchange-partner: type: object required: - href properties: href: type: string format: uri example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 ExchangeSession: title: ExchangeSession description: | Details of a previously created exchange session. Response shape varies by exchange partner. - **MX**: includes `_links.external-provider-session.href` (redirect URL). - **Plaid**: includes `externalProviderSessionToken` (Link initialization token). - **Checkout.com**: includes `externalProviderSessionData` (payment session for Flow/debit card capture). type: object required: - created - _links properties: created: type: string format: date-time example: '2024-03-25T17:13:38.430Z' _links: type: object required: - self - exchange-partner properties: self: type: object required: - href - type - resource-type properties: href: type: string format: uri example: https://api.dwolla.com/exchange-sessions/9b7fb629-0fad-44f4-8c5e-44c25a0bfa8e type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: exchange-sessions exchange-partner: type: object required: - href - type - resource-type properties: href: type: string format: uri example: https://api.dwolla.com/exchange-partners/bca8d065-49a5-475b-a6b4-509bc8504d22 type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: exchange-partner external-provider-session: type: object required: - href - type - resource-type properties: href: type: string format: uri description: | Present for MX exchange sessions. Contains the URL to redirect the user to complete the authorization process. example: https://www.mx.com/connect/lAfkc7m897s3t1ks9mmwyj4ry7Zq0xql4grzAg1kz77x7c9jrwls1t22w6xt8d2lsxx9zpqv30js3wswfdwcrpAsqgbAfkqwpksp7c2chsx167xy90Asfc67dkj9y48y8p142xw3yp4x5l9t9gkk6m3yk5vwsvyq2qq7w9trszxwdl14lmkg7l6949bn5n41chdkbnxycy40n9b6fkbdwl6qt5wl107k1x8srvlkpz325p412x9tkyA5clf39109lsfrgz2lkgsvntqf7l0zzwb5hl658gdjbxwhb52krwybnbdAqfq69cdy54l05jkvfwyf01q89x48jtgtx290lzjdfcty1lwb8d648wns/eyJ1aV9tZXNzYWdlX3ZlcnNpb24iOjQsInVpX21lc3NhZ2Vfd2Vidmlld191cmxfc2NoZW1lIjoibXgiLCJtb2RlIjoidmVyaWZpY2F0aW9uIn0%3D type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: text/html externalProviderSessionToken: type: string description: | Present for Plaid exchange sessions. Contains the token to initialize the Plaid Link flow. example: link-production-b41e8ed3-0874-4c64-b07d-a77088979d5f externalProviderSessionData: type: object description: | Present for Checkout.com exchange sessions (Push to Card / debit card flow). Use these fields to initialize the Checkout.com Flow component for card capture. properties: id: type: string description: Checkout.com payment session ID (e.g. ps_xxx). example: ps_39vhHjFxZuJRKOw5Hexbnv39fC7 payment_session_secret: type: string description: Checkout.com payment session secret. example: pss_2400dd88-171d-4a9c-bebf-e06b56d59bb6 payment_session_token: type: string description: Checkout.com payment session token (base64) for Flow initialization. example: YmFzZTY0:eyJpZCI6InBzXzM5dmhIakZ4WnVKUktPdzVIZXhibnYzOWZDNyIs... CreateReAuthExchangeSessionForWeb: title: CreateReAuthExchangeSessionForWeb description: Create re-auth exchange session for web (Plaid web sessions where request body is optional) type: object properties: {} CreateReAuthExchangeSessionWithRedirect: title: CreateReAuthExchangeSessionWithRedirect description: Create re-auth exchange session with redirect URL (required for mobile sessions with Plaid) type: object required: - _links properties: _links: type: object required: - redirect-url properties: redirect-url: type: object required: - href properties: href: type: string format: uri description: | Required for Plaid mobile sessions. For Android: use app URI scheme (e.g., com.example.app123) For iOS: use HTTPS URL (e.g., https://example.com/app123) example: https://example.com/app123 AvailableExchangeConnections: type: object required: - _links - _embedded properties: _links: type: object required: - self - customers properties: self: type: object required: - href - type - resource-type properties: href: type: string format: uri example: https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694/available-exchange-connections type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: customer customers: type: object required: - href - type - resource-type properties: href: type: string format: uri example: https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694 type: type: string example: application/vnd.dwolla.v1.hal+json resource-type: type: string example: customer _embedded: type: object required: - available-exchange-connections properties: available-exchange-connections: type: array items: type: object required: - availableConnectionToken - name properties: availableConnectionToken: type: string description: Token representing the external bank account that can be used to create a funding source example: eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0= name: type: string description: Name of the external bank account example: XYZ Checking headers: Location: description: The location of the created resource schema: type: string