diff --git a/gram/openapi.yml b/gram/openapi.yml new file mode 100644 index 0000000..c2115da --- /dev/null +++ b/gram/openapi.yml @@ -0,0 +1,15490 @@ +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-sandbox.dwolla.com + description: Sandbox server (default) + x-speakeasy-server-id: sandbox +security: + - bearerAuth: [] +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 + 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 + enum: + - bearer + 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/UnverifiedBusinessCustomer' + - $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/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/UnverifiedBusinessCustomer' + - $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 + properties: + documentType: + type: string + 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 + properties: + documentType: + type: string + 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 + properties: + _links: + type: object + 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 + properties: + id: + type: string + example: 2355953375 + text: + type: string + example: In what county do you currently live? + answers: + type: array + items: + type: object + 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 + 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 and Dwolla balance (verified customers only). Shows verification status, limited account details, and creation dates. 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 + - $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 funding source for a customer. Supports manual entry with routing/account numbers or instant verification using existing open banking connections. Created 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 + 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: 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 = { + 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: 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 = { + '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: php + 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: 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 = { + 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" + 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' + '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. + x-gram: + name: create_customer_funding_source + description: "\n Creates a bank account funding source for a customer to enable money transfers.\n Funding sources are the origin or destination of funds in transfers.\n Multiple methods are available depending on how bank account information is obtained.\n\n\n - Customer must exist (use get_customer or list_customers to verify if needed)\n - Choose appropriate funding source creation method based on available data:\n * Use account/routing numbers for traditional manual entry\n * Use exchange resource if bank was connected via Instant Account Verification (IAV) through an Open Banking provider (e.g. Plaid, MX, Finicity, Flinks)\n * Use virtual account type for creating Virtual Account Numbers (VANs) for enabling ACH transactions to and from a Dwolla Balance (digital wallet)\n\n\n 1. Determine which funding source creation method to use based on available data\n 2. For traditional method: Obtain valid US routing number and account number\n 3. For exchange method: First obtain an exchange resource via Secure Exchage or Open Banking \n 4. For virtual account method: Supply type \"virtual\"\n 4. Specify bank account type (checking, savings, or for VANs: checking only)\n 5. Provide a nickname for the funding source (max 50 characters)\n 6. After creation, funding source may require verification before use in transfers\n\n" + /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) and Dwolla balance (verified customers only). + 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' + '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. All responses include currency and last updated timestamp. Supports bank accounts (via Open Banking) and Dwolla balance (verified customers only). + 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' + '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), 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: + type: object + properties: + amount: + type: string + currency: + type: string + 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 + maxLength: 140 + pattern: ^[A-Za-z0-9\s\-_\.\/\(\),]*$ + 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 + maxLength: 140 + pattern: ^[A-Za-z0-9\s\-_\.\/\(\),]*$ + 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/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/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' + '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: string + 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 + 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: 12.34 + value: + type: string + example: USD + 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: '15.00' + value: + type: string + 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: + 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: Simulate bank transfer processing (Sandbox only) + description: | + Triggers processing for the last 500 bank transfers on the authorized application or Sandbox account. This endpoint is only available in the Sandbox environment. It will process or fail pending bank-to-bank transactions (including both sides of a transfer when applicable) and initiated micro-deposits. If webhooks are configured, corresponding events will be delivered. + + If a bank-to-bank transaction is initiated between two users, call this endpoint twice to process both the debit and credit sides. + 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 JSON body. Typically empty; presence of body is not required. + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + responses: + '200': + description: Simulation executed. Pending bank transfers and micro-deposits were processed or failed. + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + '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/CreateMXSecureExchange' + - $ref: '#/components/schemas/CreateFlinksSecureExchange' + - $ref: '#/components/schemas/CreatePlaidSecureExchange' + 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's external bank account and Dwolla through open banking partners. Acts as the handshake that establishes secure access to the customer's bank account data. Request body varies by partner (Plaid, MX, Flinks, Finicity). + 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/CreateMXSecureExchange' + - $ref: '#/components/schemas/CreateMXOpenBankingExchange' + - $ref: '#/components/schemas/CreateFlinksSecureExchange' + - $ref: '#/components/schemas/CreatePlaidSecureExchange' + - $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 to initiate instant bank account verification for a customer. Supports Plaid and MX open banking partners for faster verification as compared to traditional micro-deposits. + 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" + } + } + } + - 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, including URLs and tokens needed to continue the instant account verification flow. Response varies by partner - MX provides redirect URLs while Plaid provides session tokens for Link initialization. + 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); // => "https://int-widgets.moneydesktop.com/md/connect/..." + // For Plaid: .then((res) => res.body.externalProviderSessionToken) + - 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'] # => 'https://int-widgets.moneydesktop.com/md/connect/...' + # For Plaid: exchange_session.body['externalProviderSessionToken'] + - 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'] # => "https://int-widgets.moneydesktop.com/md/connect/..." + # For Plaid: exchange_session['externalProviderSessionToken'] + 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/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: + bearerAuth: + type: http + scheme: bearer + 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' + Address: + title: Address + type: object + required: + - address1 + - city + - country + - postalCode + - state + properties: + address1: + type: string + example: 462 Main Street + address2: + type: string + example: Suite 124 + city: + type: string + example: Des Moines + postalCode: + type: string + example: '50309' + state: + type: string + example: IA + country: + type: string + example: US + 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: Self Employed + authorizedRep: + type: string + example: Jane Doe + timezoneOffset: + type: integer + example: -6 + email: + type: string + example: janedoe@mail.com + phone: + type: string + example: '5555552368' + address: + $ref: '#/components/schemas/Address' + verificationStatus: + type: string + example: Verified + ownershipStatus: + type: string + example: Exempt + ownershipCertificationStatus: + type: string + example: Exempt + type: + type: string + example: Commercial + created: + type: string + format: date-time + example: '2021-10-25T00:39:38.283Z' + 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 + example: ach + bankName: + type: string + example: SANDBOX TEST BANK + fingerprint: + type: string + example: 5012989b55af15400e8102f95d2ec5e7ce3aef45c01613280d80a236dd8d6c + 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 + UnverifiedCustomer: + title: UnverifiedCustomer + description: Shared models between all Customer types + type: object + 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 + type: + type: string + example: unverified + status: + type: string + example: unverified + correlationId: + type: string + example: CID-abe2bb3d-d2ff-433b-95a3-0debd960ed25 + created: + type: string + format: date-time + example: '2022-10-07T16:46:13.023Z' + UnverifiedBusinessCustomer: + title: UnverifiedBusinessCustomer + allOf: + - $ref: '#/components/schemas/UnverifiedCustomer' + - type: object + properties: + type: + type: string + example: receive-only + status: + type: string + example: unverified + businessName: + type: string + example: Jane Corp llc + VerifiedPersonalCustomer: + title: VerifiedPersonalCustomer + allOf: + - $ref: '#/components/schemas/UnverifiedCustomer' + - type: object + properties: + type: + type: string + example: personal + status: + type: string + 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 + allOf: + - $ref: '#/components/schemas/UnverifiedCustomer' + - type: object + properties: + type: + type: string + example: business + status: + type: string + 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 + example: soleProprietorship + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + VerifiedBusinessCustomer: + title: VerifiedBusinessCustomer + allOf: + - $ref: '#/components/schemas/UnverifiedCustomer' + - type: object + properties: + type: + type: string + example: business + status: + type: string + 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 + example: llc + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + controller: + type: object + 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/UnverifiedBusinessCustomer' + - $ref: '#/components/schemas/VerifiedPersonalCustomer' + - $ref: '#/components/schemas/VerifiedSolePropCustomer' + - $ref: '#/components/schemas/VerifiedBusinessCustomer' + 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 + 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 + 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 + 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 + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e + firstName: + type: string + lastName: + type: string + address: + $ref: '#/components/schemas/InternationalAddress' + verificationStatus: + type: string + 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) + required: + - firstName + - lastName + - dateOfBirth + - address + - ssn + type: object + properties: + firstName: + type: string + lastName: + type: string + dateOfBirth: + type: string + address: + $ref: '#/components/schemas/InternationalAddress' + ssn: + type: string + CreateInternationalBeneficialOwner: + title: CreateInternationalBeneficialOwner + description: Create an International Beneficial Owner (identified by Passport) + required: + - firstName + - lastName + - dateOfBirth + - address + - passport + type: object + properties: + firstName: + type: string + lastName: + type: string + dateOfBirth: + type: string + 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 + properties: + _links: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + status: + type: string + example: uncertified + Document: + title: Document + type: object + properties: + _links: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: 56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc + status: + type: string + example: reviewed + type: + type: string + example: passport + created: + type: string + format: date-time + example: '2015-09-29T21:42:16.000Z' + documentVerificationStatus: + type: string + example: rejected + failureReason: + type: string + example: ScanDobMismatch + allFailureReasons: + type: array + items: + type: object + properties: + reason: + type: string + example: ScanDobMismatch + description: + type: string + example: Scan DOB does not match DOB on account + Documents: + title: Documents + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + documents: + type: array + items: + $ref: '#/components/schemas/Document' + total: + type: integer + example: 100 + 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 + x-gram: + name: create_funding_source_with_account_numbers + description: | + + Traditional method for adding a bank account using routing and account numbers. + Use this when you have the customer's bank routing number and account number directly as well as the bankAccountType and name. + This is the most common method to attach an unverified bank account. + + + - Bank account details are provided + - You have routing number (9 digits) and account number + - Customer wants to add checking, savings, general-ledger, or loan accounts + - You need to support wire transfers (add 'wire' to channels array) + - Creating unverified bank accounts + + + After creation, the funding source can be used for credits. In order to use it for debits, it will need verification via micro-deposits. + + + - routingNumber MUST be a STRING (e.g., "222222226", not 222222226) + - accountNumber MUST be a STRING (e.g., "123456789", not 123456789) + - Always use string values for numeric fields to preserve leading zeros + - Do NOT convert these values to numbers - they must remain strings + + 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 + x-gram: + name: create_funding_source_with_plaid + description: | + + Creates a bank funding source using a Plaid processor token. + This method provides instant account verification through Plaid's banking infrastructure. + The processor token contains pre-verified bank account information. + + + - Customer has already connected their bank through Plaid Link + - You have obtained a Plaid processor token for Dwolla + - You want instant verification without micro-deposits + - Customer is connecting checking or savings accounts only + + + - Must have Plaid integration set up + - Obtain a Plaid processor token (not a public token or access token) + - The processor token must be specifically for Dwolla + + + Funding sources created with Plaid tokens are instantly verified + and can be used for debit and credit transfers immediately without micro-deposit verification. + + 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 + x-gram: + name: create_funding_source_with_exchange + description: | + + Creates a funding source using an exchange resource from Dwolla's Open Banking or Secure Exchange partners . + Exchange resources represent bank account details that were obtained and verified through + Instant Account Verification (IAV) partners like MX, Plaid, or Finicity. + + + - Customer connected their bank through Dwolla's Open Banking flow or Secure Exchange flow + - You have an exchange resource URL from a previous IAV session + - You want instant verification with enhanced security + - Adding checking or savings accounts with pre-verified credentials + + + - Create an exchange session first (use Secure Exchange or Open Banking integration) + - Customer must complete the bank connection through IAV flow + - Obtain the exchange resource URL from the successful connection + + 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 + x-gram: + name: create_virtual_account_funding_source + description: | + + Creates a Virtual Account Number (VAN) for receiving external ACH transactions. + VANs provide unique account and routing numbers that route incoming funds + directly into a customer's Dwolla Balance, enabling customers to receive funds + from external sources outside the Dwolla network. + + + - Customer needs to receive ACH payments from external sources + - You want to provide customers with unique account numbers for receiving funds + - Customer has a Dwolla Balance (verified customers only) + - Enabling direct deposits or recurring payments into Dwolla Balance + + + - Customer must be a verified customer with Dwolla Balance access + - Type must be set to "virtual" + - Bank account type must be "checking" (only supported type for VANs) + + + - Direct deposit for payroll + - Receiving customer payments via ACH + - Collecting recurring subscription payments + - Consolidating funds from multiple external sources + + + After creation, use get_van_routing endpoint to retrieve the unique + account and routing numbers to share with external payers. + + 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) + oneOf: + - $ref: '#/components/schemas/CreateCustomerBankFundingSourceWithAccountNumbers' + - $ref: '#/components/schemas/CreateCustomerBankFundingSourceWithPlaid' + - $ref: '#/components/schemas/CreateCustomerExchangeFundingSource' + - $ref: '#/components/schemas/CreateCustomerVirtualAccountFundingSource' + x-gram: + name: funding_source_creation_options + description: |- + + This schema represents all available methods for creating a customer funding source. + Choose the appropriate method based on how you obtained the bank account information + and the customer's requirements. + + + IF you have routing number and account number directly: + → Use CreateCustomerBankFundingSourceWithAccountNumbers + → IMPORTANT: routingNumber and accountNumber MUST be strings, not numbers + ELSE IF you have a Plaid processor token: + → Use CreateCustomerBankFundingSourceWithPlaid + ELSE IF customer connected bank via IAV and you have exchange resource: + → Use CreateCustomerExchangeFundingSource + ELSE IF customer needs to receive external ACH payments into Dwolla Balance: + → Use CreateCustomerVirtualAccountFundingSource + + + - Account Numbers method: Most flexible, supports all account types, requires verification + - Plaid method: Instant verification, best UX, requires Plaid integration + - Exchange method: Instant verification, uses Dwolla's IAV partners (MX, Finicity, Plaid) + - Virtual Account method: For receiving external funds, verified customers only + + + - Using numbers instead of strings for routingNumber and accountNumber + - Forgetting to include all required fields for the chosen method + - Using the wrong bankAccountType for VANs (must be "checking") + - Mixing fields from different schemas (e.g., including plaidToken with routingNumber) + + 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. + 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: {} + 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: {} + 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: {} + 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 + 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 + 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 + 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 + ExchangePartner: + title: ExchangePartner + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e + name: + type: string + example: MX + status: + type: string + example: unverified + 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 + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e + status: + type: string + example: unverified + created: + type: string + format: date-time + example: '2022-07-23T00:18:21.419Z' + Exchanges: + title: Exchanges + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + exchanges: + type: array + items: + $ref: '#/components/schemas/Exchange' + total: + type: integer + format: int32 + example: 3 + CreateFinicitySecureExchange: + title: CreateFinicitySecureExchange + type: object + 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: 5454874858510164000 + partnerId: + type: integer + format: int64 + example: 2445583946651 + products: + type: array + items: + type: object + properties: + product: + type: string + example: moneyTransferDetails + accountId: + type: string + example: 1015199035827334900 + 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' + CreateMXSecureExchange: + title: CreateMXSecureExchange + type: object + 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 + token: + type: string + example: someMXProcessorToken + CreateFlinksSecureExchange: + title: CreateFlinksSecureExchange + type: object + required: + - _links + - token + 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/a0b22a57-68df-4450-b507-47c937e64e89 + token: + type: string + description: The Flinks connection token + example: MTExYTFhMWEtMTExMS0xYWExLTExMTEtMTFhMTExYTExMTFhOjIyMmIyYjFiLTIyMjItMmJiMi0yMjIyLTIyYjIyMmIyMjIyYg== + CreatePlaidSecureExchange: + title: CreatePlaidSecureExchange + type: object + properties: + _links: + type: object + properties: + exchange-partner: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef + token: + type: string + example: somePlaidProcessorToken + InvalidExchangeToken: + type: object + required: + - code + - message + properties: + code: + type: string + example: InvalidExchangeToken + message: + type: string + example: Exchange token is expired. + 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 + examples: + - description: Plaid Android example + value: com.example.app123 + - description: Plaid iOS example + value: 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: + 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. + examples: + - description: MX example + value: 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 + 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 + examples: + - description: Plaid Android example + value: com.example.app123 + - description: Plaid iOS example + value: 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 diff --git a/gram/overlay.yml b/gram/overlay.yml new file mode 100644 index 0000000..f4a3761 --- /dev/null +++ b/gram/overlay.yml @@ -0,0 +1,213 @@ +overlay: 1.0.0 +x-speakeasy-jsonpath: rfc9535 +info: + title: Gram Overlay for Dwolla API + version: 0.0.0 + description: | + This overlay adds x-gram extensions for LLM context and configures servers for sandbox-only environment. +actions: + # Remove production server, keep only sandbox + - target: $.servers[0] + remove: true + + # Update sandbox server to be the default (it becomes index 0 after removing prod) + - target: $.servers[0] + update: + url: https://api-sandbox.dwolla.com + description: Sandbox server (default) + x-speakeasy-server-id: sandbox + + # Remove all clientCredentials entries from the security array + - target: $.security[?(@.clientCredentials)] + remove: true + + # Remove the dedicated clientCredentials security scheme + - target: $.components.securitySchemes.clientCredentials + remove: true + + # Add bearerAuth to global security + - target: $.security + update: + - bearerAuth: [] + + # Add a dedicated bearerAuth security scheme + - target: $.components.securitySchemes + update: + bearerAuth: + type: http + scheme: bearer + + # Add x-gram extensions for funding source creation operation + - target: $["paths"]["/customers/{id}/funding-sources"]["post"] + update: + x-gram: + name: create_customer_funding_source + description: | + + Creates a bank account funding source for a customer to enable money transfers. + Funding sources are the origin or destination of funds in transfers. + Multiple methods are available depending on how bank account information is obtained. + + + - Customer must exist (use get_customer or list_customers to verify if needed) + - Choose appropriate funding source creation method based on available data: + * Use account/routing numbers for traditional manual entry + * Use exchange resource if bank was connected via Instant Account Verification (IAV) through an Open Banking provider (e.g. Plaid, MX, Finicity, Flinks) + * Use virtual account type for creating Virtual Account Numbers (VANs) for enabling ACH transactions to and from a Dwolla Balance (digital wallet) + + + 1. Determine which funding source creation method to use based on available data + 2. For traditional method: Obtain valid US routing number and account number + 3. For exchange method: First obtain an exchange resource via Secure Exchage or Open Banking + 4. For virtual account method: Supply type "virtual" + 4. Specify bank account type (checking, savings, or for VANs: checking only) + 5. Provide a nickname for the funding source (max 50 characters) + 6. After creation, funding source may require verification before use in transfers + + + # Add x-gram extensions to CreateCustomerBankFundingSourceWithAccountNumbers schema + - target: $["components"]["schemas"]["CreateCustomerBankFundingSourceWithAccountNumbers"] + update: + x-gram: + name: create_funding_source_with_account_numbers + description: | + + Traditional method for adding a bank account using routing and account numbers. + Use this when you have the customer's bank routing number and account number directly as well as the bankAccountType and name. + This is the most common method to attach an unverified bank account. + + + - Bank account details are provided + - You have routing number (9 digits) and account number + - Customer wants to add checking, savings, general-ledger, or loan accounts + - You need to support wire transfers (add 'wire' to channels array) + - Creating unverified bank accounts + + + After creation, the funding source can be used for credits. In order to use it for debits, it will need verification via micro-deposits. + + + - routingNumber MUST be a STRING (e.g., "222222226", not 222222226) + - accountNumber MUST be a STRING (e.g., "123456789", not 123456789) + - Always use string values for numeric fields to preserve leading zeros + - Do NOT convert these values to numbers - they must remain strings + + + # Add x-gram extensions to CreateCustomerBankFundingSourceWithPlaid schema + - target: $["components"]["schemas"]["CreateCustomerBankFundingSourceWithPlaid"] + update: + x-gram: + name: create_funding_source_with_plaid + description: | + + Creates a bank funding source using a Plaid processor token. + This method provides instant account verification through Plaid's banking infrastructure. + The processor token contains pre-verified bank account information. + + + - Customer has already connected their bank through Plaid Link + - You have obtained a Plaid processor token for Dwolla + - You want instant verification without micro-deposits + - Customer is connecting checking or savings accounts only + + + - Must have Plaid integration set up + - Obtain a Plaid processor token (not a public token or access token) + - The processor token must be specifically for Dwolla + + + Funding sources created with Plaid tokens are instantly verified + and can be used for debit and credit transfers immediately without micro-deposit verification. + + + # Add x-gram extensions to CreateCustomerExchangeFundingSource schema + - target: $["components"]["schemas"]["CreateCustomerExchangeFundingSource"] + update: + x-gram: + name: create_funding_source_with_exchange + description: | + + Creates a funding source using an exchange resource from Dwolla's Open Banking or Secure Exchange partners . + Exchange resources represent bank account details that were obtained and verified through + Instant Account Verification (IAV) partners like MX, Plaid, or Finicity. + + + - Customer connected their bank through Dwolla's Open Banking flow or Secure Exchange flow + - You have an exchange resource URL from a previous IAV session + - You want instant verification with enhanced security + - Adding checking or savings accounts with pre-verified credentials + + + - Create an exchange session first (use Secure Exchange or Open Banking integration) + - Customer must complete the bank connection through IAV flow + - Obtain the exchange resource URL from the successful connection + + + # Add x-gram extensions to CreateCustomerVirtualAccountFundingSource schema + - target: $["components"]["schemas"]["CreateCustomerVirtualAccountFundingSource"] + update: + x-gram: + name: create_virtual_account_funding_source + description: | + + Creates a Virtual Account Number (VAN) for receiving external ACH transactions. + VANs provide unique account and routing numbers that route incoming funds + directly into a customer's Dwolla Balance, enabling customers to receive funds + from external sources outside the Dwolla network. + + + - Customer needs to receive ACH payments from external sources + - You want to provide customers with unique account numbers for receiving funds + - Customer has a Dwolla Balance (verified customers only) + - Enabling direct deposits or recurring payments into Dwolla Balance + + + - Customer must be a verified customer with Dwolla Balance access + - Type must be set to "virtual" + - Bank account type must be "checking" (only supported type for VANs) + + + - Direct deposit for payroll + - Receiving customer payments via ACH + - Collecting recurring subscription payments + - Consolidating funds from multiple external sources + + + After creation, use get_van_routing endpoint to retrieve the unique + account and routing numbers to share with external payers. + + + # Add x-gram extensions to CreateCustomerFundingSource parent schema + - target: $["components"]["schemas"]["CreateCustomerFundingSource"] + update: + x-gram: + name: funding_source_creation_options + description: | + + This schema represents all available methods for creating a customer funding source. + Choose the appropriate method based on how you obtained the bank account information + and the customer's requirements. + + + IF you have routing number and account number directly: + → Use CreateCustomerBankFundingSourceWithAccountNumbers + → IMPORTANT: routingNumber and accountNumber MUST be strings, not numbers + ELSE IF you have a Plaid processor token: + → Use CreateCustomerBankFundingSourceWithPlaid + ELSE IF customer connected bank via IAV and you have exchange resource: + → Use CreateCustomerExchangeFundingSource + ELSE IF customer needs to receive external ACH payments into Dwolla Balance: + → Use CreateCustomerVirtualAccountFundingSource + + + - Account Numbers method: Most flexible, supports all account types, requires verification + - Plaid method: Instant verification, best UX, requires Plaid integration + - Exchange method: Instant verification, uses Dwolla's IAV partners (MX, Finicity, Plaid) + - Virtual Account method: For receiving external funds, verified customers only + + + - Using numbers instead of strings for routingNumber and accountNumber + - Forgetting to include all required fields for the chosen method + - Using the wrong bankAccountType for VANs (must be "checking") + - Mixing fields from different schemas (e.g., including plaidToken with routingNumber) + \ No newline at end of file diff --git a/openapi.yml b/openapi.yml index f420aaa..62dc5b8 100644 --- a/openapi.yml +++ b/openapi.yml @@ -3631,6 +3631,11 @@ paths: - 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 @@ -3660,6 +3665,11 @@ paths: - 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 @@ -11845,7 +11855,8 @@ components: verified: type: boolean description: Use when creating an unverified bank account. - const: false + enum: + - false example: false channels: type: array diff --git a/specs/resources/funding-sources/retrieveFundingSourceBalance.yml b/specs/resources/funding-sources/retrieveFundingSourceBalance.yml index 791b92e..30d2419 100644 --- a/specs/resources/funding-sources/retrieveFundingSourceBalance.yml +++ b/specs/resources/funding-sources/retrieveFundingSourceBalance.yml @@ -60,6 +60,11 @@ get: - 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 @@ -89,6 +94,11 @@ get: - 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 diff --git a/specs/schemas/funding-sources/CreateCustomerFundingSource.yml b/specs/schemas/funding-sources/CreateCustomerFundingSource.yml index 683fe8c..ba1feb8 100644 --- a/specs/schemas/funding-sources/CreateCustomerFundingSource.yml +++ b/specs/schemas/funding-sources/CreateCustomerFundingSource.yml @@ -40,7 +40,7 @@ CreateCustomerBankFundingSourceWithAccountNumbers: verified: type: boolean description: Use when creating an unverified bank account. - const: false + enum: [false] example: false channels: type: array